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à.
Le migliori pratiche per le funzioni durevoli Lambda
Le funzioni durevoli utilizzano un modello di esecuzione basato sulla riproduzione che richiede modelli diversi rispetto alle tradizionali funzioni Lambda. Segui queste best practice per creare flussi di lavoro affidabili e convenienti.
Scrivi codice deterministico
Durante la riproduzione, la funzione viene eseguita dall'inizio e deve seguire lo stesso percorso di esecuzione dell'esecuzione originale. Il codice al di fuori delle operazioni durevoli deve essere deterministico e produrre gli stessi risultati con gli stessi input.
Suddividi le operazioni non deterministiche in fasi:
Generazione di numeri casuali e UUIDs
Ora o timestamp correnti
Chiamate API esterne e interrogazioni al database
Operazioni sul file system
Importante
Non utilizzare variabili o chiusure globali per condividere lo stato tra i passaggi. Passa i dati attraverso i valori restituiti. Lo stato globale si interrompe durante la riproduzione perché i passaggi restituiscono risultati memorizzati nella cache ma le variabili globali vengono reimpostate.
Evita le mutazioni di chiusura: le variabili catturate nelle chiusure possono perdere mutazioni durante la riproduzione. I passaggi restituiscono risultati memorizzati nella cache, ma gli aggiornamenti delle variabili al di fuori del passaggio non vengono riprodotti.
Progettato per l'idempotenza
Le operazioni possono essere eseguite più volte a causa di nuovi tentativi o ripetizioni. Le operazioni non idempotenti causano effetti collaterali duplicati, come addebitare due volte i clienti o inviare più e-mail.
Usa token di idempotenza: genera token all'interno dei passaggi e includili nelle chiamate API esterne per evitare operazioni duplicate.
Usa la at-most-once semantica: per operazioni critiche che non devono mai essere duplicate (transazioni finanziarie, detrazioni di inventario), configura la modalità di esecuzione. at-most-once
Idempotenza del database: utilizza check-before-write modelli, aggiornamenti condizionali o operazioni di alterazione per evitare la duplicazione dei record.
Gestisci lo stato in modo efficiente
Ogni checkpoint salva lo stato nell'archiviazione persistente. Gli oggetti a stato di grandi dimensioni aumentano i costi, rallentano il checkpoint e influiscono sulle prestazioni. Archivia solo i dati essenziali di coordinamento del flusso di lavoro.
Mantieni lo stato minimo:
Archivio IDs e riferimenti, non oggetti completi
Recupera dati dettagliati in pochi passaggi, se necessario
Usa Amazon S3 o DynamoDB per dati di grandi dimensioni, trasferisci i riferimenti nello stato
Evita di far passare carichi utili di grandi dimensioni tra i passaggi
Progetta passaggi efficaci
I gradini sono l'unità di lavoro fondamentale nelle funzioni durevoli. I passaggi ben progettati semplificano la comprensione, il debug e la manutenzione dei flussi di lavoro.
Principi di progettazione Step:
Usa nomi descrittivi, ad esempio
validate-orderinvece distep1semplificare la comprensione di log ed erroriMantieni i nomi statici: non utilizzare nomi dinamici con timestamp o valori casuali. I nomi delle fasi devono essere deterministici per la riproduzione
Equilibra la granularità: suddividi le operazioni complesse in fasi mirate, ma evita passaggi troppo piccoli che aumentano il sovraccarico dei checkpoint
Operazioni relative al gruppo: le operazioni che dovrebbero avere successo o fallire rientrano nella stessa fase
Usa le operazioni di attesa in modo efficiente
Le operazioni di attesa sospendono l'esecuzione senza consumare risorse o incorrere in costi. Usali invece di mantenere Lambda in funzione.
Attese basate sul tempo: utilizzale context.wait() per i ritardi anziché o. setTimeout sleep
Callback esterni: da utilizzare in attesa di context.waitForCallback() sistemi esterni. Imposta sempre dei timeout per evitare attese indefinite.
Sondaggi: utilizza context.waitForCondition() il backoff esponenziale per interrogare i servizi esterni senza sovraccaricarli.
Ulteriori considerazioni
Gestione degli errori: riprova gli errori temporanei come i timeout di rete e i limiti di velocità. Non riprovare con errori permanenti come errori di input o di autenticazione non validi. Configura le strategie di riprova con un numero massimo di tentativi e tassi di backoff appropriati. Per esempi dettagliati, consulta Gestione degli errori e nuovi tentativi.
Prestazioni: riduci al minimo le dimensioni del checkpoint memorizzando i riferimenti anziché i payload completi. Usa context.parallel() ed context.map() esegui operazioni indipendenti contemporaneamente. Operazioni relative ai batch per ridurre il sovraccarico dei checkpoint.
Controllo delle versioni: richiama funzioni con numeri di versione o alias per associare le esecuzioni a versioni di codice specifiche. Assicurati che le nuove versioni del codice siano in grado di gestire lo stato delle versioni precedenti. Non rinominate i passaggi né modificate il loro comportamento in modo da interrompere la riproduzione.
Serializzazione: utilizza tipi compatibili con JSON per gli input e i risultati delle operazioni. Converti le date in stringhe ISO e gli oggetti personalizzati in oggetti semplici prima di passarli a operazioni durevoli.
Monitoraggio: abilita la registrazione strutturata con nomi di esecuzione IDs e passaggi. Imposta CloudWatch allarmi per i tassi di errore e la durata dell'esecuzione. Usa il tracciamento per identificare i punti deboli. Per una guida dettagliata, consulta Monitoraggio e debug.
Test: verifica il percorso felice, la gestione degli errori e il comportamento di riproduzione. Prova gli scenari di timeout per callback e attese. Utilizza i test locali per ridurre i tempi di iterazione. Per una guida dettagliata, consulta Testare le funzioni durevoli.
Errori comuni da evitare: non context.step() annidate le chiamate, ma utilizzate invece contesti secondari. Suddividi le operazioni non deterministiche in fasi. Imposta sempre i timeout per i callback. Bilancia la granularità dei passaggi con il sovraccarico dei checkpoint. Memorizza i riferimenti anziché gli oggetti di grandi dimensioni nello stato.
Risorse aggiuntive
Documentazione Python SDK
: riferimento completo alle API, modelli di test ed esempi avanzati TypeScript Documentazione SDK
: riferimento completo alle API, modelli di test ed esempi avanzati