Didacticiel : utilisation d’une file d’attente Amazon SQS entre comptes en tant que source d’événement - 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.

Didacticiel : utilisation d’une file d’attente Amazon SQS entre comptes en tant que source d’événement

Dans ce didacticiel, vous créerez une fonction Lambda qui consomme les messages d’une file d’attente Amazon Simple Queue Service (Amazon SQS) à un compte AWS différent. Ce tutoriel comporte deuxAWScomptes :Compte Afait référence au compte qui contient votre fonction Lambda, etCompte Bfait référence au compte qui contient la file d’attente Amazon SQS.

Prérequis

Ce didacticiel suppose que vous avez quelques connaissances des opérations Lambda de base et de la console Lambda. Si ce n’est déjà fait, suivez les instructions fournies dans Créer une fonction Lambda à l'aide de la console pour créer votre première fonction Lambda.

Pour effectuer les étapes suivantes, vous avez besoin de l’AWS CLI version 2. Les commandes et la sortie attendue sont répertoriées dans des blocs distincts :

aws --version

Vous devriez voir la sortie suivante:

aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2

Pour les commandes longues, un caractère d’échappement (\) est utilisé pour les fractionner en plusieurs lignes.

Sur 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 afin d’obtenir une version intégrée à Windows d’Ubuntu et Bash. Les exemples de commandes CLI de ce guide utilisent le formatage Linux. Les commandes qui incluent des documents JSON en ligne doivent être reformatées si vous utilisez la CLI Windows.

Création du rôle d’exécution (compte A)

Dans le Compte A créez un rôle d’exécution qui donne à votre fonction l’autorisation d’accéder aux ressources AWS requises.

Pour créer un rôle d’exécution
  1. Ouvrez la page Roles (Rôles) dans la AWS Identity and Access Management console IAM.

  2. Choisissez Créer un rôle.

  3. Créez un rôle avec les propriétés suivantes :

    • Trusted entity (Entité de confiance) – AWS Lambda.

    • Permissions (Autorisations) – AWSLambdaSQSQueueExecutionRole

    • Nom de rôlecross-account-lambda-sqs-role

La stratégie AWSLambdaSQSQueueExecutionRole possède les autorisations dont la fonction a besoin pour lire les éléments d’Amazon SQS et écrire des journaux dans Amazon CloudWatch Logs.

Créer la fonction (compte A)

Dans le Compte A, créez une fonction Lambda qui traite vos messages Amazon SQS. La fonction Lambda et la file d’attente Amazon SQS doivent se trouver dans la même Région AWS.

L’exemple de code Node.js 18 suivant écrit chaque message dans un journal dans CloudWatch Logs.

Exemple index.mjs
export const handler = async function(event, context) { event.Records.forEach(record => { const { body } = record; console.log(body); }); return {}; }
Pour créer la fonction
Note

Suivre ces étapes permet de créer une fonction dans Node.js 18. Pour les autres langages, les étapes sont similaires mais certains détails sont différents.

  1. Enregistrez l’exemple de code en tant que fichier nommé index.mjs.

  2. Créez un package de déploiement.

    zip function.zip index.mjs
  3. Créez la fonction à l’aide de la commande create-function AWS Command Line Interface (AWS CLI).

    aws lambda create-function --function-name CrossAccountSQSExample \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs18.x \ --role arn:aws:iam::<AccountA_ID>:role/cross-account-lambda-sqs-role

Testez la fonction (compte A)

Dans le Compte A, testez votre fonction Lambda manuellement à l’aide de la commande invoke AWS CLI et d’un exemple d’événement Amazon SQS.

Si le gestionnaire revient normalement 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.

  1. Enregistrez le JSON suivant en tant que fichier nommé input.txt.

    { "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:example-queue", "awsRegion": "us-east-1" } ] }

    Le JSON précédent simule un événement qu’Amazon SQS pourrait envoyer à votre fonction Lambda, où "body" contient le message réel de la file d’attente.

  2. Exécutez la commande invoke AWS CLI suivante.

    aws lambda invoke --function-name CrossAccountSQSExample \ --cli-binary-format raw-in-base64-out \ --payload file://input.txt outputfile.txt

    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.

  3. Vérifiez la sortie dans le fichier outputfile.txt.

Créer une file d’attente Amazon SQS (Compte B)

Dans Compte B, créez une file d’attente Amazon SQS que la fonction Lambda dans Compte B peut utiliser comme 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
  1. Ouvrez la console Amazon SQS.

  2. Choisissez Créez une file d’attente.

  3. Créez une fille d’attente avec les propriétés suivantes.

    • TypeStandard

    • NomLambda sur la file d’attente de compte

    • Configuration— Conservez les paramètres par défaut.

    • Stratégie d’accès – Choisissez Avancé. Collez dans la stratégie JSON suivante :

      { "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_AllActions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<AccountA_ID>:role/cross-account-lambda-sqs-role" ] }, "Action": "sqs:*", "Resource": "arn:aws:sqs:us-east-1:<AccountB_ID>:LambdaCrossAccountQueue" } ] }

      Cette stratégie accorde au rôle d’exécution Lambda dansCompte Aautorisations pour consommer des messages de cette file d’attente Amazon SQS.

  4. Après avoir créé la file d’attente, enregistrez son Amazon Resource Name (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 (Compte A)

Dans le Compte A, créez un mappage des sources d’événements entre la file d’attente Amazon SQS dans le Compte B et votre fonction Lambda en exécutant la commande create-event-source-mapping AWS CLI suivante.

aws lambda create-event-source-mapping --function-name CrossAccountSQSExample --batch-size 10 \ --event-source-arn arn:aws:sqs:us-east-1:<AccountB_ID>:LambdaCrossAccountQueue

Pour obtenir une liste de vos mappages de source d’événements, exécutez la commande suivante.

aws lambda list-event-source-mappings --function-name CrossAccountSQSExample \ --event-source-arn arn:aws:sqs:us-east-1:<AccountB_ID>:LambdaCrossAccountQueue

Tester la configuration

Maintenant, vous pouvez tester la configuration comme suit :

  1. DansCompte B, ouvrezConsole Amazon SQS.

  2. ChoisissezLambda sur la file d’attente de compte, que vous avez créé précédemment.

  3. Choisissez Send and receive messages (Envoyer et recevoir des messages).

  4. Sous Message body (Corps du message), saisissez un message test.

  5. Choisissez Send Message (Envoyer un message).

Votre fonction Lambda dansCompte Adoit recevoir le message. Lambda continuera d’interroger la file d’attente pour 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. Votre fonction s’exécute et crée des journaux dans Amazon CloudWatch. Vous pouvez afficher les journaux dans la console CloudWatch.

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.

DansCompte A, nettoyez votre rôle d’exécution et votre fonction Lambda.

Pour supprimer le rôle d’exécution
  1. Ouvrez la page Roles (Rôles) de la console IAM.

  2. Sélectionnez le rôle d’exécution que vous avez créé.

  3. Sélectionnez Delete (Supprimer).

  4. Saisissez le nom du rôle dans le champ de saisie de texte et choisissez Delete (Supprimer).

Pour supprimer la fonction Lambda
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Sélectionnez la fonction que vous avez créée.

  3. Sélectionnez Actions, Supprimer.

  4. Saisissez delete dans la zone de saisie de texte et choisissez Delete (Supprimer).

DansCompte B, nettoyez la file d’attente Amazon SQS.

Pour supprimer la file d’attente Amazon SQS
  1. Connectez-vous à l’AWS Management Console et ouvrez la console Amazon SQS à l’adresse https://console.aws.amazon.com/sqs/.

  2. Sélectionnez la file d’attente que vous avez créée.

  3. Choisissez Supprimer.

  4. Saisissez confirm dans le champ de saisie de texte.

  5. Sélectionnez Supprimer.