

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-Benachrichtigungen
<a name="with-sns"></a>

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](with-sns-example.md).

Lambda unterstützt SNS-Auslöser nur für standardmäßige SNS-Themen. FIFO-Themen werden nicht unterstützt.

Lambda verarbeitet SNS-Nachrichten asynchron, indem die Nachrichten in eine Warteschlange gestellt und Wiederholungsversuche verarbeitet werden. 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](https://aws.amazon.com/sns/faqs/#Reliability) in den häufig gestellten Fragen zu Amazon SNS.

**Warnung**  
Asynchrone Lambda-Aufrufe 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 unter [Wie mache ich meine Lambda-Funktion idempotent](https://repost.aws/knowledge-center/lambda-function-idempotent) im AWS-Wissenszentrum.

## Idempotenz-Dienstprogramm von Powertools for AWS Lambda
<a name="services-sns-powertools-idempotency"></a>

Das Idempotenz-Dienstprogramm von Powertools for AWS Lambda macht Ihre Lambda-Funktionen idempotent. Es ist für Python, TypeScript, Java und .NET verfügbar. Weitere Informationen finden Sie unter [Idempotency Utility](https://docs.powertools.aws.dev/lambda/python/latest/utilities/idempotency/) in der *Dokumentation zu Powertools for AWS Lambda (Python)*, [Idempotency Utility](https://docs.aws.amazon.com/powertools/typescript/2.1.1/utilities/idempotency/) in der *Dokumentation zu Powertools for AWS Lambda (TypeScript)*, [Idempotency Utility](https://docs.powertools.aws.dev/lambda/java/latest/utilities/idempotency/) in der *Dokumentation zu Powertools for AWS Lambda (Java)* und [Idempotency Utility](https://docs.powertools.aws.dev/lambda/dotnet/utilities/idempotency/) in der *Dokumentation zu Powertools for AWS Lambda (.NET)*.

**Topics**
+ [Idempotenz-Dienstprogramm von Powertools for AWS Lambda](#services-sns-powertools-idempotency)
+ [Hinzufügen eines Amazon-SNS-Themenauslösers für eine Lambda-Funktion mithilfe der Konsole](#sns-trigger-console)
+ [Manuelles Hinzufügen eines Amazon-SNS-Themen-Auslösers für eine Lambda-Funktion](#sns-trigger-manual)
+ [Beispiel für eine SNS-Eventform](#sns-sample-event)
+ [Tutorial: Verwendung AWS Lambda mit Amazon Simple Notification Service](with-sns-example.md)

## Hinzufügen eines Amazon-SNS-Themenauslösers für eine Lambda-Funktion mithilfe der Konsole
<a name="sns-trigger-console"></a>

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

**So fügen Sie ein SNS-Thema als Auslöser für eine Lambda-Funktion hinzu (Konsole)**

1. Öffnen Sie die Seite [Funktionen](https://console.aws.amazon.com/lambda/home#/functions) der Lambda-Konsole.

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

1. Wählen Sie **Konfiguration** und anschließend **Auslöser** aus.

1. Wählen Sie **Add trigger**.

1. Wählen Sie unter **Auslöserkonfiguration** im Dropdown-Menü die Option **SNS** aus.

1. Wählen Sie für das **SNS-Thema** das SNS-Thema, das Sie abonnieren möchten.

## Manuelles Hinzufügen eines Amazon-SNS-Themen-Auslösers für eine Lambda-Funktion
<a name="sns-trigger-manual"></a>

Um einen SNS-Auslöser 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-Thema.
**Anmerkung**  
Wenn sich Ihr SNS-Thema und Ihre Lambda-Funktion in verschiedenen AWS-Konten befinden, müssen Sie außerdem zusätzliche Berechtigungen erteilen, um kontenübergreifende Abonnements für das SNS-Thema zu ermöglichen. Weitere Informationen finden Sie unter [Kontoübergreifende Berechtigung für Amazon-SNS-Abonnement erteilen](with-sns-example.md#with-sns-subscription-grant-permission).

Sie können das AWS Command Line Interface (AWS CLI) verwenden, um diese beiden Schritte abzuschließen. Verwenden Sie zunächst den folgenden AWS CLI-Befehl, um eine ressourcenbasierte Richtlinie für eine Lambda-Funktion zu definieren, die SNS-Aufrufe zulässt. Ersetzen Sie den Wert von `--function-name` durch den Namen Ihrer Lambda-Funktion und den Wert von `--source-arn` durch den ARN Ihres SNS-Themas.

```
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 AWS CLI-Befehl, um Ihre Funktion für das SNS-Thema zu abonnieren. Ersetzen Sie den Wert von `--topic-arn` durch Ihren SNS-Themen-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-Eventform
<a name="sns-sample-event"></a>

Amazon SNS ruft Ihre Funktion [asynchron](invocation-async.md) mit einem Ereignis auf, das eine Nachricht und Metadaten enthält.

**Example 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&amp;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"
      }
    }
  ]
}
```