

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
<a name="with-sqs-cross-account-example"></a>

Dans ce didacticiel, vous allez créer une fonction Lambda qui consomme les messages d'une file d'attente Amazon Simple Queue Service (Amazon SQS) d'un autre compte. AWS Ce didacticiel implique deux AWS comptes : le **compte A** fait référence au compte qui contient votre fonction Lambda, et le **compte B** fait référence au compte qui contient la file d'attente Amazon SQS.

## Conditions préalables
<a name="with-sqs-cross-account-prepare"></a>

### Installez le AWS Command Line Interface
<a name="install_aws_cli"></a>

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'](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)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](https://docs.microsoft.com/en-us/windows/wsl/install-win10) afin d’obtenir une version intégrée à Windows d’Ubuntu et Bash. 

## Création du rôle d’exécution (compte A)
<a name="with-sqs-cross-account-create-execution-role"></a>

Dans le **compte A**, créez un [rôle d'exécution](lambda-intro-execution-role.md) qui autorise votre fonction à accéder aux AWS ressources requises.

**Pour créer un rôle d’exécution**

1. Ouvrez la [page Rôles](https://console.aws.amazon.com/iam/home#/roles) dans la console Gestion des identités et des accès AWS (IAM).

1. Choisissez **Create role** (Créer un rôle).

1. Créez un rôle avec les propriétés suivantes :
   + **Trusted entity** (Entité de confiance) – **AWS Lambda**.
   + **Permissions (Autorisations** – **AWSLambdaSQSQueueExecutionRole**
   + **Nom de rôle** – **cross-account-lambda-sqs-role**

La **AWSLambdaSQSQueueExecutionRole**politique dispose des autorisations dont la fonction a besoin pour lire des éléments depuis Amazon SQS et pour écrire des journaux dans Amazon CloudWatch Logs.

## Créer la fonction (compte A)
<a name="with-sqs-cross-account-create-function"></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 suivant écrit chaque message dans CloudWatch un journal de connexion.

**Example 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 Node.js. 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`.

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

   ```
   zip function.zip index.mjs
   ```

1. Créez la fonction à l'aide de la commande `create-function` AWS Command Line Interface (AWS CLI). Remplacez `arn:aws:iam::111122223333:role/cross-account-lambda-sqs-role` par l’ARN du rôle d’exécution que vous avez créé auparavant.

   ```
   aws lambda create-function --function-name CrossAccountSQSExample \
   --zip-file fileb://function.zip --handler index.handler --runtime nodejs24.x \
   --role {{arn:aws:iam::111122223333:role/cross-account-lambda-sqs-role}}
   ```

## Testez la fonction (compte A)
<a name="with-sqs-cross-account-create-test-function"></a>

Dans le **compte A**, testez votre fonction Lambda manuellement à l'aide de la `invoke` AWS CLI commande 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.

1. Exécutez la commande suivante `invoke` AWS CLI .

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

   L'**cli-binary-format**option est obligatoire si vous utilisez AWS CLI la 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 AWS CLI prises en charge](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) dans le *Guide de l’utilisateur AWS Command Line Interface version 2*.

1. Vérifiez la sortie dans le fichier `outputfile.txt`.

## Créer une file d’attente Amazon SQS (Compte B)
<a name="with-sqs-cross-account-configure-sqs"></a>

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](https://console.aws.amazon.com/sqs).

1. Choisissez **Créez une file d’attente**.

1. Créez une fille d’attente avec les propriétés suivantes.
   + **Type**–**Standard**
   + **Nom** – **LambdaCrossAccountQueue**
   + **Configuration**— Conservez les paramètres par défaut.
   + **Stratégie d’accès** – Choisissez **Avancé**. Collez dans la stratégie JSON suivante. Remplacez les valeurs suivantes :
     + `111122223333`: Compte AWS ID du **compte A**
     + `444455556666`: Compte AWS ID du **compte B**

------
#### [ JSON ]

****  

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

------

     Cette stratégie accorde au rôle d’exécution Lambda dans**Compte A**autorisations pour consommer des messages de cette file d’attente Amazon SQS.

1. 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)
<a name="with-sqs-cross-account-event-source"></a>

Dans le **compte A**, créez un mappage de source d'événement entre la file d'attente Amazon SQS du **compte B** et votre fonction Lambda en exécutant la commande suivante. `create-event-source-mapping` AWS CLI Remplacez `arn:aws:sqs:us-east-1:444455556666:LambdaCrossAccountQueue` par l’ARN de la file d’attente Amazon SQS que vous avez créée à l’étape précédente.

```
aws lambda create-event-source-mapping --function-name CrossAccountSQSExample --batch-size 10 \
--event-source-arn arn:aws:sqs:us-east-1:{{444455556666}}: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:{{444455556666}}:LambdaCrossAccountQueue
```

## Tester la configuration
<a name="with-sqs-final-integration-test-no-iam"></a>

Maintenant, vous pouvez tester la configuration comme suit :

1. Dans**Compte B**, ouvrez[Console Amazon SQS](https://console.aws.amazon.com/sqs).

1. Choisissez **LambdaCrossAccountQueue**celui que vous avez créé précédemment.

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

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

1. Choisissez **Send Message (Envoyer un message)**.

Votre fonction Lambda dans**Compte A**doit 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 sur Amazon CloudWatch. Vous pouvez afficher les journaux dans la [console CloudWatch ](https://console.aws.amazon.com/cloudwatch).

## Nettoyage de vos ressources
<a name="cleanup"></a>

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**Compte 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)](https://console.aws.amazon.com/iam/home#/roles) de la console IAM.

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

1. Sélectionnez **Delete (Supprimer)**.

1. 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)](https://console.aws.amazon.com/lambda/home#/functions) de la console Lambda.

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

1. Sélectionnez **Actions**, **Supprimer**.

1. Saisissez **confirm** dans la zone de saisie de texte et choisissez **Delete** (Supprimer).

Dans**Compte B**, nettoyez la file d’attente Amazon SQS.

**Pour supprimer la file d’attente Amazon SQS**

1. Connectez-vous à la console Amazon SQS AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

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

1. Sélectionnez **Delete (Supprimer)**.

1. Saisissez **confirm** dans le champ de saisie de texte.

1. Sélectionnez **Supprimer**.