View a markdown version of this page

Hook del ciclo di vita per le implementazioni di servizi Amazon ECS - Amazon Elastic Container Service

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

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

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

I seguenti sono i valori validihookStatus:

  • 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 ahookStatus.

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

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 ritornaIN_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

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

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

Struttura comune del payload

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

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

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

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

Questa fase si verifica quando Amazon ECS sposta il traffico di test sulla revisione del servizio verde. testTrafficWeightsMostra 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

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

Questa fase si verifica quando Amazon ECS sposta il traffico di produzione alla revisione del servizio verde. productionTrafficWeightsMostra 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

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

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.

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