5

我有一個AWS lambda函數,我通過apex創建。我還通過地形創建了SNS主題和訂閱。爲什麼SNS不會觸發我的lambda?

我演講的題目是:arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions

我有一個訂閱:arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions:2da1d182-946d-4afd-91cb-1ed3453c5d86lambda類型和端點: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

Lambda函數是否具有被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主題調用任何lambda函數 – Robo

+0

花了我一些時間來確定這個內聯策略應該應用於_SNS topic_。 –

0

由於機器人在評論中提到的,加入了基於Principal權限是這樣做的最簡單的方法:

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