View a markdown version of this page

Hook Lambda per distribuzioni 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 Lambda per distribuzioni di servizi Amazon ECS

Gli hook Lambda sono funzioni Lambda che Amazon ECS richiama in fasi specifiche di una distribuzione. Puoi utilizzare gli hook per eseguire test di convalida, applicare politiche di governance o implementare una logica personalizzata prima che la distribuzione proceda.

Quando Amazon ECS richiama il tuo hook, la tua funzione deve restituire un oggetto JSON contenente un hookStatus campo. È possibile includere facoltativamente callBackDelay per controllare la tempistica dei nuovi tentativi e hookDetails per passare dati tra una chiamata e l'altra. Se la tua funzione non restituisce un valore valido hookStatuso, in caso di errore, Amazon ECS ripristina la distribuzione.

Valori HookStatus

I seguenti sono i valori validi hookStatus valori:

  • SUCCEEDED - L'implementazione continua fino alla fase successiva del ciclo di vita.

  • FAILED - Amazon ECS ripristina la distribuzione all'ultima revisione del servizio completata con successo.

  • 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 accanto 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

Il hookDetails il campo è un dizionario che puoi usare per passare i dati nella tua funzione lifecycle hook. Esistono due modi per compilare hookDetails:

  • Alla creazione o all'aggiornamento del servizio - Definisci hookDetails nella 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 trasmettendo una configurazione specifica del servizio.

  • In fase di esecuzione tramite le risposte IN_PROGRESS - Ritorno hookDetails accanto al IN_PROGRESS stato del gancio. Amazon ECS trasmette questi dati alla tua funzione alla chiamata successiva. Usalo per mantenere lo stato tra una chiamata e l'altra 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 includere hookDetails nella risposta. Amazon ECS unisce questi dati e li ritrasmette alla chiamata successiva. I casi d'uso più comuni includono il passaggio di contatori metrici o ARN di risorse esterne tra una chiamata e l'altra.

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

Alla chiamata successiva, Amazon ECS include hookDetails nel caso in cui il payload sia affiancato 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 tua funzione è in grado di leggere event["hookDetails"] per accedere alla configurazione e allo stato delle chiamate precedenti.

Nota

Dati aggiunti a hookDetails in fase di esecuzione persiste solo tra le invocazioni dello stesso hook all'interno di una singola distribuzione. I dati non vengono trasferiti tra diversi hook all'interno della stessa distribuzione o lo stesso hook in diverse distribuzioni.

Configurazione del timeout

È possibile configurare un timeout per gli hook Lambda utilizzando timeoutConfiguration. Se la funzione Lambda non restituisce 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

È possibile 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 implementazioni lineari e canarie, gli hook Lambda sono configurati in PRODUCTION_TRAFFIC_SHIFT o PRE_PRODUCTION_TRAFFIC_SHIFT vengono invocati ad ogni passaggio del traffico.

Per ulteriori informazioni sulle categorie delle fasi del ciclo di vita, consulta Hook del ciclo di vita per le implementazioni di servizi Amazon ECS.

Payload del ciclo di vita

Struttura comune del payload

Quando Amazon ECS richiama la funzione Lambda di lifecycle hook, il payload dell'evento contiene i seguenti campi di primo livello:

  • executionId - L'identificatore univoco per l'esecuzione di questa hook.

  • lifecycleStage - La fase attuale del ciclo di vita (ad esempio, PRODUCTION_TRAFFIC_SHIFT).

  • resourceArn - L'ARN della risorsa associata alla distribuzione.

  • executionDetails - Un oggetto contenente le informazioni specifiche sulla 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

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 del servizio blu (1920498462936580504) è la revisione di produzione esistente.

PRE_SCALE_UP

Questa fase avviene prima che Amazon ECS avvii le attività di revisione dei servizi ecologici. La revisione del servizio verde non è iniziata e non viene indirizzato alcun traffico verso di essa.

{ "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 integre. 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 alla revisione del servizio verde. Il 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

Questa fase si verifica dopo che Amazon ECS ha completato lo spostamento del traffico di test. La revisione del servizio verde sta gestendo 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

Questa fase si verifica prima che Amazon ECS trasferisca il traffico di produzione alla revisione del servizio ecologico. Per le distribuzioni 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

Questa fase si verifica quando Amazon ECS sposta il traffico di produzione verso la revisione del servizio ecologico. Il 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

Questa fase si verifica dopo che Amazon ECS ha completato il trasferimento del traffico di produzione. La revisione del servizio ecologico 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 blocca durante il rollback

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

Il targetServiceRevisionArn rimane l'ARN di revisione verde perché è ancora l'obiettivo della distribuzione originale, anche se il traffico si sta allontanando da esso.

L'esempio seguente mostra una PRODUCTION_TRAFFIC_SHIFT payload durante un rollback. Si noti che la revisione blu (1920498462936580504) riceve ora 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 targetServiceRevisionArn (versione verde) ha un peso dello 0% e l'altra revisione ha il 100%, la distribuzione è in fase di rollback.