Comment le disjoncteur ECS de déploiement d'Amazon détecte les défaillances - Amazon Elastic Container Service

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.

Comment le disjoncteur ECS de déploiement d'Amazon détecte les défaillances

Le disjoncteur du circuit de déploiement est un mécanisme de mise à jour propagée qui détermine si les tâches atteignent un état stable. Le disjoncteur du circuit de déploiement dispose d'une option qui ramène automatiquement un déploiement ayant échoué à l'état COMPLETED.

Lorsqu'un déploiement de service change d'état, Amazon ECS envoie un événement de changement d'état de déploiement de service à EventBridge. Cela permet de surveiller l'état de vos déploiements de services par programmation. Pour de plus amples informations, veuillez consulter Événements de changement d'état du déploiement du ECS service Amazon. Nous vous recommandons de créer et de surveiller une EventBridge règle avec un eventName de SERVICE_DEPLOYMENT_FAILED afin de pouvoir effectuer une action manuelle pour démarrer votre déploiement. Pour plus d'informations, consultez la section Création d'une EventBridge règle dans le guide de EventBridge l'utilisateur Amazon.

Lorsque le disjoncteur du circuit de déploiement détermine qu'un déploiement a échoué, il recherche le déploiement le plus récent à l'état COMPLETED. Il s'agit du déploiement qu'il utilise comme déploiement de restauration. Lorsque la restauration commence, le déploiement passe de COMPLETED à IN_PROGRESS. Cela signifie que le déploiement n'est pas éligible à une autre annulation tant qu'il n'a pas atteint un COMPLETED état. Lorsque le disjoncteur du circuit de déploiement ne trouve aucun déploiement à l'état COMPLETED, il ne lance pas de nouvelles tâches et le déploiement est bloqué.

Lorsque vous créez un service, le planificateur enregistre les tâches qui n'ont pas pu être lancées en deux étapes.

  • Étape 1 - Le planificateur surveille les tâches pour voir si elles passent à l'RUNNINGétat actuel.

    • Succès : le déploiement a une chance de passer à l'COMPLETEDétat car plusieurs tâches ont été transférées vers l'RUNNINGétat. Les critères de défaillance sont ignorés et le disjoncteur passe à l'étape 2.

    • Échec : certaines tâches consécutives n'ont pas été transférées vers l'RUNNINGétat et le déploiement peut passer à l'FAILEDétat.

  • Étape 2 - Le déploiement entre dans cette phase lorsqu'il existe au moins une tâche dans l'RUNNINGétat. Le disjoncteur vérifie les bilans de santé des tâches du déploiement en cours d'évaluation. Les contrôles de santé validés sont Elastic Load Balancing, les contrôles de santé des AWS Cloud Map services et les contrôles de santé des conteneurs.

    • Succès : au moins une tâche est en cours d'exécution et les tests de santé ont été validés.

    • Défaillance : les tâches remplacées en raison d'échecs liés aux tests de santé ont atteint le seuil d'échec.

Tenez compte des points suivants lorsque vous utilisez la méthode du disjoncteur de déploiement sur un service. EventBridge génère la règle.

  • La réponse DescribeServices donne un aperçu de l'état d'un déploiement, le rolloutState et rolloutStateReason. Lorsqu'un nouveau déploiement est démarré, il commence avec l'état IN_PROGRESS. Lorsque le service atteint un état stable, l'état du déploiement passe à COMPLETED. Si le service n'arrive pas à atteindre un état stable et que le disjoncteur de circuit est activé, le déploiement passe à l'état FAILED. Un déploiement dans un état FAILED ne lance aucune nouvelle tâche.

  • Outre les événements de changement d'état du déploiement du service qu'Amazon ECS envoie pour les déploiements qui ont commencé et sont terminés, Amazon envoie ECS également un événement en cas d'échec d'un déploiement avec un disjoncteur activé. Ces événements fournissent des informations sur la raison pour laquelle un déploiement a échoué ou si un déploiement a été démarré en raison d'une restauration. Pour de plus amples informations, veuillez consulter Événements de changement d'état du déploiement du ECS service Amazon.

  • Si un nouveau déploiement est démarré parce qu'un déploiement précédent a échoué et que la restauration a eu lieu, le champ reason de l'événement de changement d'état de déploiement de service indique que le déploiement a été démarré en raison d'une restauration.

  • Le disjoncteur de déploiement n'est pris en charge que pour les ECS services Amazon qui utilisent le contrôleur de déploiement rolling update (ECS).

  • Vous devez utiliser la ECS console Amazon, ou AWS CLI lorsque vous utilisez le disjoncteur de déploiement avec l' CloudWatch option. Pour plus d'informations, consultez Créer un service à l'aide de paramètres définis et create-service dans la Référence AWS Command Line Interface .

L'create-service AWS CLI exemple suivant montre comment créer un service Linux lorsque le disjoncteur de déploiement est utilisé avec l'option de restauration.

aws ecs create-service \ --service-name MyService \ --deployment-controller type=ECS \ --desired-count 3 \ --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \ --task-definition sample-fargate:1 \ --launch-type FARGATE \ --platform-family LINUX \ --platform-version 1.4.0 \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}"

Exemple :

Le déploiement 1 est à l'état COMPLETED.

Le déploiement 2 ne pouvant pas démarrer, le disjoncteur du circuit revient au déploiement 1. Le déploiement 1 passe à l'état IN_PROGRESS.

Le déploiement 3 démarre et aucun déploiement n'est à l'état COMPLETED. Le déploiement 3 ne peut donc ni être restauré, ni lancer de tâches.

Seuil d'échec

Le disjoncteur de déploiement calcule la valeur de seuil, puis utilise cette valeur pour déterminer quand passer le déploiement à l'état FAILED.

Le disjoncteur de déploiement a un seuil minimum de 3 et un seuil maximum de 200. Il utilise les valeurs de la formule suivante pour déterminer l'échec du déploiement.

Minimum threshold <= 0.5 * desired task count => maximum threshold

Lorsque le résultat du calcul est supérieur au minimum de 3, mais inférieur au maximum de 200, le seuil de défaillance est défini sur le seuil calculé (arrondi au chiffre supérieur).

Note

Vous ne pouvez modifier aucune des valeurs de seuil.

La surveillance de l'état du déploiement comporte deux étapes.

  1. Le disjoncteur de déploiement surveille les tâches qui font partie du déploiement et vérifie les tâches qui se trouvent dans l'état RUNNING. Le planificateur ignore les critères d'échec lorsqu'une tâche du déploiement actuel se trouve dans l'état RUNNING et passe à l'étape suivante. Lorsque les tâches ne parviennent pas à atteindre l'état RUNNING, le disjoncteur de déploiement augmente d'un le nombre d'échecs. Lorsque le nombre d'échecs est égal au seuil, le déploiement est marqué comme étant FAILED.

  2. Cette étape est entrée lorsqu'il y a une ou plusieurs tâches dans l'RUNNINGétat. Le disjoncteur de déploiement effectue une surveillance de l'état sur les ressources suivantes pour les tâches du déploiement actuel :

    • Equilibreurs de charge Elastic Load Balancing

    • AWS Cloud Map service

    • Contrôles de santé des ECS conteneurs Amazon

    Lorsqu'une surveillance de l'état échoue pour la tâche, le disjoncteur de déploiement augmente d'un le nombre d'échecs. Lorsque le nombre d'échecs est égal au seuil, le déploiement est marqué comme étant FAILED.

Le tableau suivant fournit quelques exemples.

Nombre souhaité Calculs Seuil

1

3 <= 0.5 * 1 => 200
3 (la valeur calculée est inférieure au minimum)

25

3 <= 0.5 * 25 => 200
13 (la valeur est arrondie à la valeur supérieure)

400

3 <= 0.5 * 400 => 200
200

800

3 <= 0.5 * 800 => 200
200 (la valeur calculée est supérieure au maximum)

Par exemple, lorsque le seuil est de 3, le disjoncteur démarre avec le nombre de défaillances réglé à 0. Lorsqu'une tâche n'atteint pas RUNNING cet état, le disjoncteur de déploiement augmente le nombre d'échecs d'une unité. Lorsque le nombre d'échecs est égal à 3, le déploiement est marqué commeFAILED.

Pour des exemples supplémentaires sur l'utilisation de l'option de restauration, consultez Annonce du disjoncteur de ECS déploiement d'Amazon.