View a markdown version of this page

Suspendre les hooks pour les déploiements de services 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.

Suspendre les hooks pour les déploiements de services Amazon ECS

Les hooks interrompent le déploiement d'un service Amazon ECS à une étape spécifique du cycle de vie et attendent que vous appeliez ContinueServiceDeployment avant que le déploiement ne se poursuive. Utilisez des crochets de pause lorsque vous avez besoin d'une approbation manuelle ou d'une validation externe avant la poursuite d'un déploiement.

Comment fonctionnent les crochets de pause

Lorsqu'un déploiement atteint un stade du cycle de vie pour lequel un crochet de pause est configuré, les événements suivants se produisent :

  1. Amazon ECS génère un identifiant unique hookId pour le crochet de pause.

  2. Amazon ECS émet un EventBridge événement avec le type de détail ECS Hook State Change et le nom de l'événement. HOOK_AWAITING_ACTION

  3. Le déploiement reste suspendu jusqu'à ce que vous appeliez ContinueServiceDeployment avec une action de CONTINUE ouROLLBACK, ou jusqu'à ce que le délai d'expiration configuré soit atteint. hookId

Vous pouvez les récupérer hookId en appelantDescribeServiceDeployments. La réponse inclut un lifecycleHookDetails tableau avec l'état du hook :

{ "serviceDeployments": [ { "lifecycleHookDetails": [ { "hookId": "ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw", "targetType": "PAUSE", "status": "AWAITING_ACTION", "expiresAt": "2024-01-15T12:00:00Z", "timeoutAction": "ROLLBACK" } ] } ] }

Configuration des crochets de pause

L'exemple suivant montre une configuration de crochet de pause dans une définition de service qui suspend le déploiement une fois le transfert de trafic de test terminé :

{ "deploymentConfiguration": { "strategy": "BLUE_GREEN", "lifecycleHooks": [ { "targetType": "PAUSE", "lifecycleStages": [ "POST_TEST_TRAFFIC_SHIFT" ], "timeoutConfiguration": { "timeoutInMinutes": 10, "action": "ROLLBACK" } } ] } }

Champs de configuration

Champ Description Valeurs valides Obligatoire
targetType Type de hook. Ça doit être PAUSE pour les pauses. PAUSE Oui
lifecycleStages Les étapes du cycle de vie au cours desquelles le déploiement s'arrête. RECONCILE_SERVICE, PRE_SCALE_UP, POST_SCALE_UP, POST_TEST_TRAFFIC_SHIFT, PRE_PRODUCTION_TRAFFIC_SHIFT, POST_PRODUCTION_TRAFFIC_SHIFT Oui
timeoutConfiguration.timeoutInMinutes Combien de temps attendre avant de prendre l'action de temporisation. Par défaut : 1 440 minutes (24 heures). 1 - 20 160 (14 jours) Non
timeoutConfiguration.action Action à effectuer en cas d'expiration du délai d'expiration. ROLLBACK (par défaut), CONTINUE Non

Constaintes

  • Vous pouvez configurer un maximum de 10 crochets de pause et 10 crochets Lambda par service.

  • Les crochets de pause n'utilisent pas hookTargetArn ouroleArn. Ces champs concernent uniquement les hooks Lambda.

  • Les crochets de pause ne peuvent pas être configurés aux PRODUCTION_TRAFFIC_SHIFT étapes TEST_TRAFFIC_SHIFT or.

Poursuite d'un déploiement suspendu

Lorsqu'un déploiement est suspendu (le statut du crochet de pause estAWAITING_ACTION), appelez ContinueServiceDeployment pour indiquer hookId l'action que vous souhaitez effectuer.

Pour poursuivre le déploiement, procédez comme suit :

aws ecs continue-service-deployment \ --hook-id ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw \ --action CONTINUE

Pour annuler le déploiement :

aws ecs continue-service-deployment \ --hook-id ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw \ --action ROLLBACK

Pour de plus amples informations, veuillez consulter Déploiements de services continus.

Plusieurs crochets au même stade

Lorsque plusieurs hooks sont configurés au même stade du cycle de vie, le déploiement reste suspendu jusqu'à ce que tous les hooks de cette étape soient poursuivis. Si un hook déclenche un rollback, l'ensemble du déploiement est annulé, quel que soit le statut des autres hooks à ce stade.

Ce comportement s'applique lorsque les hooks Lambda et les hooks pause sont configurés au même stade du cycle de vie. Le déploiement ne se poursuit que lorsque tous les hooks de cette étape se sont terminés avec succès ou ont été poursuivis.

Tous les hooks configurés au même stade du cycle de vie s'exécutent en parallèle.

Comportement en cas d'expiration

Si vous n'appelez pas ContinueServiceDeployment avant l'expiration du délai d'expiration, Amazon ECS exécute l'action de temporisation configurée :

  • ROLLBACK(par défaut) - Amazon ECS rétablit le déploiement à la version du service précédente.

  • CONTINUE- Amazon ECS poursuit le déploiement jusqu'à l'étape suivante du cycle de vie.

Vérifiez le expiresAt champ dans le lifecycleHookDetails tableau de la DescribeServiceDeployments réponse pour voir quand le délai expire.

Suspendez les hooks avec des déploiements linéaires et Canary

Pour les déploiements linéaires et Canary, les crochets de pause configurés sur PRE_PRODUCTION_TRAFFIC_SHIFT sont invoqués à chaque étape du transfert de trafic. Chaque invocation génère un appel uniquehookId, et vous devez appeler ContinueServiceDeployment pour chacun d'entre eux.

Par exemple, un déploiement linéaire comportant 5 étapes de transfert du trafic et un crochet de PRE_PRODUCTION_TRAFFIC_SHIFT pause 5 fois, soit une fois avant chaque étape. Chaque pause nécessite un appel distinct ContinueServiceDeployment avec le correspondanthookId.

EventBridge événements

Amazon ECS émet des EventBridge événements de type détaillé au ECS Hook State Change fur et à mesure que les hooks de pause progressent tout au long de leur cycle de vie. Le tableau suivant décrit les noms des événements :

Nom de l’événement Description
HOOK_AWAITING_ACTION Le crochet attend que tu appellesContinueServiceDeployment.
HOOK_SUCCEEDED Le hook s'est terminé avec succès (vous avez appelé ContinueServiceDeployment avecCONTINUE).
HOOK_FAILED Le hook a échoué (vous avez appelé ContinueServiceDeployment avecROLLBACK).
HOOK_TIMED_OUT Le délai imparti avant d'être appelé ContinueServiceDeployment a expiré.

L'exemple suivant montre un EventBridge événement émis lorsqu'un crochet de pause attend une action :

{ "version": "0", "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "detail-type": "ECS Hook State Change", "source": "aws.ecs", "account": "123456789012", "time": "2024-01-15T10:00:00Z", "region": "us-west-2", "detail": { "eventType": "INFO", "eventName": "HOOK_AWAITING_ACTION", "hookId": "ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw", "hookType": "PAUSE", "expiresAt": "2024-01-15T12:00:00Z", "lifecycleStage": "POST_TEST_TRAFFIC_SHIFT", "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/my-cluster", "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "serviceDeploymentArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "updatedAt": "2024-01-15T10:00:00Z" } }