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 crochets de pause interrompent le déploiement d'un service Amazon ECS à un stade de cycle de vie spécifique et attendent que vous appeliez ContinueServiceDeployment avant de poursuivre le déploiement. Utilisez les 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 une étape du cycle de vie pour laquelle 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 le hookId et une action de CONTINUE ouROLLBACK, ou jusqu'à ce que le délai configuré soit atteint.

Vous pouvez le 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 interrompt le déploiement une fois le changement 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 crochets de pause. 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 faut-il attendre avant d'effectuer l'action de temporisation. Par défaut : 1 440 minutes (24 heures). 1 à 20 160 (14 jours) Non
timeoutConfiguration.action L'action à effectuer si le délai expire. ROLLBACK (par défaut), CONTINUE Non

Contraintes

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

  • Les crochets 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 ou.

Poursuivre un déploiement suspendu

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

Pour poursuivre le déploiement :

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 à ce stade 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 à ce stade 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, Amazon ECS exécute l'action de temporisation configurée :

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

  • CONTINUE- Amazon ECS poursuit le déploiement jusqu'à la prochaine étape 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 canariens

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

Par exemple, un déploiement linéaire comportant 5 étapes de changement de trafic et un crochet de pause PRE_PRODUCTION_TRAFFIC_SHIFT pendant 5 pauses, 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 avec le type de détail au ECS Hook State Change fur et à mesure que les crochets de pause progressent dans leur cycle de vie. Le tableau suivant décrit les noms des événements :

Nom de l’événement Description
HOOK_AWAITING_ACTION Le hook 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 hook a expiré avant d'être ContinueServiceDeployment appelé.

L'exemple suivant montre un EventBridge événement émis lorsqu'un hook 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" } }