Aufrufen von Lambda-Funktionen mit Amazon SNS SNS-Benachrichtigungen - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Aufrufen von Lambda-Funktionen mit Amazon SNS SNS-Benachrichtigungen

Verwenden Sie eine Lambda-Funktion, um Amazon-Simple-Notification-Service-(Amazon-SNS)-Benachrichtigungen zu verarbeiten. Amazon SNS unterstützt Lambda-Funktionen als Ziel für Nachrichten, die an ein Thema gesendet werden. Sie können Ihre Funktion für Themen in demselben Konto oder in anderen AWS -Konten abonnieren. Eine ausführliche exemplarische Vorgehensweise finden Sie unter Tutorial: Verwendung AWS Lambda mit Amazon Simple Notification Service.

Lambda unterstützt SNS-Trigger nur für Standard-SNS-Themen. FIFO-Themen werden nicht unterstützt.

Bei asynchronen Aufrufe legt Lambda die Nachricht in eine Warteschlange und verarbeitet Wiederholungen. Wenn Amazon SNS Lambda nicht erreichen kann, oder die Nachricht abgelehnt wird, wiederholt Amazon SNS den Vorgang in zunehmenden Intervallen über mehrere Stunden. Weitere Details finden Sie unter Zuverlässigkeit in den häufig gestellten Fragen zu Amazon SNS.

Warnung

Lambda-Ereignisquellenzuordnungen verarbeiten jedes Ereignis mindestens einmal, und es kann zu einer doppelten Verarbeitung von Datensätzen kommen. Um mögliche Probleme im Zusammenhang mit doppelten Ereignissen zu vermeiden, empfehlen wir Ihnen dringend, Ihren Funktionscode idempotent zu machen. Weitere Informationen finden Sie im Knowledge Center unter Wie mache ich meine Lambda-Funktion idempotent?. AWS

Hinzufügen eines Amazon SNS SNS-Themenauslösers für eine Lambda-Funktion mithilfe der Konsole

Um ein SNS-Thema als Auslöser für eine Lambda-Funktion hinzuzufügen, verwenden Sie am einfachsten die Lambda-Konsole. Wenn Sie den Trigger über die Konsole hinzufügen, richtet Lambda automatisch die erforderlichen Berechtigungen und Abonnements ein, um Ereignisse aus dem SNS-Thema zu empfangen.

Um ein SNS-Thema als Auslöser für eine Lambda-Funktion hinzuzufügen (Konsole)
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie den Namen einer Funktion, für die Sie den Auslöser hinzufügen möchten.

  3. Wählen Sie Konfiguration und dann Trigger.

  4. Wählen Sie Add trigger.

  5. Wählen Sie im Dropdownmenü unter Trigger-Konfiguration die Option SNS aus.

  6. Wählen Sie unter SNS-Thema das SNS-Thema aus, das Sie abonnieren möchten.

Manuelles Hinzufügen eines Amazon SNS SNS-Themenauslösers für eine Lambda-Funktion

Um einen SNS-Trigger für eine Lambda-Funktion manuell einzurichten, müssen Sie die folgenden Schritte ausführen:

  • Definieren Sie eine ressourcenbasierte Richtlinie für Ihre Funktion, damit SNS sie aufrufen kann.

  • Abonnieren Sie Ihre Lambda-Funktion für das Amazon SNS SNS-Thema.

    Anmerkung

    Wenn sich Ihr SNS-Thema und Ihre Lambda-Funktion in unterschiedlichen AWS Konten befinden, müssen Sie auch zusätzliche Berechtigungen gewähren, um kontoübergreifende Abonnements für das SNS-Thema zuzulassen. Weitere Informationen finden Sie unter Kontenübergreifende Berechtigungen für ein Amazon SNS SNS-Abonnement gewähren.

Sie können die Taste AWS Command Line Interface (AWS CLI) verwenden, um diese beiden Schritte abzuschließen. Verwenden Sie zunächst den folgenden Befehl, um eine ressourcenbasierte Richtlinie für eine Lambda-Funktion zu definieren, die SNS-Aufrufe zulässt. AWS CLI Achten Sie darauf, den Wert von --function-name durch Ihren Lambda-Funktionsnamen und den Wert von --source-arn durch Ihren SNS-Thema-ARN zu ersetzen.

aws lambda add-permission --function-name example-function \ --source-arn arn:aws:sns:us-east-1:123456789012:sns-topic-for-lambda \ --statement-id function-with-sns --action "lambda:InvokeFunction" \ --principal sns.amazonaws.com

Verwenden Sie den folgenden Befehl, um das SNS-Thema für Ihre Funktion zu abonnieren. AWS CLI Ersetzen Sie den Wert von --topic-arn durch Ihren SNS-Thema-ARN und den Wert von --notification-endpoint durch Ihren Lambda-Funktions-ARN.

aws sns subscribe --protocol lambda \ --region us-east-1 \ --topic-arn arn:aws:sns:us-east-1:123456789012:sns-topic-for-lambda \ --notification-endpoint arn:aws:lambda:us-east-1:123456789012:function:example-function

Beispiel für eine SNS-Ereignisform

Amazon SNS ruft Ihre Funktion asynchron mit einem Ereignis auf, das eine Nachricht und Metadaten enthält.

Beispiel Amazon-SNS-Nachrichtenereignis
{ "Records": [ { "EventVersion": "1.0", "EventSubscriptionArn": "arn:aws:sns:us-east-1:123456789012:sns-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", "EventSource": "aws:sns", "Sns": { "SignatureVersion": "1", "Timestamp": "2019-01-02T12:45:07.000Z", "Signature": "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==", "SigningCertURL": "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-ac565b8b1a6c5d002d285f9598aa1d9b.pem", "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e", "Message": "Hello from SNS!", "MessageAttributes": { "Test": { "Type": "String", "Value": "TestString" }, "TestBinary": { "Type": "Binary", "Value": "TestBinary" } }, "Type": "Notification", "UnsubscribeURL": "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:123456789012:test-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", "TopicArn":"arn:aws:sns:us-east-1:123456789012:sns-lambda", "Subject": "TestInvoke" } } ] }