Best practice per l’utilizzo dei flussi DynamoDB con Lambda
Una funzione AWS Lambda viene eseguita all'interno di un container, un ambiente di esecuzione isolato da altre funzioni. Quando esegui una funzione per la prima volta, AWS Lambda crea un nuovo container e inizia a eseguire il codice della funzione.
Una funzione Lambda dispone di un gestore che viene eseguito a ogni richiamo. Il gestore contiene la logica di business principale della funzione. Ad esempio, la funzione Lambda illustrata in Fase 4: creazione e test di una funzione Lambda dispone di un gestore in grado di elaborare record in un flusso DynamoDB.
È inoltre possibile fornire un codice di inizializzazione che viene eseguito una sola volta, dopo la creazione del container, ma prima che AWS Lambda esegue il gestore per la prima volta. La funzione Lambda illustrata in Fase 4: creazione e test di una funzione Lambda dispone di un codice che importa SDK for JavaScript in Node.js e crea un client per Amazon SNS. Questi oggetti dovrebbero essere definiti una sola volta, esternamente al gestore.
Dopo l'esecuzione della funzione, AWS Lambda potrebbe decidere di utilizzare nuovamente il container per successivi richiami della funzione. In questo caso, il gestore della funzione potrebbe essere in grado di utilizzare nuovamente le risorse definite nel codice di inizializzazione. (Non puoi controllare per quanto tempo AWS Lambda conserva il container, né se questo verrà nuovamente utilizzato o meno).
Per i trigger di DynamoDB che utilizzano AWS Lambda, consigliamo quanto segue:
-
I client del servizio AWS dovrebbero essere istanziati nel codice di inizializzazione, non nel gestore. Questo permette ad AWS Lambda di utilizzare nuovamente le connessioni esistenti per tutta la durata di vita del container.
-
in generale, non è necessario gestire le connessioni o implementare il pooling delle connessioni esplicitamente, in quanto AWS Lambda lo fa in modo automatico.
Un consumer Lambda per un flusso DynamoDB non garantisce una consegna esatta di una sola volta e può portare a duplicati occasionali. Assicurati che il codice della funzione Lambda sia idempotente per evitare che si verifichino problemi imprevisti dovuti all’elaborazione duplicata.
Per ulteriori informazioni, consulta Best practice per utilizzare le funzioni AWS Lambda nella Guida per gli sviluppatori di AWS Lambda.