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 l'hook, la funzione deve restituire un oggetto JSON contenente un campo. hookStatus Puoi facoltativamente includere la possibilità di controllare i tempi dei ritentativi e hookDetails di callBackDelay passare i dati tra le invocazioni. Se la tua funzione non restituisce un valore valido o se falliscehookStatus, Amazon ECS ripristina la distribuzione.

Valori HookStatus

I valori validi hookStatus sono i seguenti:

  • 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 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 i dati alla tua funzione lifecycle hook. È possibile compilare i dati in due modi: hookDetails

  • Alla creazione o all'aggiornamento del servizio: definisci hookDetails la configurazione del gancio 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 trasmettendo una configurazione specifica del servizio.

  • In fase di esecuzione tramite risposte IN_PROGRESS: restituisce insieme allo stato dell'hook. hookDetails IN_PROGRESS Amazon ECS ritrasmette questi dati alla tua funzione alla chiamata successiva. Utilizzalo 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 ritornaIN_PROGRESS, puoi anche hookDetails includerla 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 il payload «in the event» insieme a: hookDetails 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 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 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 viene restituita SUCCEEDED o FAILED prima della scadenza del timeout, Amazon ECS intraprende l'azione di timeout configurata.

Campo Description
timeoutConfiguration.timeoutInMinutes Quanto 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 le implementazioni lineari e canarie, gli hook Lambda configurati PRODUCTION_TRAFFIC_SHIFT o PRE_PRODUCTION_TRAFFIC_SHIFT vengono richiamati in ogni fase di spostamento 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 verde del servizio (9313423515462893900) è la nuova revisione in fase di distribuzione 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 del servizio verde. 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. testTrafficWeightsMostra che la revisione verde riceve il 100% del traffico di test 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. productionTrafficWeightsMostra che la revisione verde 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 una fase del ciclo di vita dedicata. ROLLBACK Quando si verifica un rollback, Amazon ECS richiama nuovamente gli hook registrati TEST_TRAFFIC_SHIFT nelle fasi PRODUCTION_TRAFFIC_SHIFT e (le fasi di richiamo ricorrenti). Durante un rollback, il payload productionTrafficWeights in entrata mostra che il traffico torna alla versione blu.

L'ARN di revisione verde targetServiceRevisionArn rimane l'ARN perché è ancora l'obiettivo della distribuzione 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, seleziona. productionTrafficWeights Se la targetServiceRevisionArn (revisione verde) ha un peso dello 0% e l'altra revisione ha il 100%, la distribuzione viene annullata.