【问题标题】:Can't create a SNS Event source on a Lambda function using CloudFormation无法使用 CloudFormation 在 Lambda 函数上创建 SNS 事件源
【发布时间】:2015-12-04 14:14:43
【问题描述】:

这是与我的问题相关的 Cloudformation 模板代码:

"SNSTopic": {
  "Type": "AWS::SNS::Topic",
  "Properties": {
    "TopicName": "JumpboxPresenceTopic",
    "DisplayName": "Jumpbox Presence Topic",
    "Subscription": [
      {
        "Endpoint": {
          "Fn::GetAtt": [
            "Lambda",
            "Arn"
          ]
        },
        "Protocol": "lambda"
      }
    ]
  }
},
"Lambda": {
  "Type": "AWS::Lambda::Function",
  "Properties": [...]

我可以在 SNS 仪表板中看到主题:

但它没有显示在 lambda 函数 Event Sources 面板中:

奇怪的是,如果我从 SNS 仪表板为同一个 lambda 函数创建新订阅,则不会创建新订阅,因为它会完全重复。但是,现在如果我检查 Lambda 仪表板 中的 Event Sources 面板,我可以看到 SNS: JumpboxPresenceTopic 的新条目:

我觉得这是亚马逊方面的问题,但我可能是错的。我的方法有问题还是 AWS 的限制?

【问题讨论】:

    标签: amazon-web-services amazon-sns aws-lambda amazon-cloudformation


    【解决方案1】:

    在权限中添加正确的函数名称和 sourcearn 有助于解决问题

    "MySNSTopic": {
                "Type": "AWS::SNS::Topic",
                "Properties": {
                    "TopicName": "MyTopic",
                    "DisplayName": "My Test Topic",
                    "Subscription": [
                    {
                        "Endpoint": { "Fn::GetAtt" : ["Lambda", "Arn"] },
                        "Protocol": "lambda"
                    }
                    ]
                }
        },
        "PermissionForEventsToInvokeLambda": {
              "Type": "AWS::Lambda::Permission",
              "Properties": {
                "FunctionName": { "Fn::GetAtt" : ["Lambda", "Arn"] },
                "Action": "lambda:InvokeFunction",
                "Principal": "sns.amazonaws.com",
                "SourceArn": { "Ref": "MySNSTopic" }
              }
          }
       },
    

    【讨论】:

      【解决方案2】:

      您必须先授予 SNS 权限才能调用 Lambda。 这是来自 AWS 的示例。请将其从 S3 更改为 SNS,并且不要忘记将 SourceArn 设置为 SNS 主题 ARN。

      http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html

      【讨论】:

      • 我遇到了类似的问题,虽然这个答案确实有助于在 lambda 中设置源权限,但 sns 通知没有调用它,还有其他想法为什么?
      • @Onema 我遇到了类似的问题,AWS 支持告诉我删除“SourceAccount”并在 Permission 资源中添加指向 SNS 主题的“SourceArn”,希望对您有所帮助!
      • @deviavir,是的!这也解决了我的问题。我最终只使用了“SourceArn”。
      • @deviavir,也为我工作。关键是“SourceAccount”不存在(我的脚本中有 SourceAccount 和 SourceArn,直到我删除 SourceAccount 才起作用)。
      • 添加 SourceArn 对我不起作用。 AWS Lambda 控制台现在在触发器选项卡中显示 SNS 主题,但仅显示我在控制台中手动设置的 SNS 主题。我通过 CloudFormation 创建的任何 SNS 主题都不会显示在“触发器”选项卡中,并且在将消息发布到 SNS 主题时仍然没有调用该函数。
      猜你喜欢
      • 2020-03-27
      • 2016-01-05
      • 2019-06-29
      • 2021-10-04
      • 2016-06-18
      • 1970-01-01
      • 2023-03-21
      • 2020-09-07
      • 2020-12-21
      相关资源
      最近更新 更多