Invocation de fonctions 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 de fonctions Lambda avec les notifications Amazon SNS

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.

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

Pour les appels asynchrones, Lambda place le message en file d'attente et gère 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 mappages de sources d'événements Lambda 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

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

Pour ajouter un sujet 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 définit 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 Lambda (console)
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

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

  3. Choisissez Configuration, puis Triggers.

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

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

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

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

Pour configurer manuellement un déclencheur SNS pour une fonction Lambda, vous devez suivre les étapes suivantes :

  • Définissez une politique basée sur les ressources pour votre fonction afin de permettre au SNS de l'invoquer.

  • Abonnez votre fonction Lambda à la rubrique Amazon SNS.

    Note

    Si votre rubrique SNS et votre fonction 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 multi-comptes 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 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 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 --notification-endpoint 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

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