

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Hook del ciclo di vita per le implementazioni di servizi Amazon ECS
<a name="deployment-lifecycle-hooks"></a>

Quando una distribuzione inizia, procede attraverso le fasi del ciclo di vita. Ogni fase può trovarsi in uno stato come o. `IN_PROGRESS` `SUCCEEDED` È possibile utilizzare gli hook del ciclo di vita, che sono funzioni Lambda che Amazon ECS esegue in fasi del ciclo di vita specifiche. Ogni chiamata include un payload JSON con informazioni sullo stato corrente della distribuzione.

## Hook del ciclo di vita
<a name="lifecycle-hook-status"></a>

I Lifecycle Hook sono funzioni Lambda richiamate da Amazon ECS in fasi specifiche di una distribuzione. Puoi utilizzare gli hook per eseguire test di convalida, applicare politiche di governance o implementare passaggi di approvazione manuali prima che la distribuzione proceda.

Quando Amazon ECS richiama il tuo hook, la funzione deve restituire un oggetto JSON contenente un campo. `hookStatus` Facoltativamente, puoi includere il controllo della tempistica dei `callBackDelay` tentativi e il trasferimento di dati tra le chiamate. `hookDetails` Se la tua funzione non restituisce un valore valido `hookStatus` o se fallisce, Amazon ECS ripristina la distribuzione.

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

I seguenti sono i valori validi`hookStatus`:
+ `SUCCEEDED`— L'implementazione continua fino alla fase successiva del ciclo di vita.
+ `FAILED`— Amazon ECS ripristina la distribuzione all'ultima revisione del servizio riuscita.
+ `IN_PROGRESS`— Amazon ECS richiama nuovamente la funzione dopo un ritardo. Per impostazione predefinita, il ritardo è di 30 secondi. È possibile personalizzare questo valore restituendo un `callBackDelay` insieme a`hookStatus`.

Nell'esempio seguente viene illustrato come restituire un `hookStatus` con un ritardo di callback personalizzato. In questo esempio, Amazon ECS riprova l'hook dopo 60 secondi anziché i 30 secondi predefiniti:

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

### Passaggio dello stato con hookDetails
<a name="hook-details"></a>

Il `hookDetails` campo è un dizionario che puoi usare per passare dati alla tua funzione lifecycle hook. Esistono due modi per compilare i dati: `hookDetails`
+ **Al momento della creazione o dell'aggiornamento del servizio**: definisci `hookDetails` la configurazione del lifecycle hook all'interno della definizione del servizio. Amazon ECS trasmette questi dati alla tua funzione a ogni chiamata. Usalo per rendere i tuoi hook riutilizzabili su più servizi inserendo una configurazione specifica del servizio.
+ **In fase di esecuzione tramite risposte IN\_PROGRESS**: restituisce insieme allo stato dell'hook. `hookDetails` `IN_PROGRESS` Amazon ECS restituisce questi dati alla tua funzione alla chiamata successiva. Usalo per mantenere lo stato tra le chiamate senza storage esterno.

L'esempio seguente mostra una configurazione del lifecycle hook in una definizione di servizio che passa un nome di bucket S3 alla funzione:

```
{
    "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"
    }
}
```

Quando la funzione ritorna`IN_PROGRESS`, puoi anche `hookDetails` includerla nella risposta. Amazon ECS unisce questi dati e li restituisce alla chiamata successiva. I casi d'uso più comuni includono il passaggio di contatori metrici o ARN di risorse esterne tra le chiamate.

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

Alla chiamata successiva, Amazon ECS include il payload `hookDetails` in the event insieme a: `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"
  }
}
```

La funzione può leggere `event["hookDetails"]` per accedere alla configurazione e allo stato delle chiamate precedenti.

**Nota**  
I dati aggiunti `hookDetails` in fase di esecuzione persistono solo tra le chiamate dello stesso hook all'interno di una singola distribuzione. I dati non vengono trasferiti tra diversi hook all'interno della stessa distribuzione o dello stesso hook in distribuzioni diverse.

## Categorie della fase del ciclo di vita
<a name="lifecycle-stage-categories"></a>

Le fasi del ciclo di vita rientrano in due categorie:

1. Fasi di **chiamata singole: Amazon ECS richiama queste fasi** solo una volta durante l'implementazione di un servizio:
   + `RECONCILE_SERVICE`
   + `PRE_SCALE_UP`
   + `POST_SCALE_UP`
   + `POST_TEST_TRAFFIC_SHIFT`
   + `POST_PRODUCTION_TRAFFIC_SHIFT`

1. **Fasi di invocazione ricorrenti:** Amazon ECS può richiamare queste fasi più volte durante l'implementazione di un servizio, incluso durante un rollback:
   + `TEST_TRAFFIC_SHIFT`
   + `PRODUCTION_TRAFFIC_SHIFT`

## Payload del ciclo di vita
<a name="service-deployment-lifecycle-payloads"></a>

### Struttura comune del payload
<a name="common-payload-structure"></a>

Quando Amazon ECS richiama la funzione Lambda del tuo lifecycle hook, il payload dell'evento contiene i seguenti campi di primo livello:
+ `executionId`— L'identificatore univoco per l'esecuzione di questo hook.
+ `lifecycleStage`— La fase corrente del ciclo di vita (ad esempio,). `PRODUCTION_TRAFFIC_SHIFT`
+ `resourceArn`— L'ARN della risorsa associata alla distribuzione.
+ `executionDetails`— Un oggetto contenente le informazioni specifiche della distribuzione descritte nell'elenco seguente.

L'oggetto `executionDetails` include i seguenti campi:
+  `serviceArn`— L'Amazon Resource Name (ARN) del servizio. 
+  `targetServiceRevisionArn`— L'ARN della revisione del servizio di destinazione in fase di implementazione. 
+  `testTrafficWeights`— Una mappa degli ARN di revisione del servizio in base alle corrispondenti percentuali di peso del traffico di prova. 
+  `productionTrafficWeights`— Una mappa degli ARN di revisione dei servizi in base alle corrispondenti percentuali di peso del traffico di produzione. 

L'esempio seguente mostra la struttura completa degli eventi ricevuta dalla funzione 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
    }
  }
}
```

### Payload delle fasi del ciclo di vita
<a name="lifecycle-stage-payloads"></a>

Le sezioni seguenti mostrano esempi di payload per ogni fase del ciclo di vita. In questi esempi, la revisione del servizio verde (`9313423515462893900`) è la nuova revisione in fase di implementazione e la revisione blu del servizio (`1920498462936580504`) è la revisione di produzione esistente.

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

Questa fase si verifica prima che Amazon ECS avvii le attività di revisione del servizio verde. La revisione del servizio verde non è iniziata e non viene indirizzato alcun traffico verso di esso.

```
{
  "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>

Questa fase si verifica dopo che Amazon ECS ha avviato le attività di revisione dei servizi ecologici e sono corrette. Le attività verdi sono in esecuzione ma non ricevono ancora traffico.

```
{
  "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>

Questa fase si verifica quando Amazon ECS sposta il traffico di test sulla revisione del servizio verde. `testTrafficWeights`Mostra la revisione verde che riceve il 100% del traffico di prova mentre la revisione blu riceve lo 0%. Il traffico di produzione continua a fluire verso la revisione blu.

```
{
  "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>

Questa fase si verifica dopo che Amazon ECS ha completato lo spostamento del traffico di prova. La revisione del servizio verde gestisce il 100% del traffico di 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>

Questa fase si verifica quando Amazon ECS sposta il traffico di produzione alla revisione del servizio verde. `productionTrafficWeights`Mostra la revisione verde che riceve il 100% del traffico di produzione mentre la revisione blu riceve lo 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>

Questa fase si verifica dopo che Amazon ECS ha completato lo spostamento del traffico di produzione. La revisione del servizio verde ora gestisce tutto il traffico di produzione.

```
{
  "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": {}
  }
}
```

## Il ciclo di vita si aggancia durante il rollback
<a name="lifecycle-hooks-during-rollback"></a>

Non esiste una fase dedicata del ciclo di vita. `ROLLBACK` Quando si verifica un rollback, Amazon ECS richiama nuovamente gli hook registrati `TEST_TRAFFIC_SHIFT` nelle fasi `PRODUCTION_TRAFFIC_SHIFT` and (le fasi di invocazione ricorrenti). Durante un rollback, il payload mostra che il traffico torna alla versione `productionTrafficWeights` blu.

`targetServiceRevisionArn`Rimane la versione verde dell'ARN perché è ancora l'obiettivo dell'implementazione originale, anche se il traffico si sta allontanando da essa.

L'esempio seguente mostra un `PRODUCTION_TRAFFIC_SHIFT` payload durante un rollback. Notate che la revisione blu (`1920498462936580504`) ora riceve il 100% del traffico di produzione, mentre la revisione verde (`9313423515462893900`) riceve lo 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
    }
  }
}
```

Per determinare se il tuo hook viene richiamato durante un rollback, controlla. `productionTrafficWeights` Se la `targetServiceRevisionArn` (revisione verde) ha un peso dello 0% e l'altra revisione ha il 100%, la distribuzione viene ripristinata.