Come faccio a rendere idempotente la mia funzione Lambda?
Voglio rendere il mio codice funzione AWS Lambda idempotente per evitare incongruenze e perdite di dati nella mia applicazione.
Breve descrizione
Per rendere idempotente un funzione AWS Lambda, devi progettare la logica della funzione in modo che gestisca correttamente gli eventi duplicati. Il codice della funzione deve convalidare correttamente gli eventi di input e determinare se gli eventi erano stati elaborati in precedenza. il modo migliore per scrivere il codice dipende dalla funzionalità dell'applicazione.
La logica idempotente delle funzioni può aiutare a ridurre i problemi seguenti:
- Chiamate API non necessarie
- Tempo di elaborazione del codice
- Incoerenza dei dati
- Throttle
- Latenza
Risoluzione
L'esempio di logica di funzione e le best practice presentati di seguito si applicano alla maggior parte dei casi d'uso.
Esempio di logica di funzione Lambda idempotente
Per utilizzare la funzione Lambda idempotente, completa i passaggi seguenti:
- Estrai il valore di un attributo univoco dell'evento di input, ad esempio l'ID di una transazione o un acquisto.
- Usa un'espressione condizionale per inserire la chiave idempotente nella tua tabella Amazon DynamoDB.
- Per gli attributi del record, esegui le azioni seguenti:
Imposta Stato su IN\ _PROGRESS.
Per il timestamp di in_progress_expiry, scegli il timestamp corrente in millisecondi + il numero di millisecondi rimasti prima del timeout dell'esecuzione. Per python, usa context.get\ _remaining\ _time\ _in\ _millis.
**Nota:**Con in\ _progress\ _expiry, la funzione Lambda può riprovare la logica in modo sicuro.
Se PutItem nel passaggio precedente restituisce ConditionalCheckFailedException, la chiave idempotente è in fase di elaborazione.
Per usare l'attributo Time To Live (TTL) di DynamoDB con idempotent_expiry, imposta l'attributo su un momento successivo per il valore. - Aggiorna lo stato del record chiave su COMPLETE.
- Completa l'azione.
Nota: quando aggiungi servizi AWS alla tua architettura, potresti incorrere in costi aggiuntivi. Per ulteriori informazioni, consulta i Prezzi di Amazon DynamoDB e i Prezzi AWS.
Best practice per l'idempotenza delle funzioni Lambda
Applica le procedure consigliate seguenti:
- Pianifica le funzionalità di idempotenza prima di sviluppare l'applicazione.
- Quando il codice Lambda elabora un evento duplicato, assicurati che il processo termini senza errori.
Nota: un processo che termina con un errore può generare nuovi tentativi da parte dei servizi che invocano la funzione. - Configura l’impostazione di timeout della funzione Lambda in modo che l'intero runtime venga elaborato correttamente.
Nota: se utilizzi un servizio separato per rendere persistenti i dati e controllare gli eventi duplicati, potresti dover effettuare chiamate API agli endpoint HTTPS. Le chiamate API agli endpoint HTTPS potrebbero richiedere un runtime superiore ai 3 secondi predefiniti. - Testa e ottimizza la tua funzione il più possibile. Simula uno scenario e un tasso di richieste reali.
Nota: è fondamentale testare e ottimizzare la logica della funzione idempotente per aiutare a prevenire timeout, latenza eccessiva o colli di bottiglia. - Per archiviare i dati delle sessioni, usa un servizio facilmente scalabile e con throughput elevato, come DynamoDB.
Nota: quando effettui chiamate API ad Amazon Elastic Compute Cloud (Amazon EC2), puoi utilizzare il parametro ClientToken. Questo parametro assicura che una richiesta API che muta completi correttamente il suo flusso di lavoro solo una volta, anche se si avviano più tentativi con lo stesso clientToken.
Informazioni correlate
Understand the Lambda programming model
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa