5

Ich habe eine AWS-Lambda-Funktion, die ich über den Apex erstellt habe. Ich habe auch ein SNS-Thema und ein Abonnement über Terraform erstellt.Warum löst SNS nicht mein Lambda aus?

Mein Thema ist: arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions

Ich habe ein Abonnement: arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions:2da1d182-946d-4afd-91cb-1ed3453c5d86 mit einem lambda Typ und der Endpunkt ist: arn:aws:lambda:ap-southeast-1:178284945954:function:wowauctions_get_auction_data

Ich habe bestätigt dies die ARN korrekte Funktion ist. Alles scheint richtig verdrahtet:

SNS picture

I auslösen SNS manuell:

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

Es gibt die Nachrichten-ID, aber kein Aufruf geschieht. Warum?

+0

Ist die Lambda ** Überwachung ** Tab ein Aufruf zählen zeigen? Wenn ja, zeigt es eine Fehleranzahl an? Haben Sie versucht, ein anderes Abonnement für das SNS-Thema (z. B. E-Mail) zu erstellen, um zu bestätigen, dass die Nachricht in SNS gesendet wird? –

+1

Hat die Lambda-Funktion die Berechtigung, von SNS aufgerufen zu werden? Es gibt ein Beispiel hier: http://mobile.awsblog.com/post/Tx1VE917Z8J4UDY/Invoking-AWS-Lambda-Funktionen-Via-Amazon-SNS – at0mzk

+0

@BretzL Ah das ist das Problem. Vielen Dank. –

Antwort

5

Ich habe eine Inline-Politik des Lambda zu ermöglichen, wird aufgerufen:

{ 
    "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" 
      ] 
     } 
    ] 
} 

Und es funktioniert jetzt.

+1

Sie können auch '' Principal ":" sns.amazonaws.com "' hinzufügen, damit ein beliebiges sns-Thema eine Lambda-Funktion aufrufen kann. – Robo

+0

Ich brauchte einen Moment, um herauszufinden, dass diese Inline-Richtlinie auf das _SNS-Thema angewendet werden sollte. –

0

Wie bereits erwähnt Robo in den Kommentaren, Hinzufügen einer Principal basierte Erlaubnis ist der einfachste Weg, dies zu tun:

"FooFunctionPermission" : { 
    "Type" : "AWS::Lambda::Permission", 
    "Properties" : { 
     "Action" : "lambda:InvokeFunction", 
     "FunctionName" : { "Ref" : "FooFunction" }, 
     "Principal" : "sns.amazonaws.com" 
    } 
} 
Verwandte Themen