Tutorial: uso di AWS Lambda con flussi Amazon DynamoDB
In questo tutorial creerai una funzione Lambda per consumare eventi da un flusso Amazon DynamoDB.
Prerequisiti
Se non hai ancora installato l'AWS Command Line Interface, segui i passaggi indicati in Installazione o aggiornamento della versione più recente della AWS CLI per installarla.
Per eseguire i comandi nel tutorial, sono necessari un terminale a riga di comando o una shell (interprete di comandi). In Linux e macOS, utilizza la shell (interprete di comandi) e il gestore pacchetti preferiti.
Nota
Su Windows, alcuni comandi della CLI Bash utilizzati comunemente con Lambda (ad esempio, zip) non sono supportati dai terminali integrati del sistema operativo. Per ottenere una versione integrata su Windows di Ubuntu e Bash, installa il sottosistema Windows per Linux
Creazione del ruolo di esecuzione
Creare il ruolo di esecuzione che offre l'autorizzazione della funzione per accedere alle risorse AWS.
Per creare un ruolo di esecuzione
-
Apri la pagina Ruoli
nella console IAM. -
Scegliere Crea ruolo.
-
Creare un ruolo con le seguenti proprietà.
-
Trusted entity (Entità attendibile – Lambda.
-
Permissions (Autorizzazioni) – AWSLambdaDynamoDBExecutionRole.
-
Role name (Nome ruolo –
lambda-dynamodb-role.
-
AWSLambdaDynamoDBExecutionRole dispone delle autorizzazioni necessarie alla funzione per leggere gli elementi da DynamoDB e scrivere i registri in CloudWatch Logs.
Creazione della funzione
Crea una funzione Lambda che elabora gli eventi DynamoDB. Il codice scrive alcuni dati degli eventi in ingresso su CloudWatch Logs.
Per creare la funzione
-
Copiare il codice di esempio in un file denominato
example.js. -
Crea un pacchetto di implementazione.
zip function.zip example.js -
Creare una funzione Lambda con il comando
create-function.aws lambda create-function --function-name ProcessDynamoDBRecords \ --zip-file fileb://function.zip --handler example.handler --runtime nodejs22.x \ --role arn:aws:iam::111122223333:role/lambda-dynamodb-role
Test della funzione Lambda
In questo passaggio richiamerai manualmente la funzione Lambda utilizzando il comando CLI invoke AWS Lambda e il seguente evento DynamoDB di esempio. Copia quanto riportato di seguito in un file denominato input.txt.
Esempio input.txt
{ "Records":[ { "eventID":"1", "eventName":"INSERT", "eventVersion":"1.0", "eventSource":"aws:dynamodb", "awsRegion":"us-east-1", "dynamodb":{ "Keys":{ "Id":{ "N":"101" } }, "NewImage":{ "Message":{ "S":"New item!" }, "Id":{ "N":"101" } }, "SequenceNumber":"111", "SizeBytes":26, "StreamViewType":"NEW_AND_OLD_IMAGES" }, "eventSourceARN":"stream-ARN" }, { "eventID":"2", "eventName":"MODIFY", "eventVersion":"1.0", "eventSource":"aws:dynamodb", "awsRegion":"us-east-1", "dynamodb":{ "Keys":{ "Id":{ "N":"101" } }, "NewImage":{ "Message":{ "S":"This item has changed" }, "Id":{ "N":"101" } }, "OldImage":{ "Message":{ "S":"New item!" }, "Id":{ "N":"101" } }, "SequenceNumber":"222", "SizeBytes":59, "StreamViewType":"NEW_AND_OLD_IMAGES" }, "eventSourceARN":"stream-ARN" }, { "eventID":"3", "eventName":"REMOVE", "eventVersion":"1.0", "eventSource":"aws:dynamodb", "awsRegion":"us-east-1", "dynamodb":{ "Keys":{ "Id":{ "N":"101" } }, "OldImage":{ "Message":{ "S":"This item has changed" }, "Id":{ "N":"101" } }, "SequenceNumber":"333", "SizeBytes":38, "StreamViewType":"NEW_AND_OLD_IMAGES" }, "eventSourceARN":"stream-ARN" } ] }
Eseguire il seguente comando invoke.
aws lambda invoke --function-name ProcessDynamoDBRecords \ --cli-binary-format raw-in-base64-out \ --payload file://input.txt outputfile.txt
L'opzione cli-binary-format è necessaria se si utilizza la versione 2 della AWS CLI. Per rendere questa impostazione come predefinita, esegui aws configure set cli-binary-format raw-in-base64-out. Per ulteriori informazioni, consulta la pagina AWS CLI supported global command line options nella Guida per l'utente di AWS Command Line Interface versione 2.
La funzione restituisce la stringa message nel corpo della risposta.
Verificare l'output nel file outputfile.txt.
Creazione di una tabella DynamoDB con un flusso abilitato
Crea una tabella Amazon DynamoDB con un flusso abilitato.
Per creare una tabella DynamoDB
-
Aprire la console DynamoDB
. -
Scegliere Create table (Crea tabella).
-
Creare una tabella con le impostazioni seguenti.
-
Table name (Nome tabella –
lambda-dynamodb-stream -
Primary key (Chiave primaria) –
id(string)
-
-
Scegliere Create (Crea).
Per abilitare i flussi
-
Aprire la console DynamoDB
. -
Scegliere Tables (Tabelle).
-
Scegliere la tabella lambda-dynamodb-stream.
-
In Exports and streams (Esportazioni e flussi), scegliere DynamDB stream details (Dettagli del flusso di Dynamo DB).
-
Scegliere Turn On (Attiva).
-
Per Tipo di visualizzazione, scegli Solo attributi chiave.
-
Scegli Attiva il flusso.
Prendi nota dell'ARN del flusso. Questa operazione è necessaria nella fase successiva quando si associa il flusso alla funzione Lambda. Per ulteriori informazioni sull'attivazione dei flussi, consultare Acquisizione dell'attività sulla tabella tramite DynamoDB Streams.
Aggiungi un'origine eventi in AWS Lambda
Creare una mappatura dell'origine eventi in AWS Lambda. Questa mappatura dell'origine eventi associa il flusso DynamoDB alla funzione Lambda. Una volta creata questa mappatura delle origini eventi, AWS Lambda inizia a eseguire il polling del flusso.
Eseguire il seguente comando AWS CLI di create-event-source-mapping. Dopo l'esecuzione del comando, annotare l'UUID. Questo UUID è necessario per fare riferimento alla mappatura delle origini eventi nei comandi, ad esempio quando si elimina tale mappatura.
aws lambda create-event-source-mapping --function-name ProcessDynamoDBRecords \ --batch-size 100 --starting-position LATEST --event-sourceDynamoDB-stream-arn
Questa procedura crea una mappatura tra il flusso DynamoDB specificato e la funzione Lambda. È possibile associare un flusso DynamoDB a più funzioni Lambda e associare la stessa funzione Lambda a più flussi. Tuttavia, le funzioni Lambda condivideranno il throughput di lettura per il flusso che condividono.
Mediante l'esecuzione del comando riportato di seguito è possibile ottenere l'elenco di mappature delle origini eventi.
aws lambda list-event-source-mappings
L'elenco restituisce tutte le mappature delle origini eventi create e per ciascuna mappatura mostra, tra l'altro, il valore LastProcessingResult. Questo campo è utilizzato per fornire un messaggio informativo nel caso in cui vengano riscontrati problemi. Valori come No records processed (indica che AWS Lambda non ha avviato il polling o che non ci sono record nel flusso) e OK (indica che AWS Lambda ha letto correttamente i record dal flusso e ha richiamato la funzione Lambda) indicano che non sono stati riscontrati problemi. Se vengono riscontrati problemi, si riceve un messaggio di errore.
Se disponi di una grande quantità di mappature delle origini eventi, utilizza il parametro funzione-nome per restringere i risultati.
aws lambda list-event-source-mappings --function-name ProcessDynamoDBRecords
Eseguire il test della configurazione
Eseguire il test dell'esperienza end-to-end. Quando vengono eseguiti gli aggiornamenti delle tabelle, DynamoDB scrive record di eventi nel flusso. Quando AWS Lambda esegue il polling del flusso, rileva nuovi record nel flusso e richiama la funzione Lambda per proprio conto passando eventi alla funzione.
-
Nella console di DynamoDB, aggiungi, aggiorna ed elimina elementi dalla tabella. DynamoDB scrive record di queste operazioni nel flusso.
-
AWS Lambda esegue il polling del flusso e, quando rileva aggiornamenti al flusso, richiama la funzione Lambda passando i dati evento trovati nel flusso.
-
La funzione viene eseguita e crea dei log in Amazon CloudWatch. È possibile verificare i log riportati nella console Amazon CloudWatch.
Passaggi successivi
Questo tutorial ti ha mostrato le basi dell'elaborazione degli eventi di flusso DynamoDB con Lambda. Per i carichi di lavoro di produzione, prendi in considerazione l'implementazione della logica di risposta parziale in batch per gestire gli errori dei singoli record in modo più efficiente. L'utilità di elaborazione batch
Pulizia delle risorse
Ora è possibile eliminare le risorse create per questo tutorial, a meno che non si voglia conservarle. Eliminando le risorse AWS che non si utilizzano più, è possibile evitare addebiti superflui sul proprio account Account AWS.
Per eliminare la funzione Lambda
-
Aprire la pagina Functions (Funzioni)
della console Lambda. -
Selezionare la funzione creata.
-
Scegliere Operazioni, Elimina.
-
Inserisci
confirmnel campo di immissione del testo, quindi scegli Elimina.
Come eliminare il ruolo di esecuzione
-
Aprire la pagina Ruoli
della console IAM. -
Selezionare il ruolo di esecuzione creato.
-
Scegliere Elimina.
-
Inserisci il nome del ruolo nel campo di immissione testo e seleziona Delete (Elimina).
Per eliminare la tabella DynamoDB
-
Aprire la pagina Tables (Tabelle)
della console DynamoDB. -
Selezionare la tabella creata.
-
Scegliere Delete (Elimina).
-
Immettere
deletenella casella di testo. -
Seleziona Delete Table (Elimina tabella).