Miglioramento delle prestazioni di avvio con Lambda SnapStart.
Lambda SnapStart può fornire prestazioni di avvio in meno di un secondo, in genere senza modifiche al codice della funzione. SnapStart semplifica la creazione di applicazioni altamente reattive e scalabili senza il provisioning di risorse o l'implementazione di complesse ottimizzazioni delle prestazioni.
Il fattore che contribuisce maggiormente alla latenza di avvio (spesso definita tempo di avvio a freddo) è il tempo impiegato da Lambda per inizializzare la funzione, che include il caricamento del codice della funzione, l'avvio del runtime e l'inizializzazione del codice della funzione. Con SnapStart, Lambda inizializza la funzione quando si pubblica la sua versione. Lambda utilizza lo snapshot di una microVM Firecracker
Per garantire la resilienza, Lambda conserva diverse copie di ogni snapshot. Lambda aggiorna automaticamente gli snapshot e le relative copie con gli aggiornamenti di runtime e sicurezza più recenti. Quando richiami la versione della funzione per la prima volta e man mano che le chiamate aumentano, Lambda riprende i nuovi ambienti di esecuzione dallo snapshot memorizzato nella cache invece di inizializzarli da zero, migliorando così la latenza di avvio.
Importante
Se le applicazioni dipendono dall'univocità dello stato, è necessario valutare il codice della funzione e verificare che sia resiliente alle operazioni di snapshot. Per ulteriori informazioni, consulta Gestione dell'unicità con Lambda SnapStart.
Argomenti
Quando usare SnapStart
Lambda SnapStart è progettato per affrontare la variabilità della latenza introdotta dal codice di inizializzazione monouso, come il caricamento delle dipendenze o dei framework dei moduli. Il completamento di queste operazioni a volte può richiedere diversi secondi durante l'invocazione iniziale. Utilizza SnapStart per ridurre questa latenza da alcuni secondi a meno di un secondo, in scenari ottimali. SnapStart funziona al meglio se utilizzato con richiami di funzioni su larga scala. Le funzioni richiamate di rado potrebbero non presentare gli stessi miglioramenti delle prestazioni.
SnapStart è particolarmente utile per due tipi principali di applicazioni:
-
API e flussi utente sensibili alla latenza: le funzioni che fanno parte degli endpoint API critici o dei flussi rivolti agli utenti possono trarre vantaggio dalla latenza ridotta e dai tempi di risposta migliorati di SnapStart.
-
Flussi di lavoro di elaborazione dati sensibili alla latenza: i flussi di lavoro di elaborazione dati con vincoli temporali che utilizzano le funzioni Lambda possono ottenere un throughput migliore riducendo la latenza di inizializzazione delle funzioni anomale.
La simultaneità fornita mantiene le funzioni inizializzate e pronte a rispondere entro i 100 millisecondi. Utilizza la simultaneità fornita se l'applicazione ha requisiti di latenza rigorosi per l'avvio a freddo. Non possono essere soddisfatti in modo adeguato.
Funzionalità e limitazioni supportate
SnapStart è disponibile per i seguenti runtime gestiti da Lambda:
-
Java 11 e versioni successive
-
Python 3.12 e versioni successive
-
.NET 8 e versioni successive. Se utilizzi il framework Lambda Annotations per .NET, esegui l'upgrade alla versione 1.6.0 o successiva di Amazon.Lambda.Annotations
per garantire la compatibilità con SnapStart.
Altri runtime gestiti (come nodejs22.x e ruby3.4), Runtime solo per il sistema operativo e le immagini di container non sono supportati.
SnapStart non supporta la simultaneità fornita, Amazon Elastic File System (Amazon EFS) o l'archiviazione temporanea superiore a 512 MB.
Nota
Puoi utilizzare SnapStart solo sulle versioni delle funzioni pubblicate e sugli alias che puntano alle versioni. Non è possibile utilizzare SnapStart sulla versione di una funzione non pubblicata ($LATEST).
Regioni supportate
Lambda SnapStart è disponibile in tutte le regioni commerciali tranne Asia Pacifico (Nuova Zelanda) e Asia Pacifico (Taipei).
Considerazioni sulla compatibilità
Con SnapStart, Lambda utilizza un singolo snapshot come stato iniziale per più ambienti di esecuzione. Se la funzione utilizza uno dei seguenti elementi durante la fase di inizializzazione, prima di utilizzare SnapStart potrebbe essere necessario apportare alcune modifiche:
- Unicità
-
Se il codice di inizializzazione genera contenuti unici inclusi nello snapshot, il contenuto potrebbe non essere più unico quando viene riutilizzato in più ambienti di esecuzione. Per mantenere l'unicità quando si utilizza SnapStart, è necessario generare contenuti univoci dopo l'inizializzazione. Ciò include ID univoci, segreti univoci ed entropia utilizzata per generare pseudocasualità. Per informazioni su come ripristinare l'unicità, consulta Gestione dell'unicità con Lambda SnapStart.
- Connessioni di rete
-
Lo stato delle connessioni che la funzione stabilisce durante la fase di inizializzazione non è garantito quando Lambda riprende la funzione da uno snapshot. Convalida lo stato delle connessioni di rete e ristabiliscile se necessario. Nella maggior parte dei casi, le connessioni di rete stabilite da un SDK AWS riprendono automaticamente. Per altre connessioni, consulta le best practice.
- Dati temporanei
-
Durante la fase di inizializzazione, alcune funzioni scaricano o inizializzano dati effimeri, come credenziali temporanee o timestamp memorizzati nella cache. Aggiorna i dati effimeri nel gestore delle funzioni prima di utilizzarli, anche se non usi SnapStart.
Prezzi di SnapStart
Nota
Per i runtime gestiti da Java, non sono previsti costi aggiuntivi per l'utilizzo di SnapStart. L'addebito viene effettuato in base al numero di richieste per le funzioni, al tempo impiegato dal codice per l'esecuzione e alla memoria configurata per la funzione.
Il costo dell'utilizzo di SnapStart include quanto segue:
-
Memorizzazione nella cache: per ogni versione della funzione pubblicata con SnapStart abilitato, si pagano i costi della memorizzazione nella cache e della manutenzione dello snapshot. Il prezzo dipende dalla quantità di memoria allocata alla funzione. L'addebito sarà per un minimo di 3 ore. L'addebito continuerà a essere effettuato finché la funzione rimarrà attiva. Utilizza l'azione API ListVersionsByFunction per identificare le versioni delle funzioni, quindi utilizza DeleteFunction per eliminare le versioni non utilizzate. Per eliminare automaticamente le versioni delle funzioni non utilizzate, consulta il modello Pulizia della versione Lambda
su Serverless Land. -
Ripristino: ogni volta che un'istanza di funzione viene ripristinata da uno snapshot, si paga una tariffa di ripristino. Il prezzo dipende dalla quantità di memoria allocata alla funzione.
Come per tutte le funzioni Lambda, i costi di durata si applicano al codice eseguito nell'handler delle funzioni. Per le funzioni SnapStart, i costi di durata si applicano anche al codice di inizializzazione dichiarato all'esterno dell'handler, al tempo necessario per il caricamento del runtime e a qualsiasi codice eseguito in un hook di runtime. La durata viene calcolata dal momento in cui il codice inizia a funzionare fino a quando ritorna o termina in altro modo, arrotondato al valore di 1 ms più vicino. Lambda conserva copie memorizzate nella cache dello snapshot per garantire la resilienza e applica automaticamente gli aggiornamenti software, come gli upgrade di runtime e le patch di sicurezza. Gli addebiti si applicano ogni volta che Lambda esegue nuovamente il codice di inizializzazione per applicare gli aggiornamenti software.
Per ulteriori informazioni sui costi di utilizzo di SnapStart, consulta Prezzi di AWS Lambda