Aumentare le funzioni Lambda utilizzando le estensioni Lambda
È possibile utilizzare le estensioni Lambda per potenziare le funzioni Lambda. Ad esempio, utilizza le estensioni Lambda per integrare le funzioni con i tuoi strumenti di monitoraggio, osservabilità, sicurezza e governance preferiti. È possibile scegliere tra un ampio set di strumenti forniti dai Partner AWS Lambda
Lambda supporta estensioni interne ed esterne. Un'estensione esterna viene eseguita come processo indipendente nell'ambiente di esecuzione e continua a funzionare dopo che l'invocazione della funzione è completamente elaborata. Poiché le estensioni vengono eseguite come processi separati, è possibile scriverle in un linguaggio diverso da quello della funzione. Tutti i Runtime Lambda supportano le estensioni.
Un'estensione interna viene eseguita come parte del processo di runtime. La funzione accede alle estensioni interne utilizzando script wrapper o meccanismi in-process come JAVA_TOOL_OPTIONS
. Per ulteriori informazioni, consulta Modifica dell'ambiente di runtime.
È possibile aggiungere estensioni a una funzione utilizzando la console Lambda, AWS CLI (AWS CloudFormation) o l'Infrastructure as Code e strumenti (IaC) di codice quali AWS Command Line Interface, AWS Serverless Application Model (AWS SAM) e Terraform.
Ti viene addebitato il runtime consumato dall'estensione (in incrementi di 1 ms). Non c'è alcun costo per installare le proprie estensioni. Per ulteriori informazioni sui prezzi delle estensioni, consulta la sezione Prezzi AWS Lambda
Per un tutorial sulle estensioni e su come usarle con le funzioni Lambda, consultare il Workshop sulle estensioni di AWS Lambda
Argomenti
Ambiente di esecuzione
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 e fornisce il supporto del ciclo di vita per il runtime e le estensioni della funzione.
Il ciclo di vita dell'ambiente di esecuzione prevede le seguenti fasi:
-
Init
: in questa fase, Lambda crea o sblocca un ambiente di esecuzione con le risorse configurate, scarica il codice per la funzione e tutti i livelli, inizializza le estensioni, inizializza il runtime e quindi esegue il codice di inizializzazione della funzione (il codice al di fuori del gestore principale). La faseInit
si verifica durante la prima invocazione o prima delle invocazioni di funzione se è stata abilitata la concorrenza con provisioning.La fase
Init
è suddivisa in tre sottofasi:Extension init
,Runtime init
eFunction init
. Queste sottofasi assicurano che tutte le estensioni e il runtime completino le loro attività di configurazione prima dell'esecuzione del codice della funzione.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 prima del checkpoint, il codice viene eseguito alla fine della faseInit
. -
Restore
(solo SnapStart): quando si invoca per la prima volta una funzione SnapStart e man mano che la funzione viene aumentata, Lambda riprende i nuovi ambienti di esecuzione dallo snapshot persistente invece di inizializzare la funzione da zero. Se disponi di un hook di runtimeafterRestore()
, il codice viene eseguito alla fine della faseRestore
. Ti sarà addebitata la durata degli hook di runtimeafterRestore()
. Il runtime (JVM) deve essere caricato e gli hook di runtimeafterRestore()
devono essere completati entro il limite di timeout (10 secondi). Altrimenti, otterrai un'eccezione SnapStartTimeoutException. Al termine della faseRestore
, Lambda chiama il gestore della funzione (Invoca fase). -
Invoke
: in questa fase, Lambda invoca il gestore della funzione. Dopo che la funzione è stata completata, Lambda si prepara a gestire un'altra invocazione di funzione. -
Shutdown
: questa fase viene attivata se la funzione Lambda non riceve alcuna invocazione per un certo periodo. Nella faseShutdown
, Lambda chiude il runtime, avvisa le estensioni per farle fermare in modo pulito, e poi rimuove l'ambiente. Lambda invia un eventoShutdown
a ogni estensione; l'evento comunica all'estensione che l'ambiente sta per essere chiuso.
Durante la fase Init
, Lambda estrae i livelli contenenti estensioni nella directory /opt
nell'ambiente di esecuzione. Lambda cerca le estensioni nella directory /opt/extensions/
, interpreta ogni file come un bootstrap eseguibile per avviare l'estensione e avvia tutte le estensioni in parallelo.
Impatto su prestazioni e risorse
Le dimensioni delle estensioni della funzione vengono conteggiate per il limite di dimensioni del pacchetto di distribuzione. Per un archivio di file .zip, la dimensione totale decompressa della funzione e di tutte le estensioni non può superare il limite della dimensione decompressa del pacchetto di distribuzione pari a 250 MB.
Le estensioni possono influire sulle prestazioni della funzione perché condividono risorse funzionali quali CPU, memoria e archiviazione. Ad esempio, se un'estensione esegue operazioni ad alta intensità di calcolo, è possibile che la durata dell'esecuzione della funzione aumenti.
Ogni estensione deve completare la sua inizializzazione prima che Lambda richiami la funzione. Pertanto, un'estensione che consuma tempo di inizializzazione significativo può aumentare la latenza della chiamata di funzione.
Per misurare il tempo aggiuntivo impiegato dall'estensione dopo l'esecuzione della funzione, è possibile utilizzare la PostRuntimeExtensionsDuration
metrica della funzione. Per misurare l'aumento della memoria utilizzata, è possibile utilizzare la metrica MaxMemoryUsed
. Per comprendere l'impatto di un'estensione specifica, è possibile eseguire diverse versioni delle funzioni affiancate.
Autorizzazioni
Le estensioni hanno accesso alle stesse risorse delle funzioni. Poiché le estensioni vengono eseguite nello stesso ambiente della funzione, le autorizzazioni vengono condivise tra la funzione e l'estensione.
Per un archivio di file .zip, è possibile creare un modello AWS CloudFormation per semplificare l'operazione di allegare la stessa configurazione dell'estensione, incluse le autorizzazioni AWS Identity and Access Management (IAM) a più funzioni.