Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

Come faccio a rendere idempotente la mia funzione Lambda?

3 minuti di lettura
0

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:

  1. Estrai il valore di un attributo univoco dell'evento di input, ad esempio l'ID di una transazione o un acquisto.
  2. Usa un'espressione condizionale per inserire la chiave idempotente nella tua tabella Amazon DynamoDB.
  3. 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.
  4. Aggiorna lo stato del record chiave su COMPLETE.
  5. 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

Create a Lambda function with the console

Making retries safe with idempotent APIs

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 mesi fa