我无法将 AWS Lambda 函数订阅到 AWS CloudFormation 堆栈中的 Amazon Simple Storage Service (Amazon S3) 事件通知或 Amazon Simple Notification Service (Amazon SNS) 主题。如果尝试使用 AWS::Lambda::EventSourceMapping 资源,我会收到以下错误消息:

“Unrecognized event source, must be kinesis or dynamodb stream.”(事件源无法识别,必须为 Kinesis 或 DynamoDB 流。)。

AWS::Lambda::EventSourceMapping 资源适用于基于提取的事件源,例如,Amazon DynamoDB 事件流和 Amazon Kinesis。对于基于推送的事件源 (例如 S3 事件通知或 Amazon SNS 消息),事件源负责调用 Lambda 函数。如果推送事件源要调用某个 Lambda 函数,该函数的资源策略必须授权事件源。支持的事件源中提供了支持的事件源列表。

AWS CloudFormation 模板中,使用 AWS::Lambda::Permission 资源添加 Lambda 函数策略。例如,以下 Lambda 函数策略会添加基于资源的 Lambda 函数策略,从而支持 Amazon SNS 主题调用 Lambda 函数:

"LambdaResourcePolicy": {
  "Type": "AWS::Lambda::Permission",
  "Properties": {
    "FunctionName" : { "Ref" : "MyFunction" },
    "Principal": "sns.amazonaws.com",
    "Action": "lambda:InvokeFunction",
    "SourceArn" : { "Ref" : "MySNSTopic" }
  }
}

在上述示例中,需要一个 S3 NotificationConfiguration 语句,以便将 Lambda 函数订阅到 S3 存储桶。对于 Amazon SNS 主题事件源,还必须定义主题策略。有关更多信息,请参阅设置跨账户权限。如果未设置任何主题策略,默认策略将包含所需的权限。


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2016 年 9 月 2 日

更新时间:2018 年 4 月 10 日