

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 Lambda pour les déploiements de services Amazon ECS
<a name="lambda-lifecycle-hooks"></a>

Les hooks Lambda 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 implémenter une logique personnalisée avant le 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 calendrier 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 se poursuit jusqu'à la prochaine étape du cycle de vie.
+ `FAILED`- Amazon ECS ramène le déploiement à la dernière révision de service réussie.
+ `IN_PROGRESS`- Amazon ECS invoque à nouveau la fonction après un certain temps. 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
}
```

## État de passage 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 manières de remplir les données `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 à `hookDetails` côté de l'état du `IN_PROGRESS` hook. Amazon ECS renvoie ces données à votre fonction lors de la prochaine invocation. Utilisez-le pour maintenir l'état entre les appels sans stockage externe.

L'exemple suivant montre une configuration de hook de 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 renvoie lors de l'appel suivant. Les cas d'utilisation courants incluent le passage de compteurs de 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 de l'appel suivant, Amazon ECS inclut la charge utile de `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 au `hookDetails` moment 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.

## Configuration du délai d’attente
<a name="lambda-hook-timeout"></a>

Vous pouvez configurer un délai d'expiration pour les hooks Lambda à l'aide de. `timeoutConfiguration` Si la fonction Lambda ne revient pas `SUCCEEDED` ou `FAILED` avant l'expiration du délai, Amazon ECS exécute l'action de temporisation configurée.


| Champ | Description | 
| --- | --- | 
| timeoutConfiguration.timeoutInMinutes | Combien de temps attendre. Plage valide : 1 à 1 440 (24 heures). Par défaut : 1 440 minutes. | 
| timeoutConfiguration.action | L'action à effectuer si le délai expire. Valeurs valides : ROLLBACK, CONTINUE. Valeur par défaut : ROLLBACK. | 

## Étapes du cycle de vie prises
<a name="lambda-hook-supported-stages"></a>

Vous pouvez configurer les hooks Lambda aux étapes du cycle de vie suivantes :
+ `RECONCILE_SERVICE`
+ `PRE_SCALE_UP`
+ `POST_SCALE_UP`
+ `TEST_TRAFFIC_SHIFT`
+ `POST_TEST_TRAFFIC_SHIFT`
+ `PRE_PRODUCTION_TRAFFIC_SHIFT`
+ `PRODUCTION_TRAFFIC_SHIFT`
+ `POST_PRODUCTION_TRAFFIC_SHIFT`

Pour les déploiements linéaires et Canary, les hooks Lambda `PRE_PRODUCTION_TRAFFIC_SHIFT` sont configurés `PRODUCTION_TRAFFIC_SHIFT` ou invoqués à chaque étape du changement de trafic.

Pour plus d'informations sur les catégories d'étapes du cycle de vie, consultez[Hooks de cycle de vie pour les déploiements de service Amazon ECS](deployment-lifecycle-hooks.md).

## 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 invoque la fonction Lambda de votre hook de cycle de vie, la charge utile de l'événement contient les champs de niveau supérieur suivants :
+ `executionId`- L'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` : l’Amazon Resource Name (ARN) du service.
+ `targetServiceRevisionArn` : lÂRN de la révision de service cible est en cours de déploiement.
+ `testTrafficWeights` : une carte des ARN de révision de services correspondant à leurs pourcentages de poids de trafic test.
+ `productionTrafficWeights` : une carte des ARN de révision de services correspondant à leurs pourcentages de poids du trafic de production.

L'exemple suivant montre la structure complète des événements 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 du service vert. 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 se produit une fois qu'Amazon ECS a lancé les tâches de révision du service vert et que celles-ci sont en bon état. Les tâches vertes sont en cours d'exécution 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 révision du service vert. `testTrafficWeights`Afficher la révision verte recevant 100 % du trafic de test tandis que la révision bleue reçoit 0 %. Le trafic de production continue d'affluer 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 test de transfert de trafic. La révision du service vert 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": {}
  }
}
```

#### CHANGEMENT\_DE\_CIRCULATION\_PRÉPRODUCTION
<a name="pre-production-traffic-shift"></a>

Cette étape a lieu avant qu'Amazon ECS ne transfère le trafic de production vers la révision du service vert. Pour les déploiements linéaires et Canary, cette étape est invoquée avant chaque étape de transfert de trafic.

```
{
  "executionId": "a2b3c4d5-e6f7-8901-abcd-ef1234567890",
  "lifecycleStage": "PRE_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
    }
  }
}
```

#### 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 vert. Ils `productionTrafficWeights` indiquent que la révision 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 vert 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": {}
  }
}
```

## Hooks liés au cycle de vie lors de la restauration
<a name="lifecycle-hooks-during-rollback"></a>

Il n'existe aucune étape `ROLLBACK` du cycle de vie dédiée. Lorsqu'un rollback se produit, Amazon ECS invoque à nouveau les hooks enregistrés aux `TEST_TRAFFIC_SHIFT` étapes `PRODUCTION_TRAFFIC_SHIFT` et (les étapes d'invocation récurrentes). Lors d'une restauration, le contenu de `productionTrafficWeights` la charge utile indique que le trafic revient à la version bleue.

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

L'exemple suivant montre une `PRODUCTION_TRAFFIC_SHIFT` charge utile lors d'une restauration. Notez que la révision bleue (`1920498462936580504`) reçoit désormais 100 % du trafic de production, tandis que la version 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 pondération de la `targetServiceRevisionArn` (révision verte) est de 0 % et celle de l'autre révision de 100 %, le déploiement est annulé.