View a markdown version of this page

Détection des pannes par le disjoncteur de déploiement Amazon ECS - 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.

Détection des pannes par le disjoncteur de déploiement Amazon ECS

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. Vous pouvez personnaliser la façon dont le disjoncteur compte les défaillances et le seuil à partir duquel il se déclenche, afin que le comportement de restauration corresponde aux caractéristiques de démarrage de votre application et à votre tolérance aux échecs de tâches.

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 modification de l’état de déploiement de service Amazon ECS. 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 Getting Started with EventBridge 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 restauration tant qu’il n’a pas atteint un état COMPLETED. 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 assure le suivi des 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’état EN COURS D’EXÉCUTION.

    • Succès : le déploiement a une chance de passer à l’état TERMINÉ car plusieurs tâches sont passées à l’état EN COURS D’EXÉCUTION. Les critères de défaillance sont ignorés et le disjoncteur passe à l’étape 2.

    • Échec : par défaut, les tâches consécutives qui ne passent pas à l'état RUNNING sont comptabilisées dans le calcul du seuil d'échec (resetOnHealthyTaskistrue). Dans resetOnHealthyTask ce casfalse, toutes les défaillances de tâches s'accumulent, que les tâches saines démarrent ou non entre les échecs.

  • Étape 2 : le déploiement entre dans cette phase lorsqu’au moins une tâche est EN COURS D’EXÉCUTION. Le disjoncteur vérifie les surveillances de l’état pour les tâches du déploiement actuel 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.

    • Réussite : au moins une tâche est en cours d’exécution et les surveillances de l’état ont été validées.

    • Échec : les tâches remplacées en raison d’échecs liés aux surveillances de l’état 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 de déploiement de service qu'Amazon ECS envoie pour les déploiements qui ont démarré et se sont terminés, Amazon ECS envoie également un événement lorsqu'un déploiement avec le disjoncteur de circuit activé échoue. 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 modification de l’état de déploiement de service Amazon ECS.

  • 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 circuit de déploiement est pris en charge uniquement pour les services Amazon ECS qui utilisent le contrôleur de déploiement de la mise à jour continue (ECS).

  • Vous devez utiliser la console Amazon ECS, 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}"

L'create-service AWS CLI exemple suivant montre comment créer un service avec une configuration de disjoncteur de déploiement personnalisée qui utilise un nombre de défaillances fixe de 5 et un suivi des défaillances cumulées.

aws ecs create-service \ --service-name MyService \ --deployment-controller type=ECS \ --desired-count 10 \ --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true,resetOnHealthyTask=false,thresholdConfiguration={type=COUNT,value=5}}" \ --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 utilise un seuil de défaillance pour déterminer à quel moment le déploiement doit passer à un FAILED état donné. Vous pouvez configurer à la fois le mode de comptage des défaillances et la valeur de seuil elle-même.

Mode de comptage des défaillances

Le resetOnHealthyTask paramètre contrôle la façon dont le disjoncteur compte les échecs de tâches lors d'un déploiement.

true (par défaut)

Le nombre d'échecs est remis à 0 chaque fois qu'une tâche atteint un état normal. Seules les défaillances consécutives sont prises en compte dans le calcul du seuil. Ce mode est utile pour les applications susceptibles de rencontrer des échecs de démarrage intermittents avant d'être stabilisées.

false

Les échecs de tâches s'accumulent tout au long du déploiement. Le nombre d'échecs ne se réinitialise jamais, même lorsque des tâches saines commencent entre deux défaillances. Ce mode permet une détection plus rapide lorsqu'un schéma d'échec indique un déploiement problématique.

Configuration du seuil

Le thresholdConfiguration réglage définit le moment où le disjoncteur se déclenche. Il contient un type qui détermine le mode de calcul du seuil et un value qui indique le pourcentage ou le nombre à utiliser.

BOUNDED_PERCENT (par défaut)

Amazon ECS multiplie value par le dernier nombre de services souhaités pour calculer le seuil de défaillance. Le résultat est limité à un minimum de 3 et à un maximum de 200. Il s'agit du type par défaut avec une valeur par défaut de 50.

UNBOUNDED_PERCENT

Amazon ECS multiplie value par le dernier nombre de services souhaités pour calculer le seuil de défaillance. Il n'y a pas de limite minimale ou maximale pour le résultat. Utilisez ce type pour les services dont le nombre souhaité est élevé et qui nécessitent un seuil proportionnel sans le plafond de 200.

COUNT

Amazon ECS l'utilise value directement comme seuil de défaillance. Le seuil reste fixe quel que soit le nombre de services souhaités. Utilisez ce type lorsque vous souhaitez connaître le nombre exact de défaillances tolérées, par exemple un seuil inférieur pour accélérer les annulations dans les environnements de développement.

Pour les types de pourcentage (BOUNDED_PERCENTetUNBOUNDED_PERCENT), la plage valide pour value est comprise entre 1 et 100. Lors d'un déploiement, Amazon ECS utilise en permanence le dernier nombre de services souhaités dans ses calculs.

Comment BOUNDED_PERCENT calcule le seuil

Lorsque vous utilisez le type de BOUNDED_PERCENT seuil par défaut, le disjoncteur de déploiement calcule le seuil à l'aide de la formule suivante.

Minimum threshold (3) <= (value/100) * desired task count => Maximum threshold (200)

Lorsque le résultat du calcul est inférieur à 3, le seuil est fixé à 3. Lorsque le résultat est supérieur à 200, le seuil est fixé à 200. Dans le cas contraire, le seuil est défini sur la valeur calculée (arrondie au chiffre supérieur).

Le tableau suivant fournit des exemples utilisant la valeur par défaut de 50.

Nombre souhaité Calculs Threshold

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 (la valeur calculée est supérieure au maximum)

800

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

AvecUNBOUNDED_PERCENT, le même calcul s'applique, mais sans les limites minimale et maximale. Par exemple, un service dont le nombre souhaité est de 800 et la valeur de 50 aura un seuil de 400.

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 n'atteignent pas RUNNING cet état, le disjoncteur de déploiement augmente le nombre de défaillances d'une unité. Lorsque le nombre d'échecs est égal au seuil, le déploiement est marqué comme étant FAILED.

  2. Cette étape débute lorsqu’il y a une ou plusieurs tâches dans l’état RUNNING. 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

    • Surveillance de l'état des conteneurs Amazon ECS

    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.

Par exemple, lorsque le seuil est de 3, le disjoncteur se déclenche lorsque le nombre de défaillances atteint 0. Lorsqu’une tâche ne parvient pas à atteindre l’état RUNNING, 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é comme FAILED.

Pour obtenir des exemples supplémentaires sur l'utilisation de l'option de restauration, consultez Announcing Amazon ECS deployment circuit breaker (Annonce du disjoncteur de circuit de déploiement Amazon ECS).