View a markdown version of this page

Invocation des fonctions d'événement Lambda avec les notifications Amazon SNS - AWS Lambda

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 d'événement Lambda avec les notifications Amazon SNS

Vous pouvez utiliser une fonction d'événement Lambda pour traiter les notifications Amazon Simple Notification Service (Amazon SNS). Amazon SNS prend en charge les fonctions d'événement Lambda en tant que cible pour les messages envoyés à un sujet. 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.

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é 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 rendre ma fonction Lambda idempotente dans le Knowledge Center. AWS

Utilitaire d'impuissance de Powertools pour AWS Lambda

L'utilitaire idempotencience de Powertools for Lambda rend vos fonctions d'événement AWS Lambda idempotentes. Il est disponible pour Python TypeScript, Java et .NET. Pour plus d'informations, consultez l'utilitaire Idempotency dans la documentation Powertools for Lambda AWS (Python), l'utilitaire Idempotency dans la documentation Powertools for Lambda (), l'utilitaire Idempotency dans la TypeScript documentation Powertools for AWS Lambda (Java) et l'utilitaire Idempotency dans la documentation Powertools for AWS Lambda (.NET). AWS

Ajout d'un déclencheur de rubrique Amazon SNS pour une fonction d'événement Lambda à l'aide de la console

Pour ajouter un sujet SNS comme déclencheur pour une fonction d'événement 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 pour une fonction d'événement Lambda (console)
  1. Ouvrez la page Event Functions de la console Lambda.

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

  3. Choisissez Configuration, puis Déclencheurs.

  4. Choisissez Add trigger (Ajouter déclencheur).

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

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

Ajout manuel d'un déclencheur de rubrique Amazon SNS pour une fonction d'événement Lambda

Pour configurer manuellement un déclencheur SNS pour une fonction d'événement 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.

  • Abonnez votre fonction d'événement Lambda à la rubrique Amazon SNS.

    Note

    Si votre rubrique SNS et votre fonction d'événement Lambda se trouvent sur des comptes AWS différents, vous devez également accorder 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.

Vous pouvez utiliser le 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 d'événement Lambda qui autorise les appels SNS, utilisez la commande suivante. AWS CLI Assurez-vous de remplacer la valeur de par le nom --function-name de votre fonction d'événement Lambda et la valeur de par l'ARN --source-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 AWS CLI commande suivante. Remplacez la valeur de --topic-arn par l'ARN de votre rubrique SNS et la valeur de par l'ARN de votre fonction --notification-endpoint d'événement 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

Amazon SNS appelle votre fonction de façon asynchrone avec un événement contenant un message et des métadonnées.

ExempleÉ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&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" } } ] }