如何将 AWS Lambda 函数订阅到 AWS CloudFormation 中基于推送的事件源?

上次更新时间:2019 年 4 月 19 日

我无法将 AWS Lambda 函数订阅到我的 AWS CloudFormation 堆栈中的 Amazon Simple Storage Service (Amazon S3) 事件通知或 Amazon Simple Notification Service (Amazon SNS) 主题。如果使用 AWS::Lambda::EventSourceMapping 资源,我将收到以下错误:“无法识别的事件源,必须是 kinesis 或 dynamodb 流。”

简短描述

AWS::Lambda::EventSourceMapping 资源为基于提取的事件源设计,例如 Amazon DynamoDB 事件流和 Amazon Kinesis。借助基于推送的事件源,例如 Amazon S3 事件通知或 Amazon SNS 消息,事件源负责调用 Lambda 函数。为了使推送事件源调用 Lambda 函数时,该函数的资源策略必须授权受支持的事件源

解决方法

在您的 AWS CloudFormation 模板,使用 AWS::Lambda::Permission 资源添加一个基于资源的策略。例如,下面的代码示例中基于资源的策略允许 Amazon SNS 主题调用 Lambda 函数:

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

对于上述示例,您必须使用通知配置语句将 Lambda 函数订阅到 Amazon S3 存储桶。对于 Amazon SNS 主题事件源,您必须使用所需的权限定义主题策略


这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?