17

這是關係到我的問題Cloudformation模板代碼拉姆達功能的SNS事件來源:無法創建使用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: JumpboxPresenceTopic一個新的條目: enter image description here

我覺得這是在亞馬遜的一側的問題,但我可能是錯的。我的方法有問題嗎?還是AWS的限制?

回答

13

您必須先授予SNS權限才能調用Lambda。 以下是AWS的示例。請將其從S3更改爲SNS,並且不要忘記將SourceArn設置爲SNS主題ARN。

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

+1

我遇到了類似的問題,而這個答案確實有助於獲得源代碼的權限設置在拉姆達sns通知沒有調用它,爲什麼? – Onema

+5

@Onema我有類似的問題,AWS支持告訴我刪除「SourceAccount」並添加指向權限資源中的SNS主題的「SourceArn」,希望有所幫助! – deviavir

+0

@deviavir,是!這也解決了我的問題。我最終只使用了「SourceArn」。 – Onema

0

中添加權限正確的函數名和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" } 
      } 
     } 
    }, 
相關問題