5

私はapex経由で作成したAWSラムダ関数を持っています。私はまた、SNSの話題とテラフォームを通じてサブスクリプションを作成しました。私は、サブスクリプションを持ってarn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctionsSNSが私のラムダを引き起こさないのはなぜですか?

私のトピックがあるlambdaタイプとarn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions:2da1d182-946d-4afd-91cb-1ed3453c5d86をし、エンドポイントは次のとおりです。arn:aws:lambda:ap-southeast-1:178284945954:function:wowauctions_get_auction_data

私は、これは正しい関数ARNで確認されました。すべてが正しく配線さそうです:

SNS picture

私は手動でSNSをトリガー:

aws sns publish 
    --topic-arn arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions 
    --message '{"endpoint": "https://us.api.battle.net", "realm": "spinebreaker"}' 

これは、メッセージIDを返しますが、何の呼び出しは起こりません。どうして?

+0

ラムダ**監視**]タブでは、呼び出しがカウント表示されていますか?もしそうなら、エラーカウントを表示しますか? SNSのトピック(メールなど)に別のサブスクリプションを入れて、メッセージがSNSで送信されていることを確認しようとしましたか? –

+1

ラムダ機能はSNSによって呼び出される権限を持っていますか?ここに例があります:http://mobile.awsblog.com/post/Tx1VE917Z8J4UDY/Invoking-AWS-Lambda-functions-via-Amazon-SNS – at0mzk

+0

@BretzLああ、それは問題です。ありがとう。 –

答えて

5

私は、ラムダが呼び出されることを可能にする、インラインポリシーを追加:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Stmt1474873816000", 
      "Effect": "Allow", 
      "Action": [ 
       "lambda:InvokeFunction" 
      ], 
      "Resource": [ 
       "arn:aws:lambda:ap-southeast-1:178284945954:function:wowauctions_get_auction_data" 
      ] 
     } 
    ] 
} 

そして、それは今働いているし。

+1

「Principal」:「sns.amazonaws.com」を追加して、snsトピックでラムダ関数を呼び出せるようにすることもできます – Robo

+0

このインラインポリシーを_SNSトピックに適用する必要があります。 –

0

ロボがPrincipalベースの許可を追加して、コメントで述べたようにこれを行う最も簡単な方法です:

"FooFunctionPermission" : { 
    "Type" : "AWS::Lambda::Permission", 
    "Properties" : { 
     "Action" : "lambda:InvokeFunction", 
     "FunctionName" : { "Ref" : "FooFunction" }, 
     "Principal" : "sns.amazonaws.com" 
    } 
} 
関連する問題