Création d’un déploiement bleu/vert Amazon ECS - Amazon Elastic Container Service

Création d’un déploiement bleu/vert Amazon ECS

En utilisant les déploiements bleu/vert Amazon ECS, vous pouvez apporter et tester des modifications au service avant de les mettre en œuvre dans un environnement de production.

Prérequis

Effectuez les opérations suivantes avant de démarrer un déploiement bleu/vert.

  1. Configurez les autorisations appropriées.

  2. Les déploiements bleu/vert Amazon ECS nécessitent que votre service utilise l’une des fonctionnalités suivantes : Configurez les ressources appropriées.

  3. Créez une règle pour acheminer le trafic vers votre version de service vert. Pour plus d’informations, consultez la section Règles d’écoute dans le Guide de l’utilisateur Network Load Balancer.

  4. Créez un groupe cible pour la révision de votre service vert. Lorsque vous utilisez le mode réseau awsvpc pour vos tâches, le type de cible doit être ip. Pour plus d’informations sur les groupes cibles, consultez la section Groupes cibles dans le Guide de l’utilisateur Network Load Balancer.

  5. Déterminez si vous souhaitez exécuter des fonctions Lambda pour les événements du cycle de vie.

    • Avant augmentation horizontale

    • Après augmentation horizontale

    • Transfert du trafic test

    • Après transfert du trafic test

    • Transfert du trafic de production

    • Après transfert du trafic de production

    Créez des fonctions Lambda pour chaque événement du cycle de vie. Pour plus d’informations sur l’utilisation de Lambda, consultez la section Créer une fonction Lambda avec la console dans le Guide du développeur AWS Lambda.

Procédure

Vous pouvez utiliser la console ou l’AWS CLI pour créer un service bleu/vert Amazon ECS.

Console
  1. Ouvrez la console à partir de l'adresse https://console.aws.amazon.com/ecs/v2.

  2. Déterminez la ressource à partir de laquelle vous lancez le service.

    Pour démarrer un service à partir de Étapes

    Clusters

    1. Sur la page Clusters, sélectionnez le cluster dans lequel créer le service.

      La page des détails du cluster s’ouvre.

    2. Dans l'onglet Services choisissez Create (Créer).

    Définition de tâche
    1. Sur la page Définitions de tâche, sélectionnez la définition de tâche.

    2. Dans le menu Déployer, choisissez Créer un service.

    La page Créer un service s’affiche.

  3. 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.

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

  4. 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

  5. Choisissez comment vos tâches sont distribuées dans votre infrastructure de cluster. Sous Configuration de calcul, choisissez votre option.

    Options de calcul Étapes

    Stratégie de fournisseur de capacité

    1. Sous Options de calcul, choisissez Stratégie de fournisseur de capacité.

    2. Choisissez une stratégie :

      • Pour utiliser une stratégie de fournisseur de capacité, choisissez Use cluster default (Utiliser la stratégie par défaut du cluster).

      • Si votre cluster ne possède pas de stratégie de fournisseur de capacité par défaut ou si vous souhaitez utiliser une stratégie personnalisée, sélectionnez Utiliser une stratégie personnalisée ou Ajouter une stratégie de fournisseur de capacité et définissez votre stratégie de fournisseur de capacité personnalisée en spécifiant une Base, un Fournisseur de capacité et un Poids.

    Note

    Pour utiliser un fournisseur de capacité dans une stratégie, le fournisseur de capacité doit être associé au cluster.

    Type de lancement
    1. Dans Compute options (Options de calcul), sélectionnez Launch type (Type de lancement).

    2. Pour Launch type (Type de lancement), choisissez un type de lancement.

    3. (Facultatif) Lorsque Fargate est spécifié, pour Version de plateforme, spécifiez la version de plateforme à utiliser. Si vous ne spécifiez aucune version de plateforme, la version LATEST est utilisée.

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

    1. Pour Type de service, choisissez Replica.

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

    3. 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é.

    4. 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 de délai de grâce pour la surveillance de l’état, la valeur par défaut 0 est utilisée.

    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.

    2. (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.

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

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

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

  7. 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.

    2. Pour arrêter un déploiement en fonction des métriques de l’application, sélectionnez Utiliser les alarmes CloudWatch. Ensuite, dans la liste Nom de l’alarme CloudWatch, choisissez les alarmes. Pour créer une alarme, rendez-vous dans la console CloudWatch.

      Pour que le logiciel ramène automatiquement le déploiement au dernier état de déploiement terminé lorsqu’une alarme de déploiement met le déploiement en état d’échec, sélectionnez Restauration en cas d’échec.

  8. (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.

    2. 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).

    3. 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 la même Région AWS de votre 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 espaces de noms AWS Cloud Map partagés, consultez la section Partage d’espaces de noms AWS Cloud Map entre comptes dans le Guide du développeur AWS Cloud Map.

    4. (Facultatif) Configurez les règles d’en-tête du trafic de test pour les déploiements bleu/vert. 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.

      2. 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.

      3. 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.

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

      Voici une description plus détaillée de chaque destination de journal de conteneur.

      • Amazon CloudWatch : configurez la tâche pour envoyer les journaux de conteneur à CloudWatch Logs. Les options de pilote de journal par défaut sont fournies, ce qui crée un groupe de journaux CloudWatch. 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 des journaux de conteneur à un domaine OpenSearch 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.

  9. (Facultatif) Configurez l’équilibrage de charge pour un déploiement bleu/vert.

    Types Elastic Load Balancing Étapes

    Application Load Balancer

    1. Pour Type d’équilibreur de charge, choisissez Application Load Balancer.

    2. Choisissez Create a new load balancer (Créer un équilibreur de charge) pour créer un équilibreur de charge Application Load Balancer ou Use an existing load balancer (Utiliser un équilibreur de charge existant) pour sélectionner un équilibreur de charge Application Load Balancer existant.

    3. Pour Conteneur, choisissez le conteneur qui héberge le service.

    4. Pour Load balancer name (nom d'équilibreur de charge), saisissez un nom unique.

    5. Pour Listener (Écouteur), saisissez un port et un protocole sur lesquels Application Load Balancer doit écouter les demandes de connexion. Par défaut, l'équilibreur de charge est configuré pour utiliser le port 80 et HTTP.

      • Pour Règle de production, saisissez l’ordre d’évaluation et le modèle de chemin de la règle.

        Cette règle concerne le trafic de révision de votre service de production (bleu).

      • Pour Règle de test, saisissez l’ordre d’évaluation et le modèle de chemin de la règle.

        Cette règle concerne le trafic de révision de votre service test (vert).

    6. Pour Groupe cible, configurez les éléments suivants :

      • Pour Target group name (Nom du groupe cible), saisissez un nom et un protocole pour le groupe cible vers lequel Application Load Balancer achemine les requêtes.

      • Pour Protocole, choisissez le protocole pour le groupe cible vers lequel Application Load Balancer achemine les requêtes. Par défaut, le groupe cible achemine les requêtes vers le premier conteneur défini dans votre définition de tâche.

      • Pour Délai d’annulation de l’inscription, saisissez le nombre de secondes dont dispose l’équilibreur de charge pour modifier l’état cible UNUSED. La durée par défaut est 300 secondes.

      • Pour Health check path (Chemin de surveillance de l'état), saisissez un chemin qui existe dans votre conteneur où Application Load Balancer doit envoyer périodiquement des requêtes pour vérifier l'état de la connexion entre Application Load Balancer et le conteneur. Le répertoire par défaut est le répertoire racine (/).

      • Dans Nom de groupe alternatif, saisissez le nom du groupe cible pour votre révision de service de test (vert).

    Network Load Balancer
    1. Pour Load balancer type (Type d'équilibreur de charge), sélectionnez Network Load Balancer.

    2. Dans le champ Load Balancer (Équilibreur de charge), choisissez Attacher à un Network Load Balancer existant.

    3. Pour Choose container to load balance (Choisissez le conteneur pour équilibrer la charge), choisissez le conteneur qui héberge le service.

    4. Pour Écouteur de production, choisissez le port d’écouteur de production et le protocole d’écouteur de production.

      Il s’agit de l’écouteur pour le trafic de révision de votre service de production (bleu).

    5. Pour Port de l’écouteur de test, choisissez le port de l’écouteur de test et le protocole de l’écouteur de test.

      Il s’agit de l’écouteur pour le trafic de révision de votre service de test (vert).

    6. Pour Groupe cible, configurez les éléments suivants :

      • Pour Target group name (Nom du groupe cible), saisissez un nom et un protocole pour le groupe cible vers lequel Network Load Balancer achemine les requêtes.

      • Pour Protocole, choisissez le protocole pour le groupe cible vers lequel Network Load Balancer achemine les requêtes. Par défaut, le groupe cible achemine les requêtes vers le premier conteneur défini dans votre définition de tâche.

      • Pour Délai d’annulation de l’inscription, saisissez le nombre de secondes dont dispose l’équilibreur de charge pour modifier l’état cible UNUSED. La durée par défaut est 300 secondes.

      • Pour Health check path (Chemin de surveillance de l'état), saisissez un chemin qui existe dans votre conteneur où Application Load Balancer doit envoyer périodiquement des requêtes pour vérifier l'état de la connexion entre Application Load Balancer et le conteneur. Le répertoire par défaut est le répertoire racine (/).

      • Dans Nom de groupe alternatif, saisissez le nom du groupe cible pour votre révision de service de test (vert).

  10. (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.

  11. Choisissez Créer.

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

    Remplacez chaque saisie utilisateur 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" } } ] }
  2. Exécutez create-service.

    Remplacez chaque saisie utilisateur 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 déploiement bleu/vert 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

  • Mettez à jour le service pour démarrer le déploiement. Pour de plus amples informations, consultez Updating an Amazon ECS service.

  • Surveillez le processus de déploiement pour vous assurer qu’il suit le schéma bleu/vert :

    • 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