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.
Didacticiel : utilisation de Lambda avec Amazon SQS
Dans ce didacticiel, vous créerez une fonction Lambda qui consomme les messages d’une file d’attente Amazon Simple Queue Service (Amazon SQS). La fonction Lambda s’exécute chaque fois qu’un nouveau message est ajouté à la file d’attente. La fonction écrit les messages dans un flux Amazon CloudWatch Logs. Le diagramme suivant montre les ressources AWS utilisées pour compléter ce tutoriel.
Pour compléter ce didacticiel, effectuez les tâches suivantes :
-
Créez une fonction Lambda qui écrit des messages dans CloudWatch Logs.
-
Créer une file d’attente Amazon SQS.
-
Créez un mappage des sources d’événements Lambda. Le mappage des sources d’événements lit la file d’attente Amazon SQS et invoque votre fonction Lambda lorsqu’un nouveau message est ajouté.
-
Testez la configuration en ajoutant des messages à votre file d’attente et surveillez les résultats dans CloudWatch Logs.
Prérequis
Si vous n‘avez pas de compte Compte AWS, procédez comme suit pour en créer un.
Pour s‘inscrire à un Compte AWS
Ouvrez https://portal.aws.amazon.com/billing/signup
. Suivez les instructions en ligne.
Dans le cadre de la procédure d‘inscription, vous recevrez un appel téléphonique et vous saisirez un code de vérification en utilisant le clavier numérique du téléphone.
Lorsque vous souscrivez à un Compte AWS, un Utilisateur racine d'un compte AWS est créé. Par défaut, seul l‘utilisateur racine a accès à l‘ensemble des Services AWS et des ressources de ce compte. La meilleure pratique de sécurité consiste à attribuer un accès administratif à un utilisateur, et à utiliser uniquement l‘utilisateur racine pour effectuer les tâches nécessitant un accès utilisateur racine.
AWS vous envoie un e-mail de confirmation lorsque le processus d‘inscription est terminé. Vous pouvez afficher l‘activité en cours de votre compte et gérer votre compte à tout moment en accédant à https://aws.amazon.com/
Une fois que vous vous êtes inscrit à un Compte AWS, sécurisez l’Utilisateur racine d'un compte AWS, activez AWS IAM Identity Center et créez un utilisateur administratif afin de ne pas utiliser l’utilisateur root pour les tâches quotidiennes.
Sécurisation de votre Utilisateur racine d'un compte AWS
-
Connectez-vous à la AWS Management Console
en tant que propriétaire du compte en sélectionnant Root user (Utilisateur racine) et en saisissant votre adresse e-mail Compte AWS. Sur la page suivante, saisissez votre mot de passe. Pour obtenir de l‘aide pour vous connecter en utilisant l‘utilisateur racine, consultez Connexion en tant qu‘utilisateur racine dans le Guide de l‘utilisateur Connexion à AWS.
-
Activez l‘authentification multifactorielle (MFA) pour votre utilisateur racine.
Pour obtenir des instructions, consultez Activation d‘un dispositif MFA virtuel pour l‘utilisateur racine de votre Compte AWS (console) dans le Guide de l‘utilisateur IAM.
Création d’un utilisateur doté d’un accès administratif
-
Activez IAM Identity Center.
Pour obtenir des instructions, consultez Activation d’AWS IAM Identity Center dans le Guide de l’utilisateur AWS IAM Identity Center.
-
Dans IAM Identity Center, octroyez un accès administratif à un utilisateur.
Pour un didacticiel sur l’utilisation de l’Répertoire IAM Identity Center comme source d’identité, consultez Configuration de l’accès utilisateur avec l’Répertoire IAM Identity Center par défaut dans le Guide de l’utilisateur AWS IAM Identity Center.
Connexion en tant qu‘utilisateur doté d’un accès administratif
-
Pour vous connecter avec votre utilisateur IAM Identity Center, utilisez l‘URL de connexion qui a été envoyée à votre adresse e-mail lorsque vous avez créé l‘utilisateur IAM Identity Center.
Pour obtenir de l‘aide pour vous connecter à l‘aide d‘un utilisateur IAM Identity Center, consultez Connexion au portail d‘accès AWS dans le Guide de l‘utilisateur Connexion à AWS.
Attribution d’un accès à d’autres utilisateurs
-
Dans IAM Identity Center, créez un ensemble d’autorisations qui respecte la bonne pratique consistant à appliquer les autorisations de moindre privilège.
Pour obtenir des instructions, consultez Création d’un ensemble d’autorisations dans le Guide de l’utilisateur AWS IAM Identity Center.
-
Attribuez des utilisateurs à un groupe, puis attribuez un accès par authentification unique au groupe.
Pour obtenir des instructions, consultez Ajout de groupes dans le Guide de l’utilisateur AWS IAM Identity Center.
Si vous n’avez pas encore installé le AWS Command Line Interface, suivez les étapes de la rubrique Installation ou mise à jour de la dernière version de la 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. Installez le sous-système Windows pour Linux
Créer le rôle d’exécution
Un rôle d’exécution est un rôle AWS Identity and Access Management (IAM) qui accorde à la fonction Lambda l’autorisation d’accéder aux Services AWS et aux ressources. Pour permettre à votre fonction de lire les éléments d’Amazon SQS, attachez la politique d’autorisations AWSLambdaSQSQueueExecutionRole.
Pour créer un rôle d’exécution et attacher une politique d’autorisations Amazon SQS
-
Ouvrez la page Rôles
de la console IAM. -
Sélectionnez Créer un rôle.
-
Pour Type d’entité de confiance, choisissez Service AWS.
-
Pour Cas d’utilisation, choisissez Lambda.
-
Choisissez Suivant.
-
Dans le champ de recherche Politiques d’autorisations, saisissez
AWSLambdaSQSQueueExecutionRole
. -
Sélectionnez la politique AWSLambdaSQSQueueExecutionRole, puis choisissez Suivant.
-
Sous Détails du rôle, pour Nom du rôle, saisissez
lambda-sqs-role
, puis sélectionnez Créer un rôle.
Après la création du rôle, notez l’Amazon Resource Name (ARN) de votre rôle d’exécution. Vous en aurez besoin dans les étapes suivantes.
Créer la fonction
Créez une fonction Lambda qui traite vos messages Amazon SQS. Le code de la fonction enregistre le corps du message Amazon SQS dans les journaux CloudWatch.
Ce didacticiel utilise l’exécution Node.js 18.x, 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 code JavaScript que vous allez utiliser dans cette étape se trouve dans le premier exemple affiché dans l’onglet JavaScript.
Pour créer une fonction Lambda Node.js.
-
Créez un répertoire pour le projet, puis passez à ce répertoire.
mkdir sqs-tutorial cd sqs-tutorial
-
Copiez l’exemple de code JavaScript dans un nouveau fichier nommé
index.js
. -
Créez un package de déploiement à l’aide de la commande
zip
suivante.zip function.zip index.js
-
Créez une fonction Lambda à l’aide de la commande AWS CLI create-function
. Pour le paramètre role
, entrez l’ARN du rôle d’exécution que vous avez créé précédemment.Note
La fonction Lambda et la file d’attente Amazon SQS doivent se trouver dans la même Région AWS.
aws lambda create-function --function-name ProcessSQSRecord \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs18.x \
--role arn:aws:iam::
111122223333
:role/lambda-sqs-role
Tester la fonction
Invoquez manuellement votre fonction Lambda à l’aide de la commande invoke
AWS CLI et d’un exemple d’événement Amazon SQS.
Pour invoquer la fonction Lambda avec un exemple d’événement
-
Enregistrez le JSON suivant en tant que fichier nommé
input.json
. Ce JSON simule un événement qu’Amazon SQS pourrait envoyer à votre fonction Lambda, où"body"
contient le message réel de la file d’attente. Dans cet exemple, le message est"test"
.Exemple Événement Amazon SQS
Il s’agit d’un événement de test : vous n’avez pas besoin de modifier le message ou le numéro de compte.
{ "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "test", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "098f6bcd4621d373cade4e832627b4f6", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-1:111122223333:my-queue", "awsRegion": "us-east-1" } ] }
-
Exécutez la commande AWS CLI invoquer
suivante. Cette commande renvoie les journaux CloudWatch dans la réponse. Pour de plus amples informations sur la récupération des journaux, veuillez consulter Accédez aux journaux avec le AWS CLI. aws lambda invoke --function-name ProcessSQSRecord --payload file://input.json out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
L’option cli-binary-format est obligatoire si vous utilisez AWS CLI version 2. Pour faire de ce paramètre le paramètre par défaut, exécutez
aws configure set cli-binary-format raw-in-base64-out
. Pour plus d’informations, consultez les options de ligne de commande globales prises en charge par l’AWS CLI dans le Guide de l’utilisateur AWS Command Line Interface version 2. -
Recherchez le journal
INFO
dans la réponse. C’est ici que la fonction Lambda enregistre le corps du message. Vous devriez voir des journaux qui ressemblent à ceci :2023-09-11T22:45:04.271Z 348529ce-2211-4222-9099-59d07d837b60 INFO Processed message test 2023-09-11T22:45:04.288Z 348529ce-2211-4222-9099-59d07d837b60 INFO done
Créez une file d’attente Amazon SQS.
Créez une file d’attente Amazon SQS que la fonction Lambda peut utiliser en tant que source d’événement. La fonction Lambda et la file d’attente Amazon SQS doivent se trouver dans la même Région AWS.
Pour créer une file d’attente
-
Ouvrez la console Amazon SQS
. -
Choisissez Créez une file d’attente.
-
Entrez un nom pour la queue. Conservez les paramètres par défaut de toutes les autres options.
-
Choisissez Créez une file d’attente.
Une fois la file d’attente créée, notez son ARN. Vous en aurez besoin à l’étape suivante lorsque vous associerez la file d’attente à votre fonction Lambda.
Configurer la source de l’événement
Connectez la file d’attente Amazon SQS à votre fonction Lambda en créant un mappage des sources d’événements. Le mappage des sources d’événements lit la file d’attente Amazon SQS et invoque votre fonction Lambda lorsqu’un nouveau message est ajouté.
Pour créer un mappage entre votre file d’attente Amazon SQS et votre fonction Lambda, exécutez la commande la commande AWS CLI create-event-source-mapping
aws lambda create-event-source-mapping --function-name ProcessSQSRecord --batch-size 10 \ --event-source-arn arn:aws:sqs:
us-east-1:111122223333:my-queue
Pour obtenir la liste de vos mappages des sources d’événements, utilisez la commande list-event-source-mappings
aws lambda list-event-source-mappings --function-name ProcessSQSRecord
Envoyer un message de test
Pour envoyer un message Amazon SQS à la fonction Lambda
-
Ouvrez la console Amazon SQS
. -
Choisissez la queue que vous avez créée précédemment.
-
Choisissez Envoyer et recevoir des messages.
-
Sous Corps du message, entrez un message de test, tel que « ceci est un message de test ».
-
Choisissez Send Message (Envoyer un message).
Lambda interroge la file d’attente concernant les mises à jour. Lorsqu’il y a un nouveau message, Lambda invoque votre fonction avec ces nouvelles données d’événement de la file d’attente. Si le gestionnaire de la fonction revient sans exception, Lambda considère le message comme traité avec succès et commence à lire de nouveaux messages dans la file d’attente. Après avoir traité un message avec succès, Lambda le supprime automatiquement de la file d’attente. Si le gestionnaire renvoie une exception, Lambda considère que le traitement du lot de messages a échoué et invoque la fonction avec le même lot de messages.
Consulter les journaux de CloudWatch
Pour confirmer que la fonction a traité le message
Ouvrez la page Functions
(Fonctions) de la console Lambda. -
Choisissez la fonction ProcessSQSRecord.
-
Sélectionnez Monitor (Surveiller).
-
Choisissez Afficher les journaux CloudWatch.
-
Dans la console CloudWatch, choisissez le Flux de journaux pour la fonction.
-
Recherchez le journal
INFO
. C’est ici que la fonction Lambda enregistre le corps du message. Vous devriez voir le message que vous avez envoyé depuis la file d’attente Amazon SQS. Exemple :2023-09-11T22:49:12.730Z b0c41e9c-0556-5a8b-af83-43e59efeec71 INFO
Processed message this is a test message.
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 des ressources AWS que vous n’utilisez plus, vous évitez les frais superflus pour votre Compte AWS.
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 Delete (Supprimer).
-
Saisissez le nom du rôle dans le champ de saisie de texte et choisissez Delete (Supprimer).
Pour supprimer la fonction Lambda
-
Ouvrez la page Functions (Fonctions)
de la console Lambda. -
Sélectionnez la fonction que vous avez créée.
-
Sélectionnez Actions, Supprimer.
-
Saisissez
delete
dans la zone de saisie de texte et choisissez Delete (Supprimer).
Pour supprimer la file d’attente Amazon SQS
-
Connectez-vous à l’AWS Management Console et ouvrez la console Amazon SQS à l’adresse https://console.aws.amazon.com/sqs/
. -
Sélectionnez la file d’attente que vous avez créée.
-
Choisissez Supprimer.
-
Saisissez
confirm
dans le champ de saisie de texte. -
Sélectionnez Supprimer.