web-dev-qa-db-ja.com

CloudFormationを使用してLambda関数で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

ただし、ラムダ関数イベントソースパネルには表示されません: enter image description here

これについての奇妙なことは、同じラムダの[〜#〜] sns [〜#〜]ダッシュボードから新しいサブスクリプションを作成する場合です関数の場合、完全に重複するため、新しいサブスクリプションは作成されません。ただし、LambdaダッシュボードEvent Sourcesパネルを確認すると、SNS: JumpboxPresenceTopicの新しいエントリが表示されます: enter image description here

アマゾン側の問題だと思いますが、間違っているかもしれません。私のアプローチに何か問題がありますか、それともAWSの制限ですか?

最初にLambdaを呼び出すには、SNS権限を付与する必要があります。これはAWSの例です。 S3からSNSに変更し、SourceArnをSNSトピックARNとして設定することを忘れないでください。

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

14
Xing-Wei Lin

パーミッションに適切な関数名と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
suganya123