Comment puis-je m'abonner à une fonction Lambda sur une rubrique Amazon SNS du même compte ?

Date de la dernière mise à jour : 22/04/2021

Je souhaite abonner ma fonction AWS Lambda à une rubrique Amazon Simple Notification Service (Amazon SNS) dans mon compte AWS. Comment procéder ?

Solution

Remarque : les instructions de cet article suivent celles du Didacticiel : Utilisation d'AWS Lambda avec Amazon Simple Notification Service. Toutefois, cet article fournit des instructions de configuration pour le même compte. Pour connaître les conditions préalables et les instructions de configuration entre comptes, reportez-vous au didacticiel.

1.    Exécutez la commande suivante pour créer une rubrique Amazon SNS :

Remarque : remplacez lambda-same-account par le nom que vous souhaitez donner à votre rubrique.

$ aws sns create-topic --name lambda-same-account

Notez l'Amazon Resource Name (ARN) de la rubrique qui est renvoyé dans la sortie de commande. Vous en aurez besoin par la suite.

2.    Créez un rôle d'exécution pour Lambda afin d'accéder aux ressources AWS. Notez l'ARN du rôle. Vous en aurez besoin par la suite.

3.    Créez un package de déploiement. (Suivez les étapes 1 et 2 du didacticiel.)

4.    Exécutez la commande suivante pour créer une fonction Lambda :

Remarque : remplacez sns-same-account par le nom que vous souhaitez donner à votre fonction. Remplacez arn:aws:iam::123456789012:role/service-role/lambda-sns-role par l'ARN de votre rôle d'exécution.

$ aws lambda create-function --function-name sns-same-account \
--zip-file fileb://function.zip --handler index.handler --runtime nodejs14.x \
--role arn:aws:iam::123456789012:role/service-role/lambda-sns-role \
--timeout 60

Notez l'ARN de la fonction qui est renvoyé dans la sortie de commande. Vous en aurez besoin à l'étape suivante.

5.    Exécutez la commande suivante afin d'ajouter des autorisations Lambda pour votre rubrique Amazon SNS :

Remarque : remplacez sns-same-account par le nom que vous avez donné à votre fonction. Remplacez arn:aws:sns:us-east-1:123456789012:lambda-same-account par l'ARN de votre rubrique.

$ aws lambda add-permission --function-name sns-same-account \
--source-arn arn:aws:sns:us-east-1:123456789012:lambda-same-account \
--statement-id sns-same-account --action "lambda:InvokeFunction" \
--principal sns.amazonaws.com

6.    Exécutez la commande suivante pour abonner votre fonction Lambda à la rubrique Amazon SNS :

Remarque : remplacez arn:aws:sns:us-east-1:123456789012:lambda-same-account par l'ARN de votre rubrique. Remplacez arn:aws:lambda:us-east-1:123456789012:function:sns-same-account par l'ARN de votre fonction.

$ aws sns subscribe --protocol lambda \
--topic-arn arn:aws:sns:us-east-1:123456789012:lambda-same-account \
--notification-endpoint arn:aws:lambda:us-east-1:123456789012:function:sns-same-account

7.    Exécutez la commande suivante pour tester l'abonnement en publiant un exemple de message :

Remarque : remplacez arn:aws:sns:us-east-1:123456789012:lambda-same-account par l'ARN de votre rubrique.

$ aws sns publish --message "Hello World" --subject Test \
--topic-arn arn:aws:sns:us-east-1:123456789012:lambda-same-account

La sortie de commande renvoie un ID de message, confirmant que le message est publié dans votre rubrique.

8.    (Facultatif) Exécutez les commandes suivantes pour confirmer dans Amazon CloudWatch Logs que la fonction Lambda a été appelée :
Remarque : remplacez sns-same-account par le nom de votre fonction.

$ aws logs describe-log-streams --log-group-name /aws/lambda/sns-same-account

Notez le logStreamName renvoyé. Ensuite, utilisez la commande suivante pour récupérer les journaux :
Remarque : remplacez sns-same-account par le nom de votre fonction et logStreamName par le logStreamName renvoyé par la commande describe-log-streams.

$ aws logs get-log-events --log-group-name /aws/lambda/sns-same-account \
--log-stream-name 'logStreamName'

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?