无法使用CloudFormation在Lambda函数上创建SNS事件源

20

这是与我的问题相关的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 仪表板中看到主题: enter image description here

但是它不显示在lambda函数的事件源面板中: enter image description here

奇怪的是,如果我从SNS仪表板为同一个lambda函数创建一个新的订阅,那么不会创建新的订阅,因为它将是一个完全重复的订阅。然而,现在如果我检查Lambda仪表板中的事件源面板,我可以看到一个新的条目SNS: JumpboxPresenceTopicenter image description here

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

2个回答

14

1
我遇到了类似的问题,虽然这个答案确实有助于在Lambda中设置源权限,但SNS通知没有调用它,还有其他想法吗? - Onema
5
我曾经遇到过类似的问题,AWS支持告诉我删除"SourceAccount"并在许可资源中添加指向SNS主题的"SourceArn",希望有所帮助! - deviavir
@deviavir,是的!那也解决了我的问题。我最终只使用了“SourceArn”。 - Onema
2
@deviavir,对我也起作用了。关键是“SourceAccount”不存在(我的脚本中既有“SourceAccount”又有“SourceArn”,直到我删除了“SourceAccount”才能正常工作)。 - Geoff
添加SourceArn对我没有起作用。AWS Lambda控制台现在在触发器选项卡中显示SNS主题,但仅显示我在控制台手动设置的SNS主题。通过CloudFormation创建的任何SNS主题都不会显示在触发器选项卡中,并且当消息发布到SNS主题时,函数仍未被调用。 - Alex Glover
显示剩余2条评论

3

在权限中添加正确的函数名称和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" }
          }
      }
   },

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接