Estensioni Lambda - AWS Lambda

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

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 oppure creare estensioni Lambda personalizzate.

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 tempo di esecuzione 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 informazioni sui prezzi per le estensioni dei partner, consulta i siti Web dei partner. Consulta AWS Lambda partner di estensioni per l'elenco delle estensioni ufficiali dei partner.

Per un tutorial sulle estensioni e su come usarle con le funzioni Lambda, consultare il Workshop sulle estensioni di AWS Lambda.

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 fase Init 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 e Function 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 beforeCheckpoint, il codice viene eseguito alla fine della fase Init.

  • Restore(SnapStart solo): 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 afterRestore() devono essere completati entro il limite di timeout (10 secondi). SnapStartTimeoutExceptionAltrimenti, otterrai un. Al termine della fase Restore, 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 fase Shutdown, Lambda chiude il runtime, avvisa le estensioni per farle fermare in modo pulito, e poi rimuove l'ambiente. Lambda invia un evento Shutdown 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.