

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Invocation des fonctions Lambda à l’aide des notifications Amazon SNS
<a name="with-sns"></a>

Utilisez une fonction Lambda pour traiter les notifications Amazon Simple Notification Service (Amazon SNS). Amazon SNS prend en charge les fonctions Lambda en tant que cibles pour les messages envoyés à une rubrique. Vous pouvez abonner votre fonction à des rubriques du même compte ou d’autres comptes AWS. Pour voir une procédure, consultez [Tutoriel : Utilisation AWS Lambda avec Amazon Simple Notification Service](with-sns-example.md).

Lambda prend en charge les déclencheurs SNS pour les rubriques SNS standard uniquement. Les rubriques FIFO ne sont pas prises en charge.

Lambda traite les messages SNS de manière asynchrone en les mettant en file d’attente et en gérant les nouvelles tentatives. Si Amazon SNS ne peut pas atteindre Lambda ou si le message est rejeté, Amazon SNS effectue de nouvelles tentatives à intervalles croissants pendant plusieurs heures. Pour plus de détails, consultes [Fiabilité](https://aws.amazon.com/sns/faqs/#Reliability) dans le FAQ sur Amazon SNS.

**Avertissement**  
Les invocations asynchrones traitent chaque événement au moins une fois, et le traitement des enregistrements peut être dupliqué. Pour éviter les problèmes potentiels liés à des événements dupliqués, nous vous recommandons vivement de rendre votre code de fonction idempotent. Pour en savoir plus, consultez [Comment puis-je rendre ma fonction Lambda idempotente ?](https://repost.aws/knowledge-center/lambda-function-idempotent) dans le Centre de connaissances AWS.

## Utilitaire d’idempotence de Powertools pour AWS Lambda
<a name="services-sns-powertools-idempotency"></a>

L’utilitaire d’idempotence de Powertools pour AWS Lambda rend vos fonctions Lambda idempotentes. Il est disponible pour Python, TypeScript, Java et .NET. Pour plus d’informations, consultez [Utilitaire d’idempotence](https://docs.powertools.aws.dev/lambda/python/latest/utilities/idempotency/) dans la *documentation Powertools pour AWS Lambda (Python)*, [Utilitaire d’idempotence](https://docs.aws.amazon.com/powertools/typescript/2.1.1/utilities/idempotency/) dans la *documentation Powertools pour AWS Lambda (TypeScript)*, [Utilitaire d’idempotence](https://docs.powertools.aws.dev/lambda/java/latest/utilities/idempotency/) dans la *documentation Powertools pour AWS Lambda (Java)* et [Utilitaire d’idempotence](https://docs.powertools.aws.dev/lambda/dotnet/utilities/idempotency/) dans la *documentation Powertools pour AWS Lambda (.NET)*.

**Topics**
+ [Utilitaire d’idempotence de Powertools pour AWS Lambda](#services-sns-powertools-idempotency)
+ [Ajout d’une rubrique Amazon SNS comme déclencheur de fonction Lambda à l’aide de la console](#sns-trigger-console)
+ [Ajout manuel d’une rubrique Amazon SNS comme déclencheur de fonction Lambda](#sns-trigger-manual)
+ [Exemple de forme d’évènement SNS](#sns-sample-event)
+ [Tutoriel : Utilisation AWS Lambda avec Amazon Simple Notification Service](with-sns-example.md)

## Ajout d’une rubrique Amazon SNS comme déclencheur de fonction Lambda à l’aide de la console
<a name="sns-trigger-console"></a>

Pour ajouter une rubrique SNS comme déclencheur d’une fonction Lambda, le moyen le plus simple consiste à utiliser la console Lambda. Lorsque vous ajoutez le déclencheur via la console, Lambda configure automatiquement les autorisations et les abonnements nécessaires pour commencer à recevoir des événements provenant de la rubrique SNS.

**Pour ajouter une rubrique SNS comme déclencheur d’une fonction Lambda (console)**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de la fonction pour laquelle vous souhaitez ajouter le déclencheur.

1. Choisissez **Configuration**, puis **Déclencheurs**.

1. Choisissez **Add trigger (Ajouter déclencheur)**.

1. Sous **Configuration du déclencheur**, dans le menu déroulant, choisissez **SNS**.

1. Pour **Rubrique SNS**, choisissez la rubrique SNS à laquelle vous abonner.

## Ajout manuel d’une rubrique Amazon SNS comme déclencheur de fonction Lambda
<a name="sns-trigger-manual"></a>

Pour configurer manuellement un déclencheur SNS pour une fonction Lambda, vous devez suivre les étapes suivantes :
+ Définir une stratégie basée sur les ressources pour votre fonction afin de permettre à SNS de l’invoquer.
+ Abonner votre fonction Lambda à la rubrique Amazon SNS.
**Note**  
Si votre rubrique SNS et votre fonction Lambda se trouvent sur des comptes AWS distincts, vous devez également octroyer des autorisations supplémentaires pour autoriser les abonnements entre comptes à la rubrique SNS. Pour plus d’informations, consultez [Accorder une autorisation multicompte pour l’abonnement Amazon SNS](with-sns-example.md#with-sns-subscription-grant-permission).

Vous pouvez utiliser l’AWS Command Line Interface (AWS CLI) pour effectuer ces deux étapes. Tout d’abord, pour définir une politique basée sur les ressources pour une fonction Lambda qui autorise les invocations SNS, utilisez la commande AWS CLI suivante. Assurez-vous de remplacer la valeur de `--function-name` par le nom de votre fonction Lambda et la valeur de `--source-arn` par l’ARN de votre rubrique SNS.

```
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
```

Pour abonner votre fonction à la rubrique SNS, utilisez la commande AWS CLI suivante. Remplacez la valeur de `--topic-arn` par le nom de votre rubrique ARN et la valeur de `--notification-endpoint` par l’ARN de votre fonction Lambda.

```
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}}
```

## Exemple de forme d’évènement SNS
<a name="sns-sample-event"></a>

Amazon SNS appelle votre fonction [de façon asynchrone](invocation-async.md) avec un événement contenant un message et des métadonnées.

**Example Événement de message Amazon SNS**  

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