

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à.

# Ganci Lambda per le implementazioni di servizi Amazon ECS
<a name="lambda-lifecycle-hooks"></a>

Gli hook Lambda 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 logiche personalizzate 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 dell'hook del ciclo di vita 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 le risposte IN\_PROGRESS**: restituisci 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.

## Configurazione del timeout
<a name="lambda-hook-timeout"></a>

Puoi configurare un timeout per gli hook Lambda utilizzando. `timeoutConfiguration` Se la funzione Lambda non ritorna `SUCCEEDED` o `FAILED` prima della scadenza del timeout, Amazon ECS intraprende l'azione di timeout configurata.


| Campo | Description | 
| --- | --- | 
| timeoutConfiguration.timeoutInMinutes | Quanto tempo aspettare. Intervallo valido: da 1 a 1.440 (24 ore). Impostazione predefinita: 1.440 minuti. | 
| timeoutConfiguration.action | L'azione da intraprendere se il timeout scade. Valori validi: ROLLBACK, CONTINUE. Default: ROLLBACK. | 

## Fasi del ciclo di vita supportate
<a name="lambda-hook-supported-stages"></a>

Puoi configurare gli hook Lambda nelle seguenti fasi del ciclo di vita:
+ `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`

Per le implementazioni lineari e canarie, gli hook Lambda configurati `PRODUCTION_TRAFFIC_SHIFT` o `PRE_PRODUCTION_TRAFFIC_SHIFT` vengono richiamati in ogni fase del cambio di traffico.

Per ulteriori informazioni sulle categorie delle fasi del ciclo di vita, vedere. [Hook del ciclo di vita per le implementazioni di servizi Amazon ECS](deployment-lifecycle-hooks.md)

## 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`- L'attuale fase 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`: il nome della risorsa Amazon (ARN) del servizio.
+ `targetServiceRevisionArn`: l'ARN della revisione del servizio target in fase di implementazione.
+ `testTrafficWeights`: una mappa degli ARN di revisione dei servizi in base alle corrispondenti percentuali di peso del traffico di test.
+ `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": {}
  }
}
```

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

Questa fase si verifica prima che Amazon ECS trasferisca il traffico di produzione alla revisione del servizio verde. Per le implementazioni lineari e canarie, questa fase viene richiamata prima di ogni fase di spostamento del traffico.

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

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.