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.
Tutoriel : Utilisation AWS Lambda avec Amazon Simple Notification Service
Dans ce didacticiel, vous allez utiliser une fonction d'événement Lambda intégrée pour vous abonner Compte AWS à une rubrique Amazon Simple Notification Service (Amazon SNS) dans une rubrique distincte. Compte AWS Lorsque vous publiez des messages sur votre rubrique Amazon SNS, votre fonction d'événement Lambda lit le contenu du message et le transmet à Amazon Logs. CloudWatch Pour terminer ce didacticiel, vous devez utiliser le AWS Command Line Interface (AWS CLI).
Pour compléter ce tutoriel, effectuez les tâches suivantes :
-
Dans le compte A, créez une rubrique Amazon SNS.
-
Dans le compte B, créez une fonction d'événement Lambda qui lit les messages du sujet.
-
Dans le compte B, créez un abonnement à la rubrique.
-
Publiez des messages sur la rubrique Amazon SNS du compte A et vérifiez que la fonction d'événement Lambda du compte B les envoie dans Logs. CloudWatch
En suivant ces étapes, vous apprendrez à configurer une rubrique Amazon SNS pour appeler une fonction d'événement Lambda. Vous apprendrez également à créer une politique Gestion des identités et des accès AWS (IAM) qui autorise une ressource d'une autre Compte AWS à invoquer Lambda.
Dans le tutoriel, vous utilisez deux Comptes AWS différents. Les AWS CLI commandes illustrent cela en utilisant deux profils nommés appelés accountA etaccountB, chacun étant configuré pour être utilisé avec un profil différent Compte AWS. Pour savoir comment configurer le AWS CLI pour utiliser différents profils, consultez la section Paramètres des fichiers de configuration et d'identification dans le guide de l'AWS Command Line Interface utilisateur de la version 2. Assurez-vous de configurer la même valeur par défaut Région AWS pour les deux profils.
Si les AWS CLI profils que vous créez pour les deux Comptes AWS utilisent des noms différents, ou si vous utilisez le profil par défaut et un profil nommé, modifiez les AWS CLI commandes dans les étapes suivantes selon vos besoins.
Conditions préalables
Si vous ne l'avez pas encore installé AWS Command Line Interface, suivez les étapes décrites dans la section Installation ou mise à jour de la dernière version du AWS CLI pour l'installer.
Ce tutoriel nécessite un terminal de ligne de commande ou un shell pour exécuter les commandes. Sous Linux et macOS, utilisez votre gestionnaire de shell et de package préféré.
Note
Sous Windows, certaines commandes CLI Bash que vous utilisez couramment avec Lambda (par exemple zip) ne sont pas prises en charge par les terminaux intégrés du système d’exploitation. Pour obtenir une Windows-integrated version d'Ubuntu et de Bash, installez le sous-système Windows pour Linux
Créer une rubrique Amazon SNS (compte A)
Pour créer la rubrique
-
Dans le compte A, créez une rubrique standard Amazon SNS à l'aide de la commande suivante AWS CLI .
aws sns create-topic --name sns-topic-for-lambda --profile accountAVous devez visualiser des résultats similaires à ce qui suit.
{ "TopicArn": "arn:aws:sns:us-west-2:123456789012:sns-topic-for-lambda" }Notez l’Amazon Resource Name (ARN) de votre rubrique. Vous en aurez besoin plus tard dans le didacticiel lorsque vous ajouterez des autorisations à votre fonction d'événement Lambda pour vous abonner au sujet.
Créer un rôle d’exécution de fonction (compte B)
Un rôle d'exécution est un rôle IAM qui accorde à une fonction d'événement Lambda l'autorisation d' Services AWS accès et de ressources. Avant de créer votre fonction dans le compte B, vous devez créer un rôle qui donne à la fonction les autorisations de base pour écrire des journaux dans CloudWatch Logs. Nous ajouterons les autorisations de lecture de votre rubrique Amazon SNS lors d'une étape ultérieure.
Pour créer un rôle d’exécution
-
Dans le compte B, ouvrez la page des rôles
dans la console IAM. -
Choisissez Créer un rôle.
-
Pour Type d’entité de confiance, choisissez Service AWS .
-
Pour Cas d’utilisation, choisissez Lambda.
-
Choisissez Suivant.
-
Ajoutez une stratégie d’autorisations de base au rôle en procédant comme suit :
-
Dans le champ de recherche Politiques d’autorisations, saisissez
AWSLambdaBasicExecutionRole. -
Choisissez Suivant.
-
-
Finalisez la création du rôle en procédant comme suit :
-
Sous Détails du rôle, saisissez
lambda-sns-rolepour Nom du rôle. -
Choisissez Créer un rôle.
-
Création d'une fonction d'événement Lambda (compte B)
Créez une fonction d'événement Lambda qui traite vos messages Amazon SNS. Le code de fonction enregistre le contenu des messages de chaque enregistrement dans Amazon CloudWatch Logs.
Ce didacticiel utilise le runtime Node.js 24, mais nous avons également fourni des exemples de code dans d'autres langages d'exécution. Vous pouvez sélectionner l’onglet dans la zone suivante pour voir le code de l’exécution qui vous intéresse. Le JavaScript code que vous allez utiliser dans cette étape se trouve dans le premier exemple présenté dans l'JavaScriptonglet.
Pour créer la fonction d'événement
-
Créez un répertoire pour le projet, puis passez à ce répertoire.
mkdir sns-tutorial cd sns-tutorial -
Copiez l'exemple de JavaScript code dans un nouveau fichier nommé
index.js. -
Créez un package de déploiement à l’aide de la commande
zipsuivante.zip function.zip index.js -
Exécutez la AWS CLI commande suivante pour créer votre fonction d'événement Lambda dans le compte B.
aws lambda create-function --function-name Function-With-SNS \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs24.x \ --role arn:aws:iam::<AccountB_ID>:role/lambda-sns-role \ --timeout 60 --profile accountBVous devez visualiser des résultats similaires à ce qui suit.
{ "FunctionName": "Function-With-SNS", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:Function-With-SNS", "Runtime": "nodejs24.x", "Role": "arn:aws:iam::123456789012:role/lambda_basic_role", "Handler": "index.handler", ... "RuntimeVersionConfig": { "RuntimeVersionArn": "arn:aws:lambda:us-west-2::runtime:7d5f06b69c951da8a48b926ce280a9daf2e8bb1a74fc4a2672580c787d608206" } } -
Enregistrez l’Amazon Resource Name (ARN) de votre fonction. Vous en aurez besoin plus tard dans le didacticiel lorsque vous ajouterez des autorisations permettant à Amazon SNS d'appeler votre fonction.
Ajouter des autorisations à Event Function (compte B)
Pour qu’Amazon SNS puisse invoquer votre fonction, vous devez lui accorder une autorisation dans une instruction sur une stratégie basée sur les ressources. Vous ajoutez cette instruction à l'aide de la AWS CLI add-permission commande.
Pour autoriser Amazon SNS à invoquer votre fonction événementielle
-
Dans le compte B, exécutez la AWS CLI commande suivante en utilisant l'ARN de votre rubrique Amazon SNS que vous avez enregistrée précédemment.
aws lambda add-permission --function-name Function-With-SNS \ --source-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --statement-id function-with-sns --action "lambda:InvokeFunction" \ --principal sns.amazonaws.com --profile accountBVous devez visualiser des résultats similaires à ce qui suit.
{ "Statement": "{\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\": \"arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda\"}}, \"Action\":[\"lambda:InvokeFunction\"], \"Resource\":\"arn:aws:lambda:us-east-1:<AccountB_ID>:function:Function-With-SNS\", \"Effect\":\"Allow\",\"Principal\":{\"Service\":\"sns.amazonaws.com\"}, \"Sid\":\"function-with-sns\"}" }
Note
Si le compte associé à la rubrique Amazon SNS est hébergé dans le cadre d'un opt-in Région AWS, vous devez spécifier la région dans le principal. Si vous travaillez par exemple avec une rubrique Amazon SNS dans la région Asie-Pacifique (Hong Kong), vous devez spécifier sns.ap-east-1.amazonaws.com au lieu de sns.amazonaws.com pour le principal.
Accorder une autorisation multicompte pour l’abonnement Amazon SNS (compte A)
Pour que votre fonction d'événement Lambda sur le compte B puisse s'abonner à la rubrique Amazon SNS que vous avez créée dans le compte A, vous devez autoriser le compte B à s'abonner à votre sujet. Vous accordez cette autorisation à l'aide de la AWS CLI add-permission commande.
Pour accorder l’autorisation permettant au compte B de s’abonner à la rubrique
-
Dans le compte A, exécutez la AWS CLI commande suivante. Utilisez l’ARN pour la rubrique Amazon SNS que vous avez enregistrée précédemment.
aws sns add-permission --label lambda-access --aws-account-id<AccountB_ID>\ --topic-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --action-name Subscribe ListSubscriptionsByTopic --profile accountA
Créer un abonnement (compte B)
Dans le compte B, vous abonnez désormais votre fonction d'événement Lambda à la rubrique Amazon SNS que vous avez créée au début du didacticiel dans le compte A. Lorsqu'un message est envoyé à cette rubrique (sns-topic-for-lambda), Amazon SNS invoque votre fonction d'événement Lambda dans le compte B. Function-With-SNS
Pour créer un abonnement
-
Dans le compte B, exécutez la AWS CLI commande suivante. Utilisez la région par défaut dans laquelle vous avez créé votre sujet, ainsi que les ARN de votre sujet et de la fonction d'événement Lambda.
aws sns subscribe --protocol lambda \ --regionus-east-1\ --topic-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --notification-endpoint arn:aws:lambda:us-east-1:<AccountB_ID>:function:Function-With-SNS \ --profile accountBVous devez visualiser des résultats similaires à ce qui suit.
{ "SubscriptionArn": "arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda:5d906xxxx-7c8x-45dx-a9dx-0484e31c98xx" }
Publier des messages sur la rubrique (compte A et compte B)
Maintenant que votre fonction d'événement Lambda dans le compte B est abonnée à votre rubrique Amazon SNS dans le compte A, il est temps de tester votre configuration en publiant des messages sur votre sujet. Pour confirmer qu'Amazon SNS a invoqué votre fonction d'événement Lambda, vous utilisez les CloudWatch journaux pour afficher le résultat de votre fonction.
Pour publier un message sur votre sujet et consulter le résultat de votre fonction d'événement
-
Saisissez
Hello Worlddans un fichier texte et enregistrez-le sousmessage.txt. -
À partir du répertoire dans lequel vous avez enregistré votre fichier texte, exécutez la AWS CLI commande suivante dans le compte A. Utilisez l'ARN pour votre propre sujet.
aws sns publish --message file://message.txt --subject Test \ --topic-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --profile accountACela renvoie un ID de message avec un identifiant unique, indiquant qu'Amazon SNS a accepté le message. Amazon SNS tente ensuite de transmettre le message aux abonnés du sujet. Pour vérifier qu'Amazon SNS a invoqué votre fonction d'événement Lambda, utilisez les CloudWatch journaux pour afficher le résultat de votre fonction :
-
Dans le compte B, ouvrez la page Log groups
de la CloudWatch console Amazon. -
Choisissez le groupe de journaux de votre fonction (
/aws/lambda/Function-With-SNS). -
Choisissez le flux de journaux le plus récent.
-
Si votre fonction a été correctement invoquée, vous verrez un résultat similaire au suivant indiquant le contenu du message que vous avez publié dans votre sujet.
2023-07-31T21:42:51.250Z c1cba6b8-ade9-4380-aa32-d1a225da0e48 INFO Processed message Hello World 2023-07-31T21:42:51.250Z c1cba6b8-ade9-4380-aa32-d1a225da0e48 INFO done
Nettoyage de vos ressources
Vous pouvez maintenant supprimer les ressources que vous avez créées pour ce didacticiel, sauf si vous souhaitez les conserver. En supprimant AWS les ressources que vous n'utilisez plus, vous évitez des frais inutiles pour votre Compte AWS.
Dans le compte A, nettoyez votre rubrique Amazon SNS.
Pour supprimer la rubrique Amazon SNS
-
Ouvrez la page Topics (Rubriques)
de la console Amazon SNS. -
Sélectionnez la rubrique que vous avez créée.
-
Choisissez Supprimer.
-
Saisissez
delete medans le champ de saisie de texte. -
Sélectionnez Supprimer.
Dans le compte B, nettoyez votre rôle d'exécution, votre fonction d'événement Lambda et votre abonnement Amazon SNS.
Pour supprimer le rôle d’exécution
-
Ouvrez la page Roles (Rôles)
de la console IAM. -
Sélectionnez le rôle d’exécution que vous avez créé.
-
Sélectionnez Supprimer.
-
Saisissez le nom du rôle dans le champ de saisie de texte et choisissez Delete (Supprimer).
Pour supprimer la fonction d'événement Lambda
-
Ouvrez la page Event Functions
de la console Lambda. -
Sélectionnez la fonction d'événement que vous avez créée.
-
Sélectionnez Actions, Supprimer.
-
Saisissez
confirmdans la zone de saisie de texte et choisissez Delete (Supprimer).
Pour supprimer l’abonnement Amazon SNS
-
Ouvrez la page Subscriptions (Abonnements)
de la console Amazon SNS. -
Sélectionnez l’abonnement que vous avez créé.
-
Choisissez Delete (Supprimer), Delete (Supprimer).