

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.

# Hooks de cycle de vie pour les déploiements de service Amazon ECS
<a name="deployment-lifecycle-hooks"></a>

Lorsqu'un déploiement démarre, il passe par différentes étapes du cycle de vie. Chaque étape peut être dans un état tel que `IN_PROGRESS` ou`SUCCEEDED`. Vous pouvez utiliser les hooks du cycle de vie, qui sont des fonctions Lambda qu’Amazon ECS exécute en votre nom à des étapes du cycle de vie spécifiées. Chaque appel inclut une charge utile JSON contenant des informations sur l'état actuel du déploiement.

## Hooks de cycle de vie
<a name="lifecycle-hook-status"></a>

Les hooks du cycle de vie sont des fonctions Lambda qu'Amazon ECS invoque à des étapes spécifiques d'un déploiement. Vous pouvez utiliser des hooks pour exécuter des tests de validation, appliquer des politiques de gouvernance ou mettre en œuvre des étapes d'approbation manuelles avant le début du déploiement.

Lorsqu'Amazon ECS invoque votre hook, votre fonction doit renvoyer un objet JSON contenant un `hookStatus` champ. Vous pouvez éventuellement inclure `callBackDelay` pour contrôler le délai des nouvelles tentatives et `hookDetails` pour transmettre des données entre les invocations. Si votre fonction ne renvoie pas une valeur valide `hookStatus` ou si elle échoue, Amazon ECS annule le déploiement.

### Valeurs HookStatus
<a name="hook-status-values"></a>

Les `hookStatus` valeurs valides sont les suivantes :
+ `SUCCEEDED`— Le déploiement passe à l'étape suivante du cycle de vie.
+ `FAILED`— Amazon ECS annule le déploiement jusqu'à la dernière révision de service réussie.
+ `IN_PROGRESS`— Amazon ECS invoque à nouveau la fonction après un certain délai. Par défaut, le délai est de 30 secondes. Vous pouvez personnaliser cette valeur en renvoyant un à `callBackDelay` côté du`hookStatus`.

L’exemple suivant montre comment renvoyer un `hookStatus` avec un délai de rappel personnalisé. Dans cet exemple, Amazon ECS réessaie le hook après 60 secondes au lieu des 30 secondes par défaut :

```
{
    "hookStatus": "IN_PROGRESS",
    "callBackDelay": 60
}
```

### Passage d'état avec HookDetails
<a name="hook-details"></a>

Le `hookDetails` champ est un dictionnaire que vous pouvez utiliser pour transmettre des données à votre fonction Lifecycle Hook. Il existe deux méthodes pour remplir le formulaire `hookDetails` :
+ **Lors de la création ou de la mise à jour du service** : définissez `hookDetails` la configuration du hook du cycle de vie dans votre définition de service. Amazon ECS transmet ces données à votre fonction à chaque appel. Utilisez-le pour rendre vos hooks réutilisables sur plusieurs services en transmettant une configuration spécifique au service.
+ **Lors de l'exécution via les réponses IN\_PROGRESS** — Retourne en `hookDetails` même temps que l'état du `IN_PROGRESS` hook. Amazon ECS transmet ces données à votre fonction lors du prochain appel. Utilisez-le pour maintenir l'état entre les appels sans stockage externe.

L'exemple suivant montre une configuration de hook du cycle de vie dans une définition de service qui transmet un nom de compartiment S3 à la fonction :

```
{
    "hookTargetArn": "arn:aws:lambda:us-west-2:123456789012:function:my-approval-hook",
    "roleArn": "arn:aws:iam::123456789012:role/ecs-lambda-invoke-role",
    "lifecycleStages": [
        "POST_TEST_TRAFFIC_SHIFT"
    ],
    "hookDetails": {
        "S3_BUCKET_NAME": "my-approval-bucket"
    }
}
```

Lorsque votre fonction revient`IN_PROGRESS`, vous pouvez également l'inclure `hookDetails` dans la réponse. Amazon ECS fusionne ces données et les transmet lors du prochain appel. Les cas d'utilisation courants incluent le transfert de compteurs métriques ou d'ARN de ressources externes entre les invocations.

```
{
    "hookStatus": "IN_PROGRESS",
    "callBackDelay": 30,
    "hookDetails": {
        "approvalChecked": true,
        "S3_BUCKET_NAME": "my-approval-bucket"
    }
}
```

Lors du prochain appel, Amazon ECS inclut la charge utile associée `hookDetails` à l'événement aux côtés de : `executionDetails`

```
{
  "executionId": "e8d5a28f-eb01-4f3c-9454-a30ba6dc54bc",
  "lifecycleStage": "POST_TEST_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {}
  },
  "hookDetails": {
    "approvalChecked": true,
    "S3_BUCKET_NAME": "my-approval-bucket"
  }
}
```

Votre fonction peut lire `event["hookDetails"]` pour accéder à la configuration et à l'état des appels précédents.

**Note**  
Les données ajoutées `hookDetails` lors de l'exécution ne persistent qu'entre les invocations du même hook au sein d'un même déploiement. Les données ne sont pas transférées entre différents hooks au sein d'un même déploiement ou entre le même hook dans différents déploiements.

## Catégories d’étapes du cycle de vie
<a name="lifecycle-stage-categories"></a>

Les étapes du cycle de vie entrent dans deux catégories principales :

1. **Étapes d'appel uniques** : Amazon ECS n'invoque ces étapes qu'une seule fois lors du déploiement d'un service :
   + `RECONCILE_SERVICE`
   + `PRE_SCALE_UP`
   + `POST_SCALE_UP`
   + `POST_TEST_TRAFFIC_SHIFT`
   + `POST_PRODUCTION_TRAFFIC_SHIFT`

1. **Étapes d'invocation récurrentes** : Amazon ECS peut invoquer ces étapes à plusieurs reprises au cours du déploiement d'un service, y compris lors d'une annulation :
   + `TEST_TRAFFIC_SHIFT`
   + `PRODUCTION_TRAFFIC_SHIFT`

## Données utiles de cycle de vie
<a name="service-deployment-lifecycle-payloads"></a>

### Structure de données utiles communes
<a name="common-payload-structure"></a>

Lorsqu'Amazon ECS appelle votre fonction Lambda Lifecycle Hook, la charge utile de l'événement contient les champs de premier niveau suivants :
+ `executionId`— Identifiant unique pour l'exécution de ce hook.
+ `lifecycleStage`— L'étape actuelle du cycle de vie (par exemple,`PRODUCTION_TRAFFIC_SHIFT`).
+ `resourceArn`— L'ARN de la ressource associée au déploiement.
+ `executionDetails`— Un objet contenant les informations spécifiques au déploiement décrites dans la liste suivante.

L'objet `executionDetails` comporte les champs suivants :
+  `serviceArn`— Le nom de ressource Amazon (ARN) du service. 
+  `targetServiceRevisionArn`— L'ARN de la révision du service cible en cours de déploiement. 
+  `testTrafficWeights`— Une carte des ARN de révision des services par rapport à leurs pourcentages de pondération du trafic de test correspondants. 
+  `productionTrafficWeights`— Une carte des ARN de révision des services par rapport à leurs pourcentages de pondération du trafic de production correspondants. 

L'exemple suivant montre la structure d'événements complète que reçoit votre fonction Lambda :

```
{
  "executionId": "f4fcae0f-9bec-41c6-ba87-0eaa0cef8af5",
  "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100,
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0
    }
  }
}
```

### Données utiles relatives aux étapes de cycle de vie
<a name="lifecycle-stage-payloads"></a>

Les sections suivantes présentent des exemples de charges utiles pour chaque étape du cycle de vie. Dans ces exemples, la révision de service verte (`9313423515462893900`) est la nouvelle révision en cours de déploiement, et la révision de service bleue (`1920498462936580504`) est la révision de production existante.

#### PRE\_SCALE\_UP
<a name="pre-scale-up"></a>

Cette étape a lieu avant qu'Amazon ECS ne lance les tâches de révision des services écologiques. La révision du service vert n'a pas commencé et aucun trafic n'y est acheminé.

```
{
  "executionId": "e8d5a28f-eb01-4f3c-9454-a30ba6dc54bc",
  "lifecycleStage": "PRE_SCALE_UP",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {}
  }
}
```

#### POST\_SCALE\_UP
<a name="post-scale-up"></a>

Cette étape a lieu une fois qu'Amazon ECS a lancé les tâches de révision des services écologiques et qu'elles sont saines. Les tâches vertes sont en cours mais ne reçoivent pas encore de trafic.

```
{
  "executionId": "8b095b05-7bb0-4c56-a223-a3f61f4f9295",
  "lifecycleStage": "POST_SCALE_UP",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {}
  }
}
```

#### TEST\_TRAFFIC\_SHIFT
<a name="test-traffic-shift"></a>

Cette étape se produit lorsqu'Amazon ECS déplace le trafic de test vers la version verte du service. Ils `testTrafficWeights` indiquent que la version verte reçoit 100 % du trafic de test tandis que la révision bleue reçoit 0 %. Le trafic de production continue de circuler vers la version bleue.

```
{
  "executionId": "779085de-ab47-42bc-84ad-41f9914a8643",
  "lifecycleStage": "TEST_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100,
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0
    },
    "productionTrafficWeights": {}
  }
}
```

#### POST\_TEST\_TRAFFIC\_SHIFT
<a name="post-test-traffic-shift"></a>

Cette étape a lieu une fois qu'Amazon ECS a terminé le transfert de trafic de test. La révision du service écologique gère 100 % du trafic de test.

```
{
  "executionId": "3a0345ba-b029-404b-890d-7da2a4b266aa",
  "lifecycleStage": "POST_TEST_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {}
  }
}
```

#### PRODUCTION\_TRAFFIC\_SHIFT
<a name="production-traffic-shift"></a>

Cette étape se produit lorsqu'Amazon ECS déplace le trafic de production vers la révision du service écologique. Ils `productionTrafficWeights` indiquent que la version verte reçoit 100 % du trafic de production tandis que la révision bleue reçoit 0 %.

```
{
  "executionId": "f4fcae0f-9bec-41c6-ba87-0eaa0cef8af5",
  "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100,
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0
    }
  }
}
```

#### POST\_PRODUCTION\_TRAFFIC\_SHIFT
<a name="post-production-traffic-shift"></a>

Cette étape a lieu une fois qu'Amazon ECS a terminé le transfert du trafic de production. La révision du service écologique gère désormais tout le trafic de production.

```
{
  "executionId": "5f40ed04-7e54-437d-b95d-98bc872fec49",
  "lifecycleStage": "POST_PRODUCTION_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {}
  }
}
```

## Le cycle de vie s'accroche pendant le rollback
<a name="lifecycle-hooks-during-rollback"></a>

Il n'y a pas d'étape dédiée au `ROLLBACK` cycle de vie. Lorsqu'un rollback se produit, Amazon ECS réinvoque les hooks enregistrés aux `TEST_TRAFFIC_SHIFT` étapes `PRODUCTION_TRAFFIC_SHIFT` et (les étapes d'invocation récurrentes). Lors d'un rollback, les informations `productionTrafficWeights` contenues dans la charge utile indiquent que le trafic revient à la version bleue.

L'ARN de révision `targetServiceRevisionArn` reste vert car il est toujours la cible du déploiement initial, même si le trafic s'en éloigne.

L'exemple suivant montre une `PRODUCTION_TRAFFIC_SHIFT` charge utile lors d'un rollback. Notez que la révision bleue (`1920498462936580504`) reçoit désormais 100 % du trafic de production, tandis que la révision verte (`9313423515462893900`) reçoit 0 % :

```
{
  "executionId": "70073435-cb99-457f-b900-6ee1dcad05ec",
  "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT",
  "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28",
  "executionDetails": {
    "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service",
    "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900",
    "testTrafficWeights": {},
    "productionTrafficWeights": {
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 0,
      "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 100
    }
  }
}
```

Pour déterminer si votre hook est invoqué lors d'un rollback, vérifiez le`productionTrafficWeights`. Si la `targetServiceRevisionArn` (révision verte) a une pondération de 0 % et que l'autre révision a une pondération de 100 %, le déploiement est annulé.