5

मेरे पास एक एडब्ल्यूएस लैम्ब्डा फ़ंक्शन है जिसे मैंने शीर्ष के माध्यम से बनाया है। मैंने टेरेफॉर्म के माध्यम से एक एसएनएस विषय और सदस्यता भी बनाई है।एसएनएस क्यों मेरा लैम्ब्डा ट्रिगर नहीं कर रहा है?

मेरे विषय है: arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions

मैं एक सदस्यता है: एक 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

मैं एसएनएस मैन्युअल को गति प्रदान:

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

यह संदेश आईडी रिटर्न लेकिन कोई मंगलाचरण होता है। क्यूं कर?

+0

लैम्ब्डा ** निगरानी ** टैब एक मंगलाचरण गिनती पता चलता है? यदि हां, तो क्या यह त्रुटि गिनती दिखाता है? क्या आपने एसएनएस विषय (जैसे ईमेल) पर एक और सदस्यता डालने की कोशिश की है ताकि यह पुष्टि हो सके कि संदेश एसएनएस में भेजा जा रहा है? –

+1

क्या लैम्ब्डा फ़ंक्शन को एसएनएस द्वारा बुलाया जाने की अनुमति है? यहां एक उदाहरण दिया गया है: http://mobile.awsblog.com/post/Tx1VE917Z8J4UDY/Invoking-AWS- लैम्ब्डा- कार्य-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

आप किसी भी स्नैब्स विषय को किसी भी लैम्ब्डा फ़ंक्शन को आमंत्रित करने की अनुमति देने के लिए "प्रिंसिपल": "sns.amazonaws.com" भी जोड़ सकते हैं – Robo

+0

मुझे यह जानने के लिए एक पल लगा कि यह इनलाइन नीति _SNS topic_ पर लागू की जानी चाहिए। –

0

रोबो टिप्पणी में उल्लेख किया है, जोड़ने एक Principal आधारित अनुमति ऐसा करने का सबसे आसान तरीका है:

"FooFunctionPermission" : { 
    "Type" : "AWS::Lambda::Permission", 
    "Properties" : { 
     "Action" : "lambda:InvokeFunction", 
     "FunctionName" : { "Ref" : "FooFunction" }, 
     "Principal" : "sns.amazonaws.com" 
    } 
} 
संबंधित मुद्दे