

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 : Déployer un service Amazon ECS avec un test de validation
<a name="tutorial-ecs-deployment-with-hooks"></a>

 Dans ce didacticiel, vous apprendrez à utiliser une fonction Lambda pour valider une partie du déploiement d'une application Amazon ECS mise à jour. Ce didacticiel utilise l' CodeDeploy application, CodeDeploy le groupe de déploiement et l'application Amazon ECS que vous avez utilisés[Tutoriel : Déployer une application dans Amazon ECS](tutorial-ecs-deployment.md). Suivez ce didacticiel avant de commencer celui-ci.

 Pour ajouter un test de validation, vous devez d'abord implémenter le test dans une fonction Lambda. Ensuite, dans votre AppSpec fichier de déploiement, vous spécifiez la fonction Lambda pour le hook du cycle de vie que vous souhaitez tester. Si un test de validation échoue, le déploiement s'arrête, est annulé et marqué comme ayant échoué. Si le test réussit, le déploiement se poursuit jusqu'au prochain hook ou événement de cycle de vie de déploiement. 

 Lors d'un déploiement Amazon ECS avec tests de validation, CodeDeploy utilise un équilibreur de charge configuré avec deux groupes cibles : un écouteur de trafic de production et un écouteur de trafic de test. Le schéma suivant montre comment l'équilibreur de charge, les écouteurs de production et de test, les groupes cibles et votre application Amazon ECS sont liés avant le début du déploiement. Ce didacticiel utilise un équilibreur de charge Application Load Balancer. Vous pouvez également utiliser un Network Load Balancer. 

![\[Les connexions entre l'Application Load Balancer ou le Network Load Balancer, les écouteurs, les groupes cibles, l'ensemble de tâches et le service Amazon ECS.\]](http://docs.aws.amazon.com/fr_fr/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-1.png)


 Lors d'un déploiement d'Amazon ECS, il existe cinq points de cycle de vie à tester. Ce didacticiel implémente un test au cours du troisième hook de déploiement du cycle de vie, `AfterAllowTestTraffic`. Pour de plus amples informations, veuillez consulter [Liste des hooks d'événements liés au cycle de vie pour un déploiement d'Amazon ECS](reference-appspec-file-structure-hooks.md#reference-appspec-file-structure-hooks-list-ecs). Après un déploiement réussi, l'écouteur de trafic de production transmet le trafic à votre nouvel ensemble de tâches de remplacement et l'ensemble de tâches d'origine est résilié. Le schéma suivant montre comment vos ressources sont liées après un déploiement réussi. Pour de plus amples informations, veuillez consulter [Que se passe-t-il lors d'un déploiement d'Amazon ECS](deployment-steps-ecs.md#deployment-steps-what-happens). 

![\[Les connexions entre l'Application Load Balancer ou le Network Load Balancer, les écouteurs, les groupes cibles et l'ensemble de tâches de remplacement après un déploiement.\]](http://docs.aws.amazon.com/fr_fr/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-6.png)


**Note**  
L'exécution de ce didacticiel peut entraîner des frais sur votre AWS compte. Cela inclut les frais éventuels pour CodeDeploy AWS Lambda, et CloudWatch. Pour plus d'informations, consultez les [AWS CodeDeploy sections AWS Lambda Tarification](https://aws.amazon.com/codedeploy/pricing/)[, Tarification](https://aws.amazon.com/lambda/pricing/) et [ CloudWatch Tarification Amazon](https://aws.amazon.com/cloudwatch/pricing/).

**Topics**
+ [Conditions préalables](tutorial-ecs-with-hooks-prereqs.md)
+ [Étape 1 : créer un écouteur de test](tutorial-ecs-with-hooks-create-second-listener.md)
+ [Étape 2 : mettez à jour votre application Amazon ECS](tutorial-ecs-with-hooks-update-the-ecs-application.md)
+ [Étape 3 : Création d'une fonction Lambda Lifecycle Hook](tutorial-ecs-with-hooks-create-hooks.md)
+ [Étape 4 : mettez à jour votre AppSpec fichier](tutorial-ecs-with-hooks-create-appspec-file.md)
+ [Étape 5 : utiliser la CodeDeploy console pour déployer votre service Amazon ECS](tutorial-ecs-with-hooks-deployment.md)
+ [Étape 6 : Afficher la sortie de votre fonction Lambda hook dans Logs CloudWatch](tutorial-ecs-with-hooks-view-cw-logs.md)
+ [Étape 7 : nettoyer](tutoria-ecs-with-hooks-clean-up.md)

# Conditions préalables
<a name="tutorial-ecs-with-hooks-prereqs"></a>

Pour réussir ce didacticiel, vous devez d'abord :
+  Respecter les conditions préalables énoncées dans [Conditions préalables](tutorial-ecs-prereqs.md) pour [Tutoriel : Déployer une application dans Amazon ECS](tutorial-ecs-deployment.md). 
+  Suivez les étapes de [Tutoriel : Déployer une application dans Amazon ECS](tutorial-ecs-deployment.md). Prenez en compte les informations suivantes : 
  +  Nom de votre équilibreur de charge. 
  +  Noms de vos groupes cibles. 
  +  Port utilisé par l'écouteur de votre équilibreur de charge. 
  +  ARN de votre équilibreur de charge. Vous l'utilisez pour créer un nouvel écouteur. 
  +  ARN de l'un de vos groupes cibles. Vous l'utilisez pour créer un nouvel écouteur. 
  +  L' CodeDeploy application et le groupe de déploiement que vous créez. 
  +  Le AppSpec fichier que vous créez et qui est utilisé par votre CodeDeploy déploiement. Vous allez modifier ce fichier dans ce didacticiel. 

# Étape 1 : créer un écouteur de test
<a name="tutorial-ecs-with-hooks-create-second-listener"></a>

 Un déploiement Amazon ECS avec des tests de validation nécessite un deuxième écouteur. Cet écouteur est utilisé pour acheminer le trafic de test vers votre application Amazon ECS mise à jour dans le cadre d'un ensemble de tâches de remplacement. Vos tests de validation s'exécutent sur le trafic de test. 

 L'écouteur de votre trafic de test peut utiliser l'un ou l'autre de vos groupes cibles. Utilisez la AWS CLI commande [create-listener](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-listener.html) pour créer un deuxième écouteur avec une règle par défaut qui transmet le trafic de test vers le port 8080. Utilisez l'ARN de votre équilibreur de charge et l'ARN de l'un de vos groupes cibles.

```
aws elbv2 create-listener --load-balancer-arn your-load-balancer-arn \
--protocol HTTP --port 8080 \
--default-actions Type=forward,TargetGroupArn=your-target-group-arn --region your-aws-region
```

# Étape 2 : mettez à jour votre application Amazon ECS
<a name="tutorial-ecs-with-hooks-update-the-ecs-application"></a>

 Dans cette section, vous allez mettre à jour votre application Amazon ECS afin d'utiliser une nouvelle version de sa définition de tâche. Vous créez la nouvelle révision et y ajoutez une mise à jour mineure en ajoutant une balise. 

**Pour mettre à jour votre définition de tâche**

1. Ouvrez la console Amazon ECS Classic à l'adresse [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/).

1.  Dans le panneau de navigation, sélectionnez **Task Definitions** (Définition des tâches). 

1.  Cochez la case correspondant à la définition de tâche utilisée par votre service Amazon ECS.

1.  Choisissez **Créer une révision**. 

1.  Effectuez une petite mise à jour de la définition de tâche en ajoutant une balise. En bas de la page, dans **Balises**, créez une nouvelle balise en entrant une nouvelle paire clé/valeur. 

1.  Choisissez **Créer**. Vous devriez voir que le numéro de révision de votre définition de tâche a été incrémenté de un. 

1.  Choisissez l’onglet **JSON**. Notez la valeur de `taskDefinitionArn`. Son format est `arn:aws:ecs:aws-region: account-id:task-definition/task-definition-family: task-definition-revision`. Il s'agit de l'ARN de votre définition de tâche mise à jour. 

# Étape 3 : Création d'une fonction Lambda Lifecycle Hook
<a name="tutorial-ecs-with-hooks-create-hooks"></a>

Dans cette section, vous implémentez une fonction Lambda pour le hook de votre déploiement Amazon ECS. `AfterAllowTestTraffic` La fonction Lambda exécute un test de validation avant l'installation de l'application Amazon ECS mise à jour. Pour ce didacticiel, la fonction Lambda est renvoyée. `Succeeded` Lors d'un déploiement réel, les tests de validation renvoient `Succeeded` ou `Failed`, en fonction du résultat du test de validation. Lors d'un déploiement réel, vous pouvez également implémenter une fonction de test Lambda pour un ou plusieurs autres hooks d'événements du cycle de vie du déploiement d'Amazon ECS (`BeforeInstall`, `AfterInstall``BeforeAllowTraffic`, et`AfterAllowTraffic`). Pour de plus amples informations, veuillez consulter [Liste des hooks d'événements liés au cycle de vie pour un déploiement d'Amazon ECS](reference-appspec-file-structure-hooks.md#reference-appspec-file-structure-hooks-list-ecs).

 Un rôle IAM est requis pour créer votre fonction Lambda. Le rôle accorde à la fonction Lambda l'autorisation d'écrire dans CloudWatch Logs et de définir l'état d'un hook du CodeDeploy cycle de vie. 

**Pour créer un rôle IAM**

1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Sélectionnez **Rôles** dans le volet de navigation, puis **Créer un rôle**.

1.  Créez un rôle avec les propriétés suivantes : 
   +  **Entité de confiance** : **AWS Lambda**. 
   +  **Autorisations** : **AWSLambdaBasicExecutionRole**. Cela donne à votre fonction Lambda l'autorisation d'écrire dans Logs. CloudWatch 
   +  **Nom de rôle** : **`lambda-cli-hook-role`**. 

   Pour plus d'informations, consultez la section [Création d'un rôle AWS Lambda d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/with-userapp.html#with-userapp-walkthrough-custom-events-create-iam-role). 

1.  Attachez l'autorisation `codedeploy:PutLifecycleEventHookExecutionStatus` au rôle que vous avez créé. Cela donne à vos fonctions Lambda l'autorisation de définir le statut d'un hook de CodeDeploy cycle de vie lors d'un déploiement. Pour plus d'informations, consultez la section [Ajout d'autorisations d'identité IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) dans le Guide de l'*Gestion des identités et des accès AWS utilisateur et [PutLifecycleEventHookExecutionStatus](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_PutLifecycleEventHookExecutionStatus.html)dans le Guide* de *référence des CodeDeploy API*. 

**Pour créer une fonction Lambda de type `AfterAllowTestTraffic` hook**

1.  Créez un fichier nommé `AfterAllowTestTraffic.js` avec les contenus suivants. 

   ```
   'use strict';
    
    const AWS = require('aws-sdk');
    const codedeploy = new AWS.CodeDeploy({apiVersion: '2014-10-06'});
    
    exports.handler = (event, context, callback) => {
    
    	console.log("Entering AfterAllowTestTraffic hook.");
    	
    	// Read the DeploymentId and LifecycleEventHookExecutionId from the event payload
     var deploymentId = event.DeploymentId;
    	var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;
    	var validationTestResult = "Failed";
    	
    	// Perform AfterAllowTestTraffic validation tests here. Set the test result 
    	// to "Succeeded" for this tutorial.
    	console.log("This is where AfterAllowTestTraffic validation tests happen.")
    	validationTestResult = "Succeeded";
    	
    	// Complete the AfterAllowTestTraffic hook by sending CodeDeploy the validation status
    	var params = {
    		deploymentId: deploymentId,
    		lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
    		status: validationTestResult // status can be 'Succeeded' or 'Failed'
    	};
    	
    	// Pass CodeDeploy the prepared validation test results.
    	codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
    		if (err) {
    			// Validation failed.
    			console.log('AfterAllowTestTraffic validation tests failed');
    			console.log(err, err.stack);
    			callback("CodeDeploy Status update failed");
    		} else {
    			// Validation succeeded.
    			console.log("AfterAllowTestTraffic validation tests succeeded");
    			callback(null, "AfterAllowTestTraffic validation tests succeeded");
    		}
    	});
    }
   ```

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

   ```
   zip AfterAllowTestTraffic.zip AfterAllowTestTraffic.js 
   ```

1.  Utilisez la `create-function` commande pour créer une fonction Lambda pour votre `AfterAllowTestTraffic` hook. 

   ```
   aws lambda create-function --function-name AfterAllowTestTraffic \
          --zip-file fileb://AfterAllowTestTraffic.zip \
          --handler AfterAllowTestTraffic.handler \
          --runtime nodejs10.x \
          --role arn:aws:iam::aws-account-id:role/lambda-cli-hook-role
   ```

1.  Notez l'ARN de votre fonction Lambda dans la `create-function` réponse. Vous utilisez cet ARN lorsque vous mettez à jour le AppSpec fichier de votre CodeDeploy déploiement à l'étape suivante. 

# Étape 4 : mettez à jour votre AppSpec fichier
<a name="tutorial-ecs-with-hooks-create-appspec-file"></a>

 Dans cette section, vous mettez à jour votre AppSpec fichier avec une `Hooks` section. Dans `Hooks` cette section, vous spécifiez une fonction Lambda pour le hook du `AfterAllowTestTraffic` cycle de vie. 

**Pour mettre à jour votre AppSpec dossier**

1.  Ouvrez le AppSpec fichier que vous avez créé dans [Étape 2 : Création du AppSpec fichier](tutorial-ecs-create-appspec-file.md) le[Tutoriel : Déployer une application dans Amazon ECS](tutorial-ecs-deployment.md). 

1.  Mettez à jour la propriété `TaskDefinition` avec l'ARN de définition de tâche que vous avez noté dans [Étape 2 : mettez à jour votre application Amazon ECS](tutorial-ecs-with-hooks-update-the-ecs-application.md). 

1. Copiez et collez la `Hooks` section dans votre AppSpec fichier. Mettez ensuite à jour l'ARN `AfterAllowTestTraffic` avec l'ARN de la fonction Lambda que vous avez noté dans. [Étape 3 : Création d'une fonction Lambda Lifecycle Hook](tutorial-ecs-with-hooks-create-hooks.md) 

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

   ```
   {
     "version": 0.0,
     "Resources": [
       {
         "TargetService": {
           "Type": "AWS::ECS::Service",
           "Properties": {
             "TaskDefinition": "arn:aws:ecs:aws-region-id:aws-account-id::task-definition/ecs-demo-task-definition:revision-number",
             "LoadBalancerInfo": {
               "ContainerName": "sample-website",
               "ContainerPort": 80
             }
           }
         }
       }
     ],
     "Hooks": [
       {
         "AfterAllowTestTraffic": "arn:aws:lambda:aws-region-id:aws-account-id:function:AfterAllowTestTraffic"
       }
     ]
   }
   ```

------
#### [ YAML AppSpec ]

   ```
   version: 0.0
   Resources:
     - TargetService:
         Type: AWS::ECS::Service
         Properties:
           TaskDefinition: "arn:aws:ecs:aws-region-id:aws-account-id::task-definition/ecs-demo-task-definition:revision-number"
           LoadBalancerInfo:
             ContainerName: "sample-website"
             ContainerPort: 80
   Hooks:
     - AfterAllowTestTraffic: "arn:aws:lambda:aws-region-id:aws-account-id:function:AfterAllowTestTraffic"
   ```

------

1.  Enregistrez votre AppSpec fichier et chargez-le dans son compartiment S3. 

# Étape 5 : utiliser la CodeDeploy console pour déployer votre service Amazon ECS
<a name="tutorial-ecs-with-hooks-deployment"></a>

 Dans cette section, vous mettez à jour votre groupe de déploiement en spécifiant le port de votre écouteur de test. Il s'agit de l'écouteur que vous avez créé dans [Étape 1 : créer un écouteur de test](tutorial-ecs-with-hooks-create-second-listener.md). Pendant le déploiement, CodeDeploy exécute votre test de validation au cours du hook de cycle de vie de déploiement `AfterAllowTestTraffic` en utilisant le trafic de test transmis à votre ensemble de tâches de remplacement à l'aide de l'écouteur de test. Comme votre test de validation renvoie le résultat `Succeeded`, le déploiement se poursuit avec l'événement de cycle de vie de déploiement suivant. Dans un scénario réel, votre fonction de test renvoie `Succeeded` ou `Failed`. 

**Pour ajouter un écouteur de test à votre groupe de déploiement**

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

1. Dans le volet de navigation, choisissez **Applications**. 

1. Choisissez l'application que vous avez créée dans [Tutoriel : Déployer une application dans Amazon ECS](tutorial-ecs-deployment.md). Si vous avez utilisé le nom suggéré, il s'agit de **ecs-demo-codedeploy-app**.

1. Dans **Groupes de déploiement**, choisissez le groupe de déploiement que vous avez créé dans [Tutoriel : Déployer une application dans Amazon ECS](tutorial-ecs-deployment.md). Si vous avez utilisé le nom suggéré, il s'agit de **ecs-demo-dg**.

1.  Choisissez **Modifier**. 

1. Dans **Port d'écoute de test**, choisissez le port et le protocole de l'écouteur de test que vous avez créé précédemment dans ce didacticiel. Il doit s'agir de **HTTP : 8080**. 

1.  Sélectionnez **Enregistrer les modifications**. 

**Pour déployer votre application Amazon ECS**

1. Sur la page de la console de votre groupe de déploiement, choisissez **Créer un déploiement**.

1.  Pour **le groupe de déploiement**, choisissez **ecs-demo-dg**. 

1.  Pour **Type de révision**, choisissez **Mon application est stockée dans Amazon S3**. Dans **Emplacement de la révision**, entrez le nom de votre compartiment et de votre AppSpec fichier S3 (par exemple,**s3://my-s3-bucket/appspec.json**). 

1.  Pour **Type de fichier de révision**, choisissez **.json** ou **.yaml** selon le cas. 

1.  (Facultatif) Dans la zone **Description du déploiement**, entrez une description de votre déploiement. 

1. Choisissez **Créer un déploiement**.

 Vous pouvez surveiller votre déploiement dans **Deployment status (Statut du déploiement)**. Une fois que 100 % du trafic de production est acheminé vers l'ensemble de tâches de remplacement, vous pouvez choisir **Terminer le jeu de tâches d'origine** pour mettre fin immédiatement à l'ensemble de tâches d'origine. Si vous ne choisissez pas **Terminate original task set (Résilier l'ensemble de tâches d'origine)**, l'ensemble de tâches d'origine est résilié après la durée que vous avez spécifiée lorsque vous avez créé votre groupe de déploiement. 

![\[La section sur l'état du déploiement de la CodeDeploy console.\]](http://docs.aws.amazon.com/fr_fr/codedeploy/latest/userguide/images/ecs-tutorial-deployment-status-with-test-listener.png)


# Étape 6 : Afficher la sortie de votre fonction Lambda hook dans Logs CloudWatch
<a name="tutorial-ecs-with-hooks-view-cw-logs"></a>

 Si votre CodeDeploy déploiement est réussi, les tests de validation de vos fonctions de hook Lambda sont également réussis. Vous pouvez le confirmer en consultant le journal de la fonction hook dans CloudWatch Logs. 

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

1.  Dans le volet de navigation, choisissez **Logs (Journaux)**. Vous devriez voir un nouveau groupe de journaux pour la fonction de crochet Lambda que vous avez spécifiée dans votre AppSpec fichier.   
![\[Le nouveau groupe de journaux dans la CloudWatch console.\]](http://docs.aws.amazon.com/fr_fr/codedeploy/latest/userguide/images/ecs-demo-cw-logs.png)

1.  Choisissez le nouveau groupe de journaux. Cela devrait être**/aws/lambda/AfterAllowTestTrafficHook**. 

1.  Choisissez le flux de journaux. Si vous voyez plusieurs flux de journaux, choisissez celui dont la date et l'heure sont les plus récentes sous **Heure du dernier événement**. 

1.  Développez les événements du flux du journal pour confirmer que votre fonction Lambda Hook a écrit des messages de réussite dans le journal. Ce qui suit montre que la fonction de crochet `AfterAllowTraffic` Lambda a réussi.   
![\[Les événements du journal indiquant le AfterAllowTraffic hook.\]](http://docs.aws.amazon.com/fr_fr/codedeploy/latest/userguide/images/ecs-demo-cw-log-events.png)

# Étape 7 : nettoyer
<a name="tutoria-ecs-with-hooks-clean-up"></a>

 Lorsque vous avez terminé ce didacticiel, nettoyez les ressources qui lui sont associées afin d'éviter la facturation de frais pour des ressources que vous n'utilisez pas. Les noms des ressources utilisés dans cette étape sont ceux proposés dans ce didacticiel (par exemple, **ecs-demo-codedeploy-app** pour le nom de votre CodeDeploy application). Si vous avez utilisé d'autres noms, veillez à les utiliser lors du nettoyage. 

**Pour nettoyer les ressources du didacticiel**

1. Utilisez la [delete-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-deployment-group.html)commande pour supprimer le groupe CodeDeploy de déploiement.

   ```
   aws deploy delete-deployment-group --application-name ecs-demo-deployment-group --deployment-group-name ecs-demo-dg --region aws-region-id
   ```

1. Utilisez la commande [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) pour supprimer l' CodeDeploy application.

   ```
   aws deploy delete-application --application-name ecs-demo-deployment-group --region aws-region-id
   ```

1. Utilisez la commande [delete-function](https://docs.aws.amazon.com/cli/latest/reference/lambda/delete-function.html) pour supprimer votre fonction de crochet Lambda.

   ```
   aws lambda delete-function --function-name AfterAllowTestTraffic
   ```

1. Utilisez la [delete-log-group](https://docs.aws.amazon.com/cli/latest/reference/logs/delete-log-group.html)commande pour supprimer votre groupe de CloudWatch journaux.

   ```
   aws logs delete-log-group --log-group-name /aws/lambda/AfterAllowTestTraffic
   ```