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

Nella programmazione, l'idempotenza si riferisce alla capacità di un'applicazione o di un componente di identificare eventi ripetuti e prevenire dati duplicati, incoerenti o persi. Per rendere idempotente una funzione AWS Lambda è necessario progettare la logica delle funzioni per trattare correttamente gli eventi duplicati.

Una logica delle funzioni idempotente può aiutare a ridurre i seguenti problemi:

  • Chiamate API non necessarie
  • Tempo di elaborazione del codice
  • Incoerenza dei dati
  • Throttle
  • Latenza

Risoluzione

Per rendere la funzione idempotente, il codice della funzione deve convalidare correttamente gli eventi di input e identificare se tali eventi sono stati elaborati in precedenza. La funzione dell'applicazione determina il modo migliore per scrivere il codice.

Usa l'esempio di logica delle funzioni e le best practice presentati di seguito come guida.

Esempio di logica della funzione Lambda idempotente

**Nota:**il seguente esempio di logica della funzione Lambda si applica alla maggior parte dei casi d'uso.

  1. Estrai il valore di un attributo univoco dell'evento di input. (ad esempio, un ID di transazione o acquisto).

  2. Controlla se il valore dell'attributo esiste in un database di controllo. (ad esempio, una tabella Amazon DynamoDB).

3.A seconda dei risultati, completa il passaggio seguente:
Se esiste un valore univoco, termina l'azione senza generare un errore.

-oppure-

Se non esiste un valore univoco, procedi con l'azione originariamente progettata.

**Nota:**l'aggiunta di servizi AWS alla tua architettura potrebbe comportare costi aggiuntivi. Per ulteriori informazioni, consulta i Prezzi di Amazon DynamoDB e i Prezzi AWS.

  1. Se il valore univoco non esiste al termine del lavoro della funzione, includi il record nel database di controllo.

  2. Termina l'azione.
    **Nota:**se utilizzi runtime Java o Python per la funzione, consulta i moduli di idempotenza Python e Java nella pagina GitHub AWS Lambda Powertools.

Best practice per l'idempotenza della funzione Lambda

  • Pianifica le funzioni di idempotenza prima di sviluppare la tua applicazione.
  • Quando il codice Lambda elabora un evento duplicato, assicurati che termini senza generare un errore.
    **Nota:**la generazione di errori può causare ulteriori tentativi da parte di Lambda o di un altro servizio che richiama la funzione.
  • Modifica l’impostazione Lambda function timeout setting, in modo che l'intero runtime venga gestito correttamente.
    **Nota:**l'utilizzo di un servizio separato per rendere persistenti i dati e controllare gli eventi duplicati potrebbe richiedere chiamate API agli endpoint HTTPS. Le chiamate API agli endpoint HTTPS potrebbero quindi richiedere un tempo di esecuzione 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 delle funzioni idempotente per aiutare a prevenire potenziali effetti collaterali come timeout, latenza eccessiva o rallentamenti.
  • Archivia i dati delle sessioni utilizzando un servizio facilmente scalabile e che offre un throughput elevato, come DynamoDB.

**Nota:**quando si effettuano chiamate API ad Amazon Elastic Compute Cloud (Amazon EC2), il servizio offre il parametro clientToken. Questo parametro assicura che una richiesta API mutante completi correttamente il suo flusso di lavoro solo una volta, anche se si avviano più tentativi con lo stesso clientToken.


Informazioni correlate

Lambda programming model

Create a Lambda function with the console

Making retries safe with idempotent APIs

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa