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à.
Comprendi il ciclo di vita dell'ambiente di esecuzione Lambda
Lambda richiama la funzione in un ambiente di esecuzione, che fornisce un ambiente di runtime sicuro e isolato. L'ambiente di esecuzione gestisce le risorse necessarie per eseguire la funzione. L'ambiente di esecuzione fornisce inoltre il supporto del ciclo di vita per il runtime della funzione e per tutte le estensioni esterne associate alla funzione.
Il runtime della funzione comunica con Lambda utilizzando il Runtime. API Le estensioni comunicano con Lambda utilizzando le estensioni. API Le estensioni possono anche ricevere messaggi di registro e altra telemetria dalla funzione utilizzando la telemetria. API
Quando si crea la funzione Lambda, si specificano le informazioni di configurazione, ad esempio la quantità di memoria disponibile e il tempo massimo di esecuzione consentito per la funzione. Lambda utilizza queste informazioni per impostare l'ambiente di esecuzione.
Il runtime della funzione e ogni estensione esterna sono processi eseguiti all'interno dell'ambiente di esecuzione. Le autorizzazioni, le risorse, le credenziali e le variabili di ambiente sono condivise tra la funzione e le estensioni.
Argomenti
Ciclo di vita dell'ambiente di esecuzione Lambda
Ogni fase inizia con un evento che Lambda invia al runtime e a tutte le estensioni registrate. Il runtime e ogni estensione indicano il completamento inviando una richiesta. Next
API Lambda congela l'ambiente di esecuzione quando il runtime e ogni estensione sono stati completati e non ci sono eventi in sospeso.
Argomenti
Fase di init
Nella fase Init
, Lambda esegue tre incarichi:
-
Avvia tutte le estensioni (
Extension init
) -
Esegue il bootstrap del runtime (
Runtime init
) -
Esegue il codice statico della funzione (
Function init
) -
Esegui qualsiasi hook beforeCheckpoint di runtime (solo SnapStart Lambda)
La Init
fase termina quando il runtime e tutte le estensioni segnalano di essere pronte inviando una Next
API richiesta. La fase Init
è limitata a 10 secondi. Se tutte e tre le attività non vengono completate entro 10 secondi, Lambda ritenta la fase Init
al momento della prima chiamata di funzione con timeout della funzione configurata.
Quando Lambda SnapStart è attivato, la fase Init
si verifica quando si pubblica una versione della funzione. Lambda salva uno snapshot della memoria e dello stato del disco dell'ambiente di esecuzione inizializzato, mantiene lo snapshot crittografato e lo memorizza nella cache per l'accesso a bassa latenza. Se disponi di un hook di runtime beforeCheckpoint
, il codice viene eseguito alla fine della fase Init
.
Nota
Il timeout di 10 secondi non si applica alle funzioni che utilizzano la concorrenza fornita o. SnapStart Per la concorrenza e SnapStart le funzioni assegnate, il codice di inizializzazione può essere eseguito per un massimo di 15 minuti. Il limite di tempo è 130 secondi o il timeout della funzione configurato (massimo 900 secondi), a seconda di quale dei due valori sia più elevato.
Quando utilizzi la simultaneità con provisioning, Lambda inizializza l'ambiente di esecuzione quando configuri le impostazioni del PC per una funzione. Lambda, inoltre, garantisce che gli ambienti di esecuzione inizializzati siano sempre disponibili prima delle invocazioni. Potrebbero verificarsi lacune tra l’invocazione della funzione e le fasi di inizializzazione. A seconda del runtime della funzione e della configurazione della memoria, può anche verificarsi una latenza delle variabili nella prima invocazione in un ambiente di esecuzione inizializzato.
Per le funzioni che utilizzano la simultaneità on demand, Lambda può inizializzare occasionalmente gli ambienti di esecuzione prima delle richieste di invocazione. Quando ciò si verifica, puoi riscontrare una lacuna temporale tra le fasi di inizializzazione e invocazione della funzione. È preferibile non acquisire dipendenza da questo comportamento.
Errori durante la fase di inizializzazione
Se una funzione si arresta in modo anomalo o si verifica un timeout durante la fase Init
, Lambda emette informazioni sull'errore nel log INIT_REPORT
.
Esempio — INIT _ REPORT log per il timeout
INIT_REPORT Init Duration: 1236.04 ms Phase: init Status: timeout
Esempio — INIT _ REPORT log per errore di estensione
INIT_REPORT Init Duration: 1236.04 ms Phase: init Status: error Error Type: Extension.Crash
Se la Init
fase ha esito positivo, Lambda non emette il INIT_REPORT
log SnapStart, a meno che non sia attivata. SnapStart le funzioni vengono sempre emesse. INIT_REPORT
Per ulteriori informazioni, consulta Monitoraggio per Lambda SnapStart.
Fase di ripristino (solo Lambda SnapStart )
Quando richiami una SnapStartfunzione per la prima volta e man mano che la funzione aumenta, Lambda riprende i nuovi ambienti di esecuzione dall'istantanea persistente invece di inizializzare la funzione da zero. Se disponi di un hook di runtime afterRestore()
, il codice viene eseguito alla fine della fase Restore
. Ti sarà addebitata la durata degli hook di runtime afterRestore()
. Il runtime (JVM) deve essere caricato e gli hook di runtime devono essere completati entro il afterRestore()
limite di timeout (10 secondi). Altrimenti, otterrai un. SnapStartTimeoutException Al termine della fase Restore
, Lambda chiama il gestore della funzione (Invoca fase).
Errori durante la fase di ripristino
Se la fase Restore
fallisce, Lambda emette informazioni sull'errore nel log RESTORE_REPORT
.
Esempio — RESTORE _ REPORT log per il timeout
RESTORE_REPORT Restore Duration: 1236.04 ms Status: timeout
Esempio — RESTORE _ REPORT log per l'errore dell'hook di runtime
RESTORE_REPORT Restore Duration: 1236.04 ms Status: error Error Type: Runtime.ExitError
Per ulteriori informazioni sul log RESTORE_REPORT
, consulta la pagina Monitoraggio per Lambda SnapStart.
Invoca fase
Quando una funzione Lambda viene richiamata in risposta a una richiesta Next
API, Lambda invia un Invoke
evento al runtime e a ciascuna estensione.
L'impostazione di timeout della funzione limita la durata dell'intera fase Invoke
. Ad esempio, se si imposta il timeout della funzione come 360 secondi, la funzione e tutte le estensioni devono essere completate entro 360 secondi. Si noti che non esiste una fase post-richiamo indipendente. La durata è la somma di tutto il tempo di chiamata (runtime + estensioni) e non viene calcolata fino a quando la funzione e tutte le estensioni non hanno terminato l'esecuzione.
La fase di invoke termina dopo il runtime e tutte le estensioni segnalano che viene eseguita inviando una richiesta. Next
API
Errori durante la fase di richiamo
Se la funzione Lambda si arresta in modo anomalo o si verifica un timeout durante la fase Invoke
, Lambda reimposta l'ambiente di esecuzione. Il diagramma seguente mostra il comportamento dell'ambiente di esecuzione Lambda in caso di errore di invocazione:
Nel diagramma precedente:
-
La prima fase è la fase, che viene eseguita senza INITerrori.
-
La seconda fase è la INVOKEfase, che viene eseguita senza errori.
-
Supponi che in questo passaggio la tua funzione presenti un errore di invocazione (ad esempio un timeout della funzione o un errore di runtime). La terza fase, denominata INVOKEWITHERROR, illustra questo scenario. In questo caso, il servizio Lambda esegue un ripristino. Il reset si comporta come un evento
Shutdown
. Innanzitutto Lambda chiude il runtime, poi invia un eventoShutdown
a ogni estensione esterna registrata. L'evento include il motivo dell'arresto. Se questo ambiente viene utilizzato per una nuova chiamata, Lambda re-inizializza l'estensione e il runtime insieme alla chiamata successiva.Nota che la reimpostazione Lambda non cancella il contenuto della
/tmp
directory prima della fase di inizializzazione successiva. Questo comportamento è coerente con la normale fase di arresto.Nota
AWS sta attualmente implementando modifiche al servizio Lambda. A causa di queste modifiche, potresti notare piccole differenze tra la struttura e il contenuto dei messaggi di registro di sistema e dei segmenti di traccia emessi da diverse funzioni Lambda nel tuo. Account AWS
Se la configurazione del registro di sistema della funzione è impostata su testo semplice, questa modifica influisce sui messaggi di registro acquisiti in CloudWatch Logs quando si verifica un errore di richiamo della funzione. Gli esempi seguenti mostrano gli output dei log in formati vecchi e nuovi.
Queste modifiche verranno implementate nelle prossime settimane e tutte le funzioni, Regioni AWS ad eccezione della Cina e delle GovCloud regioni, passeranno all'utilizzo dei messaggi di registro e dei segmenti di traccia di nuovo formato.
Esempio CloudWatch Registra l'output dei log (arresto anomalo del runtime o dell'estensione): vecchio stile
START RequestId: c3252230-c73d-49f6-8844-968c01d1e2e1 Version: $LATEST RequestId: c3252230-c73d-49f6-8844-968c01d1e2e1 Error: Runtime exited without providing a reason Runtime.ExitError END RequestId: c3252230-c73d-49f6-8844-968c01d1e2e1 REPORT RequestId: c3252230-c73d-49f6-8844-968c01d1e2e1 Duration: 933.59 ms Billed Duration: 934 ms Memory Size: 128 MB Max Memory Used: 9 MB
Esempio CloudWatch Registra l'output del log (timeout della funzione) - vecchio stile
START RequestId: b70435cc-261c-4438-b9b6-efe4c8f04b21 Version: $LATEST 2024-03-04T17:22:38.033Z b70435cc-261c-4438-b9b6-efe4c8f04b21 Task timed out after 3.00 seconds END RequestId: b70435cc-261c-4438-b9b6-efe4c8f04b21 REPORT RequestId: b70435cc-261c-4438-b9b6-efe4c8f04b21 Duration: 3004.92 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 33 MB Init Duration: 111.23 ms
Il nuovo formato per CloudWatch i log include un
status
campo aggiuntivo nella riga.REPORT
In caso di arresto anomalo del runtime o dell'estensione, laREPORT
riga include anche un campoErrorType
.Esempio CloudWatch Registra l'output del log (arresto anomalo del runtime o dell'estensione): nuovo stile
START RequestId: 5b866fb1-7154-4af6-8078-6ef6ca4c2ddd Version: $LATEST END RequestId: 5b866fb1-7154-4af6-8078-6ef6ca4c2ddd REPORT RequestId: 5b866fb1-7154-4af6-8078-6ef6ca4c2ddd Duration: 133.61 ms Billed Duration: 133 ms Memory Size: 128 MB Max Memory Used: 31 MB Init Duration: 80.00 ms Status: error Error Type: Runtime.ExitError
Esempio CloudWatch Registra l'output del log (timeout della funzione) - nuovo stile
START RequestId: 527cb862-4f5e-49a9-9ae4-a7edc90f0fda Version: $LATEST END RequestId: 527cb862-4f5e-49a9-9ae4-a7edc90f0fda REPORT RequestId: 527cb862-4f5e-49a9-9ae4-a7edc90f0fda Duration: 3016.78 ms Billed Duration: 3016 ms Memory Size: 128 MB Max Memory Used: 31 MB Init Duration: 84.00 ms Status: timeout
-
La quarta fase rappresenta la INVOKEfase immediatamente successiva a un errore di invocazione. Qui, Lambda inizializza nuovamente l'ambiente eseguendo nuovamente la fase. INIT Questa operazione è chiamata inizializzazione soppressa. Quando si verificano init soppressi, Lambda non riporta esplicitamente una fase aggiuntiva nei log. INIT CloudWatch Potresti invece notare che la durata nella REPORT riga include una durata aggiuntiva INITpiù la durata. INVOKE Ad esempio, supponiamo di visualizzare i seguenti accessi: CloudWatch
2022-12-20T01:00:00.000-08:00 START RequestId: XXX Version: $LATEST 2022-12-20T01:00:02.500-08:00 END RequestId: XXX 2022-12-20T01:00:02.500-08:00 REPORT RequestId: XXX Duration: 3022.91 ms Billed Duration: 3000 ms Memory Size: 512 MB Max Memory Used: 157 MB
In questo esempio, la differenza tra i timestamp REPORT e i START timestamp è di 2,5 secondi. Questo valore non corrisponde alla durata riportata di 3022,91 millisecondi, perché non tiene conto dell'init extra INIT(iniezione soppressa) che Lambda ha eseguito. In questo esempio, si può dedurre che la fase effettiva ha richiesto 2,5 secondi. INVOKE
Per ulteriori informazioni su questo comportamento, puoi utilizzare il Accesso ai dati di telemetria in tempo reale per le estensioni utilizzando la telemetria API. La telemetria API emette
INIT_START
edINIT_REPORT
eventi con unitàphase=invoke
ogni volta che viene soppressa si verificano tra le fasi di invocazione.INIT_RUNTIME_DONE
-
La quinta fase rappresenta la fase, che viene eseguita senza errori SHUTDOWN.
Fase di arresto
Quando Lambda sta per chiudere il runtime, invia un evento Shutdown
a ciascuna estensione esterna registrata. Le estensioni possono utilizzare questo tempo per le attività di pulizia finali. L'Shutdown
evento è una risposta a una Next
API richiesta.
Durata: L'intera fase Shutdown
è limitata a 2 secondi. Se il runtime o qualsiasi estensione non risponde, Lambda lo termina tramite un segnale (SIGKILL
).
Dopo che la funzione e tutte le estensioni sono state completate, Lambda mantiene l'ambiente di esecuzione per qualche tempo in previsione di un'altra chiamata di funzione. Tuttavia, Lambda termina gli ambienti di esecuzione ogni poche ore per consentire gli aggiornamenti e la manutenzione in fase di esecuzione, anche per le funzioni che vengono richiamate continuamente. Non si deve dare per scontato che l'ambiente di esecuzione persista all'infinito. Per ulteriori informazioni, consulta Implementazione dell'apolidia nelle funzioni.
Quando la funzione viene richiamata di nuovo, Lambda scongela l'ambiente per il riutilizzo. Il riutilizzo dell'ambiente di esecuzione ha le seguenti implicazioni:
-
Gli oggetti dichiarati al di fuori del metodo del gestore della funzione rimangono inizializzati, fornendo ulteriore ottimizzazione quando la funzione viene nuovamente invocata. Ad esempio, se la funzione Lambda stabilisce la connessione a un database, nelle invocazioni successive viene utilizzata la connessione originaria anziché stabilirne un'altra. È consigliabile aggiungere al codice una logica per verificare l'esistenza di una connessione prima che ne venga stabilita una nuova.
-
Ogni ambiente di esecuzione fornisce da 512 MB a 10.240 MB con incrementi di 1 MB di spazio su disco nella directory
/tmp
. Il contenuto della directory rimane quando il contesto di esecuzione è bloccato, fornendo così una cache transitoria utilizzabile per più invocazioni. È possibile aggiungere ulteriore codice per verificare se la cache contiene i dati memorizzati. Per ulteriori informazioni sui limiti delle dimensioni della distribuzione, vedere Quote di Lambda. -
Processi in background o callback che sono stati avviati dalla funzione Lambda e che non sono stati completati quando la funzione è terminata; riprendere se Lambda riutilizza l'ambiente di esecuzione. È necessario accertarsi che tutti i processi in background o le callback nel codice vengano completate prima che il codice sia terminato.
Implementazione dell'apolidia nelle funzioni
Quando scrivi il codice della funzione Lambda, considera l'ambiente di esecuzione come stateless, supponendo che esista solo per una singola chiamata. Lambda termina gli ambienti di esecuzione ogni poche ore per consentire gli aggiornamenti e la manutenzione in fase di esecuzione, anche per le funzioni che vengono richiamate continuamente. Inizializza qualsiasi stato richiesto (ad esempio, il recupero di un carrello della spesa da una tabella Amazon DynamoDB) all'avvio della funzione. Prima di uscire, esegui modifiche permanenti ai dati in archivi durevoli come Amazon Simple Storage Service (Amazon S3), DynamoDB o Amazon Simple Queue Service (Amazon). SQS Evita di fare affidamento su strutture di dati esistenti, file temporanei o stati che comprendono invocazioni, come contatori o aggregati. Ciò garantisce che la funzione gestisca ogni chiamata in modo indipendente.