

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.

# Création d'un blue/green déploiement Amazon ECS
<a name="deploy-blue-green-service"></a>

 En utilisant les blue/green déploiements Amazon ECS, vous pouvez apporter et tester des modifications de service avant de les implémenter dans un environnement de production. 

## Conditions préalables
<a name="deploy-blue-green-service-prerequisites"></a>

Effectuez les opérations suivantes avant de démarrer un blue/green déploiement. 

1. Configurez les autorisations appropriées.
   + Pour plus d’informations sur les autorisations Elastic Load Balancing, consultez la section [Rôle IAM d’infrastructure Amazon ECS pour les équilibreurs de charge](AmazonECSInfrastructureRolePolicyForLoadBalancers.md).
   + Pour plus d’informations sur les autorisations Lambda, consultez la section[Autorisations requises pour les fonctions Lambda dans les déploiements Amazon ECS blue/green](blue-green-permissions.md).

1. Les blue/green déploiements Amazon ECS nécessitent que votre service utilise l'une des fonctionnalités suivantes : Configurez les ressources appropriées.
   + Application Load Balancer : pour plus d’informations, consultez la section [Ressources d'Application Load Balancer pour les déploiements bleu/vert, linéaires et Canary](alb-resources-for-blue-green.md).
   + Network Load Balancer : pour plus d’informations, consultez la section [Ressources Network Load Balancer pour les déploiements Amazon ECS bleu/vert, linéaire et Canary](nlb-resources-for-blue-green.md).
   + Service Connect : pour plus d’informations, consultez la section [Ressources Service Connect pour les déploiements Amazon ECS bleu/vert, linéaire et Canary](service-connect-blue-green.md).

1. Décidez si vous souhaitez exécuter des fonctions Lambda pendant les étapes du cycle de vie.
   + PRE\$1SCALE\$1UP
   + POST\$1SCALE\$1UP
   + TEST\$1TRAFFIC\$1SHIFT
   + POST\$1TEST\$1TRAFFIC\$1SHIFT
   + PRODUCTION\$1TRAFFIC\$1SHIFT
   + POST\$1PRODUCTION\$1TRAFFIC\$1SHIFT

   Pour plus d’informations sur l’utilisation de Lambda, consultez la section [Créer une fonction Lambda avec la console](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#getting-started-create-function) dans le *Guide du développeur AWS Lambda *.

## Procédure
<a name="deploy-blue-green-service-procedure"></a>

Vous pouvez utiliser la console ou le AWS CLI pour créer un blue/green service Amazon ECS.

------
#### [ Console ]

1. Ouvrez la console à la [https://console.aws.amazon.com/ecs/version 2](https://console.aws.amazon.com/ecs/v2).

1. Déterminez la ressource à partir de laquelle vous lancez le service.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonECS/latest/developerguide/deploy-blue-green-service.html)

   La page **Créer un service** s’affiche.

1. Sous **Détails du service**, procédez comme suit :

   1. Pour **Famille de définition de tâche**, choisissez la définition de tâche à utiliser. Ensuite, pour **Révision de définition de tâche**, saisissez la révision à utiliser.

   1. Pour **Service name** (Nom du service), saisissez un nom pour votre service.

1. Pour exécuter le service dans un cluster existant, pour **Cluster existant**, sélectionnez le cluster. Pour exécuter le service dans un nouveau cluster, choisissez **Créer un cluster** 

1. Choisissez comment vos tâches sont distribuées dans votre infrastructure de cluster. Sous **Configuration de calcul**, choisissez votre option.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonECS/latest/developerguide/deploy-blue-green-service.html)

1. Sous **Configuration du déploiement**, procédez comme suit :

   1. Pour **Type de service**, choisissez **Replica**.

   1. Pour **Desired tasks** (Tâches souhaitées), saisissez le nombre de tâches à lancer et à conserver dans le service.

   1. Pour qu’Amazon ECS surveille la répartition des tâches entre les zones de disponibilité et les redistribue en cas de déséquilibre, sous **Rééquilibrage des services entre zones de disponibilité**, sélectionnez **Rééquilibrage des services entre zones de disponibilité**.

   1. Pour **Période de grâce pour la surveillance de l’état**, saisissez la durée (en secondes) pendant laquelle le planificateur de service ignore les surveillances de l’état de Elastic Load Balancing, VPC Lattice et des conteneurs qui ne sont pas saines après le démarrage initial d’une tâche. Si vous ne spécifiez aucune valeur pour la période de grâce de surveillance de l’état, la valeur par défaut 0 est utilisée.

1. 

   1. Pour **Durée de l’intégration**, saisissez le nombre de minutes pendant lesquelles les révisions de service bleues et vertes seront exécutées simultanément avant que la révision bleue ne soit résiliée. Cela laisse le temps de procéder à des vérifications et à des tests.

   1. (Facultatif) Exécutez des fonctions Lambda à des étapes spécifiques du déploiement. Sous **Hooks de cycle de vie du déploiement**, sélectionnez les étapes dans lesquelles exécuter les hooks de cycle de vie.

      Pour ajouter un hook de cycle de vie

      1. Choisissez **Ajouter**.

      1. Pour **Fonction Lambda**, saisissez le nom ou l’ARN de la fonction.

      1. Pour **Rôle**, sélectionnez le rôle IAM qui dispose de l’autorisation requise pour invoquer la fonction Lambda.

      1. Pour **Étapes du cycle de vie**, sélectionnez les étapes dans lesquelles la fonction Lambda doit être exécutée.

1. Pour configurer la manière dont Amazon ECS détecte et gère les échecs de déploiement, développez **Deployment failure detection** (Détection des échecs de déploiement), puis choisissez vos options. 

   1. Pour arrêter un déploiement lorsque les tâches ne peuvent pas démarrer, sélectionnez **Use the Amazon ECS deployment circuit breaker** (Utiliser le disjoncteur de déploiement Amazon ECS).

      Pour que le logiciel restaure automatiquement le dernier état de déploiement terminé lorsque le disjoncteur de déploiement définit le déploiement comme ayant échoué, sélectionnez **Restauration en cas d’échec**.

   1. Pour arrêter un déploiement en fonction des métriques de l'application, sélectionnez **Utiliser une ou plusieurs CloudWatch alarmes**. Ensuite, à partir du **nom de l'CloudWatch alarme**, choisissez les alarmes. Pour créer une nouvelle alarme, rendez-vous sur la CloudWatch console.

      Pour que le logiciel annule automatiquement le déploiement au dernier état de déploiement terminé lorsqu'une CloudWatch alarme indique que le déploiement a échoué, sélectionnez Annuler en **cas d'échec**.

1. (Facultatif) Pour interconnecter votre service à l’aide de Service Connect, développez **Service Connect**, puis spécifiez les éléments suivants :

   1.  Sélectionnez **Activer Service Connect**.

   1. Sous **Service Connect configuration** (Configuration de Service Connect), spécifiez le mode client.
      + Si votre service exécute une application client réseau qui doit uniquement se connecter à d’autres services de l’espace de noms, sélectionnez **Côté client uniquement**.
      + Si votre service exécute une application réseau ou un service Web et doit fournir des points de terminaison pour ce service, et se connecte à d'autres services dans l'espace de noms, choisissez **Client and server** (Client et serveur).

   1. Pour utiliser un espace de noms qui n'est pas l'espace de noms de cluster par défaut, dans **Namespace** (Espace de noms), choisissez l'espace de noms du service. Il peut s'agir d'un espace de noms créé séparément dans le même espace Région AWS dans votre région Compte AWS ou d'un espace de noms dans la même région qui est partagé avec votre compte en utilisant AWS Resource Access Manager ()AWS RAM. *Pour plus d'informations sur les AWS Cloud Map espaces de noms partagés, consultez la section [Partage d'espaces de AWS Cloud Map noms entre comptes](https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html) dans le Guide du AWS Cloud Map développeur.*

   1. (Facultatif) Configurez les règles d'en-tête du trafic de test pour les blue/green déploiements. Sous **Routage du trafic de test**, spécifiez les éléments suivants :

      1. Sélectionnez **Activer les règles d’en-tête du trafic de test** pour acheminer des requêtes spécifiques vers la révision de service verte pendant les tests.

      1. Pour **Règles de correspondance des en-têtes**, configurez les critères de routage du trafic de test suivants :
         + **Nom de l’en-tête** : saisissez le nom de l’en-tête HTTP correspondant (par exemple, `X-Test-Version` ou `User-Agent`).
         + **Type de correspondance** : choisissez les critères de correspondance :
           + **Correspondance exacte** : acheminer les requêtes dont la valeur d’en-tête correspond exactement à la valeur spécifiée
           + **En-tête présent** : acheminer les requêtes contenant l’en-tête spécifié, quelle que soit sa valeur
           + **Correspondance de modèle** : acheminer les requêtes dont la valeur d’en-tête correspond à un modèle spécifié
         + **Valeur d’en-tête** (si vous utilisez une correspondance exacte ou une correspondance de modèle) : saisissez la valeur ou le modèle à comparer.

         Vous pouvez ajouter plusieurs règles de correspondance d’en-têtes pour créer une logique de routage complexe. Les requêtes correspondant à l’une des règles configurées seront acheminées vers la version verte du service à des fins de test.

      1. Choisissez **Ajouter une règle d’en-tête** pour configurer des conditions de correspondance d’en-tête supplémentaires.
**Note**  
Les règles d’en-tête du trafic de test vous permettent de valider les nouvelles fonctionnalités avec un trafic contrôlé avant de procéder au déploiement complet. Cela vous permet de tester la révision de service verte avec des requêtes spécifiques (telles que celles provenant d’outils de test internes ou d’utilisateurs bêta) tout en maintenant un flux de trafic normal vers la révision de service bleue.

   1. (Facultatif) Spécifiez une configuration de journal. Sélectionnez **Utiliser la collecte de journaux**. L'option par défaut envoie les journaux du conteneur à CloudWatch Logs. Les autres options du pilote de journal sont configurées à l'aide de AWS FireLens. Pour de plus amples informations, veuillez consulter [Envoyer les journaux Amazon ECS à un AWS service ou AWS Partner](using_firelens.md).

      Voici une description plus détaillée de chaque destination de journal de conteneur.
      + **Amazon CloudWatch** — Configurez la tâche pour envoyer les journaux des conteneurs à CloudWatch Logs. Les options du pilote de journal par défaut sont fournies, ce qui permet de créer un groupe de CloudWatch journaux en votre nom. Pour spécifier un autre nom de groupe de journaux, modifiez les valeurs des options de pilote.
      + **Amazon Data Firehose** : configurez la tâche pour envoyer des journaux de conteneur à Firehose. Les options par défaut du pilote de journalisation sont fournies. Elles envoient les journaux vers un flux de livraison Firehose. Pour spécifier un autre nom de flux de diffusion, modifiez les valeurs des options de pilote.
      + **Amazon Kinesis Data Streams** : configurez la tâche pour envoyer des journaux de conteneur à Kinesis Data Streams. Les options par défaut du pilote de journalisation sont fournies. Elles permettent d’envoyer les journaux vers un flux Kinesis Data Streams. Pour spécifier un autre nom de flux, modifiez les valeurs des options de pilote.
      + **Amazon OpenSearch Service** — Configurez la tâche pour envoyer les journaux des conteneurs vers un domaine OpenSearch de service. Les options de pilote de journal doivent être fournies. 
      + **Simple Storage Service (Amazon S3)** : configurez la tâche pour envoyer des journaux de conteneur à un compartiment Simple Storage Service (Amazon S3). Les options de pilote de journal par défaut sont fournies, mais vous devez spécifier un nom de compartiment Simple Storage Service (Amazon S3) valide.

1. (Facultatif) Configurez l’**équilibrage de charge** pour un déploiement bleu/vert.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonECS/latest/developerguide/deploy-blue-green-service.html)

1. (Facultatif) Pour vous aider à identifier votre service et vos tâches, développez **Tags** (balises), puis configurez vos balises.

   Pour qu'Amazon ECS balise automatiquement toutes les tâches nouvellement lancées avec le nom du cluster et les balises de définition des tâches, sélectionnez **Activer les balises gérées Amazon ECS**, puis pour **Propager des balises à partir de**, choisissez **Définitions de tâches**.

   Pour qu'Amazon ECS balise automatiquement toutes les tâches nouvellement lancées avec le nom du cluster et les balises d'un service, sélectionnez **Activer les balises gérées Amazon ECS**, puis pour **Propager des balises à partir de**, choisissez **Service**.

   Ajoutez ou supprimez une balise.
   + [Ajouter une balise] Choisissez **Add tag** (Ajouter une balise), puis procédez comme suit :
     + Pour **Clé**, saisissez le nom de la clé.
     + Pour **Valeur**, saisissez la valeur de clé.
   + [Supprimer une balise] En regard de la balise, choisissez **Supprimer la balise**.

1. Choisissez **Créer**.

------
#### [ AWS CLI ]

1. Créez un fichier nommé `service-definition.json` avec le contenu suivant.

   Remplacez le *user-input* par vos valeurs.

   ```
   {
     "serviceName": "myBlueGreenService",
     "cluster": "arn:aws:ecs:us-west-2:123456789012:cluster/sample-fargate-cluster",
     "taskDefinition": "sample-fargate:1",
     "desiredCount": 5,
     "launchType": "FARGATE",
     "networkConfiguration": {
       "awsvpcConfiguration": {
         "subnets": [
           "subnet-09ce6e74c116a2299",
           "subnet-00bb3bd7a73526788",
           "subnet-0048a611aaec65477"
         ],
         "securityGroups": [
           "sg-09d45005497daa123"
         ],
         "assignPublicIp": "ENABLED"
       }
     },
     "deploymentController": {
       "type": "ECS"
     },
     "deploymentConfiguration": {
       "strategy": "BLUE_GREEN",
       "maximumPercent": 200,
       "minimumHealthyPercent": 100,
       "bakeTimeInMinutes": 2,
       "alarms": {
         "alarmNames": [
           "myAlarm"
         ],
         "rollback": true,
         "enable": true
       },
       "lifecycleHooks": [
         {
           "hookTargetArn": "arn:aws:lambda:us-west-2:7123456789012:function:checkExample",
           "roleArn": "arn:aws:iam::123456789012:role/ECSLifecycleHookInvoke",
           "lifecycleStages": [
             "PRE_SCALE_UP"
           ]
         }
       ]
     },
     "loadBalancers": [
       {
         "targetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/blue-target-group/54402ff563af1197",
         "containerName": "fargate-app",
         "containerPort": 80,
         "advancedConfiguration": {
           "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/green-target-group/cad10a56f5843199",
           "productionListenerRule": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-blue-green-demo/32e0e4f946c3c05b/9cfa8c482e204f7d/831dbaf72edb911",
           "roleArn": "arn:aws:iam::123456789012:role/LoadBalancerManagementforECS"
         }
       }
     ]
   }
   ```

1. Exécutez `create-service`.

   Remplacez le *user-input* par vos valeurs.

   ```
   aws ecs create-service --cli-input-json file://service-definition.json
   ```

   Vous pouvez également utiliser l'exemple suivant qui crée un service de blue/green déploiement avec une configuration d'équilibreur de charge :

   ```
   aws ecs create-service \
      --cluster "arn:aws:ecs:us-west-2:123456789012:cluster/MyCluster" \
      --service-name "blue-green-example-service" \
      --task-definition "nginxServer:1" \
      --launch-type "FARGATE" \
      --network-configuration "awsvpcConfiguration={subnets=[subnet-12345,subnet-67890,subnet-abcdef,subnet-fedcba],securityGroups=[sg-12345],assignPublicIp=ENABLED}" \
      --desired-count 3 \
      --deployment-controller "type=ECS" \
      --deployment-configuration "strategy=BLUE_GREEN,maximumPercent=200,minimumHealthyPercent=100,bakeTimeInMinutes=0" \
      --load-balancers "targetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/MyBGtg1/abcdef1234567890,containerName=nginx,containerPort=80,advancedConfiguration={alternateTargetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/MyBGtg2/0987654321fedcba,productionListenerRule=arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/MyLB/1234567890abcdef/1234567890abcdef,roleArn=arn:aws:iam::123456789012:role/ELBManagementRole}"
   ```

------

## Étapes suivantes
<a name="deploy-blue-green-service-next-steps"></a>
+ Mettez à jour le service pour démarrer le déploiement. Pour de plus amples informations, veuillez consulter [Mettre à jour un service Amazon ECS](update-service-console-v2.md).
+ Surveillez le processus de déploiement pour vous assurer qu'il suit le blue/green modèle :
  + La révision de service verte est créée et augmentée horizontalement
  + Le trafic de test est acheminé vers la révision verte (si elle est configurée)
  + Le trafic de production est transféré vers la révision verte
  + Au terme de la durée de l’intégration, la révision bleue est résiliée