

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 de variables avec des actions d'appel Lambda
<a name="tutorials-lambda-variables"></a>

Une action d'appel Lambda peut utiliser les variables d'une autre action dans le cadre de son entrée et renvoyer de nouvelles variables avec sa sortie. Pour plus d'informations sur les variables pour les actions dans CodePipeline, voir[Référence aux variables](reference-variables.md).

**Important**  
Dans le cadre de la création d'un pipeline, un compartiment d'artefacts S3 fourni par le client sera utilisé CodePipeline pour les artefacts. (Ceci est différent du compartiment utilisé pour une action source S3.) Si le compartiment d'artefacts S3 se trouve dans un compte différent de celui de votre pipeline, assurez-vous que le compartiment d'artefacts S3 appartient à cette personne sûre et Comptes AWS qu'elle sera fiable.

À la fin de ce tutoriel, vous aurez :
+ Une action d'appel Lambda qui :
  + Consomme la `CommitId` variable d'une action CodeCommit source
  + Émet trois nouvelles variables : `dateTime`, `testRunId` et `region`
+ Une action d'approbation manuelle qui utilise les nouvelles variables de votre action d'appel Lambda pour fournir une URL de test et un ID d'exécution de test
+ Pipeline mis à jour avec les nouvelles actions

**Topics**
+ [

## Conditions préalables
](#lambda-variables-prereqs)
+ [

## Étape 1 : créer une fonction Lambda
](#lambda-variables-function)
+ [

## Étape 2 : ajouter une action d'appel Lambda et une action d'approbation manuelle à votre pipeline
](#lambda-variables-pipeline)

## Conditions préalables
<a name="lambda-variables-prereqs"></a>

Avant de commencer, les prérequis suivants doivent être remplis : 
+ Vous pouvez créer ou utiliser le pipeline avec la CodeCommit source dedans[Tutoriel : Création d'un pipeline simple (CodeCommit référentiel)](tutorials-simple-codecommit.md).
+ Modifiez votre pipeline existant afin que l'action CodeCommit source possède un espace de noms. Affectez l'espace de noms `SourceVariables` à l'action.

## Étape 1 : créer une fonction Lambda
<a name="lambda-variables-function"></a>

Procédez comme suit pour créer une fonction Lambda et un rôle d'exécution Lambda. Vous ajoutez l'action Lambda à votre pipeline après avoir créé la fonction Lambda.

**Pour créer une fonction Lambda et un rôle d'exécution**

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

1. Choisissez **Créer une fonction**. Laissez l'option **Créer à partir de zéro** sélectionnée.

1. Dans **Nom de la fonction**, entrez le nom de votre fonction, par exemple **myInvokeFunction**. Dans **Runtime**, laissez l'option par défaut sélectionnée.

1. Développez **Choose or create an execution role (Choisir ou créer un rôle d'exécution)**. Choisissez **Create a new role with basic Lambda permissions (Créer un rôle avec les autorisations Lambda standard)**.

1. Choisissez **Créer une fonction**.

1. Pour utiliser une variable d'une autre action, elle devra être passée à `UserParameters` dans la configuration de l'action d'appel (Invoke) Lambda. Vous allez configurer l'action dans notre pipeline plus tard dans le didacticiel, mais vous ajouterez le code en supposant que la variable est transmise.

   Pour créer de nouvelles variables, définissez une propriété appelée `outputVariables` sur l'entrée avec la valeur `putJobSuccessResult`. Notez que vous ne pouvez pas produire de variables dans le cadre d'un fichier `putJobFailureResult`.

   ```
    const putJobSuccess = async (message) => {
           const params = {
               jobId: jobId,
               outputVariables: {
                   testRunId: Math.floor(Math.random() * 1000).toString(),
                   dateTime: Date(Date.now()).toString(),
                   region: lambdaRegion
               }
           };
   ```

   Dans votre nouvelle fonction, dans l'onglet **Code**, collez l'exemple de code ci-dessous`index.mjs`.

   ```
   import { CodePipeline } from '@aws-sdk/client-codepipeline';
   
   export const handler = async (event, context) => {
       const codepipeline = new CodePipeline({});
       
       // Retrieve the Job ID from the Lambda action
       const jobId = event["CodePipeline.job"].id;
       
       // Retrieve UserParameters
       const params = event["CodePipeline.job"].data.actionConfiguration.configuration.UserParameters;
       
       // The region from where the lambda function is being executed
       const lambdaRegion = process.env.AWS_REGION;
       
       // Notify CodePipeline of a successful job
       const putJobSuccess = async (message) => {
           const params = {
               jobId: jobId,
               outputVariables: {
                   testRunId: Math.floor(Math.random() * 1000).toString(),
                   dateTime: Date(Date.now()).toString(),
                   region: lambdaRegion
               }
           };
           
           try {
               await codepipeline.putJobSuccessResult(params);
               return message;
           } catch (err) {
               throw err;
           }
       };
       
       // Notify CodePipeline of a failed job
       const putJobFailure = async (message) => {
           const params = {
               jobId: jobId,
               failureDetails: {
                   message: JSON.stringify(message),
                   type: 'JobFailed',
                   externalExecutionId: context.invokeid
               }
           };
           
           try {
               await codepipeline.putJobFailureResult(params);
               throw message;
           } catch (err) {
               throw err;
           }
       };
       
       try {
           console.log("Testing commit - " + params);
           
           // Your tests here
           
           // Succeed the job
           return await putJobSuccess("Tests passed.");
       } catch (ex) {
           // If any of the assertions failed then fail the job
           return await putJobFailure(ex);
       }
   };
   ```

1. Autorisez la fonction à enregistrer automatiquement.

1. Copiez le nom de ressource Amazon (ARN) contenu dans le champ **Function ARN** en haut de l'écran.

1. Enfin, ouvrez la console Gestion des identités et des accès AWS (IAM) à [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)l'adresse. Modifiez le rôle d'exécution Lambda pour ajouter la politique suivante :. [AWSCodePipelineCustomActionAccess](https://console.aws.amazon.com/iam/home?region=us-west-2#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCodePipelineCustomActionAccess) Pour connaître les étapes à suivre pour créer un rôle d'exécution Lambda ou modifier la stratégie de rôle, veuillez consulter [Étape 2 : Création de la fonction Lambda](actions-invoke-lambda-function.md#actions-invoke-lambda-function-create-function). 

## Étape 2 : ajouter une action d'appel Lambda et une action d'approbation manuelle à votre pipeline
<a name="lambda-variables-pipeline"></a>

Au cours de cette étape, vous ajoutez une action d'appel Lambda à votre pipeline. Vous ajoutez l'action dans le cadre d'une étape nommée **Test**. Le type d'action est une action d'appel. Vous ajoutez ensuite une action d'approbation manuelle après l'action d'appel.

**Pour ajouter une action Lambda et une action d'approbation manuelle au pipeline**

1. Ouvrez la CodePipeline console à l'adresse [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/).

   Les noms de tous les pipelines associés à votre AWS compte sont affichés. Choisissez le pipeline dans lequel vous souhaitez ajouter l'action.

1. Ajoutez l'action de test Lambda à votre pipeline.

   1. Pour modifier votre pipeline, choisissez **Modifier**. Ajoutez une étape après l'action source dans le pipeline existant. Entrez un nom pour l'étape, par exemple **Test**.

   1. Dans la nouvelle étape, choisissez **Ajouter un groupe d'actions** pour ajouter une action. Dans **Nom de l'action**, entrez le nom de l'action d'appel, par exemple **Test\$1Commit**.

   1. Dans **Action provider**, sélectionnez **AWS Lambda**.

   1. Dans **Artefacts d'entrée**, choisissez le nom de l'artefact de sortie de votre action source, tel que `SourceArtifact`.

   1. Dans **FunctionName**, ajoutez l'ARN de la fonction Lambda que vous avez créée.

   1. Dans **Variable namespace (Espace de noms de variables)**, ajoutez le nom de l'espace de noms, par exemple **TestVariables**.

   1. Dans **Artefacts de sortie**, ajoutez le nom de l'artefact de sortie, tel que**LambdaArtifact**.

   1. Sélectionnez **Exécuté**.

1. Ajoutez l'action d'approbation manuelle à votre pipeline.

   1. Votre pipeline étant toujours en mode d'édition, ajoutez une étape après l'action d'appel. Entrez un nom pour l'étape, par exemple **Approval**.

   1. Dans cette nouvelle étape, choisissez l'icône pour ajouter une action. Dans **Nom de l'action**, entrez le nom de l'action d'approbation, par exemple **Change\$1Approval**.

   1. Dans **Fournisseur d'action**, choisissez **Approbation manuelle**.

   1. Dans **URL pour la révision**, élaborez l'URL en ajoutant la syntaxe de variable pour la variable `region` et la variable `CommitId`. Veillez à utiliser les espaces de noms affectés aux actions qui fournissent les variables de sortie. 

      Dans cet exemple, l'URL contenant la syntaxe variable d'une CodeCommit action possède l'espace de noms `SourceVariables` par défaut. La variable de sortie de région Lambda a l'espace de noms `TestVariables`. L'URL se présente comme suit.

      ```
      https://#{TestVariables.region}.console.aws.amazon.com/codesuite/codecommit/repositories/MyDemoRepo/commit/#{SourceVariables.CommitId}
      ```

      Dans **Commentaires**, élaborez le texte du message d'approbation en ajoutant la syntaxe de variable pour la variable `testRunId`. Pour cet exemple, l'URL avec la syntaxe de variable pour la variable de sortie `testRunId` Lambda a l'espace de noms `TestVariables`. Entrez le message suivant.

      ```
      Make sure to review the code before approving this action. Test Run ID: #{TestVariables.testRunId}
      ```

1. Choisissez **Effectué** pour fermer l'écran d'édition de l'action, puis choisissez **Effectué** pour fermer l'écran d'édition de l'étape. Pour enregistrer le pipeline, choisissez **Effectué**. Le pipeline terminé contient désormais une structure avec les étapes source, de test, d'approbation et de déploiement.

   Choisissez **Publier une modification** pour exécuter la dernière modification via la structure du pipeline.

1. Lorsque le pipeline atteint l'étape d'approbation manuelle, choisissez **Vérification**. Les variables résolues apparaissent comme l'URL de l'ID de validation. Votre approbateur peut choisir cette URL pour afficher la validation.

1. Une fois le pipeline exécuté avec succès, vous pouvez également afficher les valeurs des variables sur la page de l'historique d'exécution des actions.