无法使用CloudFormation

时间:2015-09-08 19:13:34

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

这是与我的问题相关的 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函数 Event Sources 面板中: enter image description here

关于这一点的奇怪之处在于,如果我从 SNS 仪表板为同一个lambda函数创建一个新订阅,则不会创建新的订阅,因为它将完全相同。但是,现在,如果我检查 Lambda仪表板中的事件源面板,我可以看到SNS: JumpboxPresenceTopic的新条目: enter image description here

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

2 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分: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" }
          }
      }
   },