Flussi DynamoDB con Lambda

Flussi Dynamodb Con Lambda



DynamoDB Streams è una funzionalità di Amazon DynamoDB che ti consente di ottenere un flusso in tempo reale delle modifiche o delle modifiche ai dati apportate alle tue tabelle DynamoDB. Puoi utilizzare questa funzionalità per creare le applicazioni che reagiscono alle modifiche dei dati nelle tabelle DynamoDB, come l'aggiornamento delle cache e l'invio di notifiche.

Naturalmente, puoi anche utilizzare DynamoDB Streams per attivare i processi downstream e le funzioni AWS Lambda. Lambda, per definizione, è un servizio di calcolo serverless che esegue il tuo codice in risposta agli eventi e gestisce automaticamente le risorse di calcolo per te.

Puoi utilizzare Lambda per scrivere il codice in Node.js, Python, Java o C# per elaborare i record del flusso e intraprendere le azioni appropriate. Il vantaggio principale dell'integrazione di DynamoDB Streams con Lambda è che Lambda ti consente di eseguire i servizi supportati o i codici dell'applicazione senza la necessità di amministrazione.







Come utilizzare i flussi AWS DynamoDB con Lambda

Anche se è possibile creare una funzione Lambda che consuma gli eventi e le occorrenze da un flusso DynamoDB, il processo può essere piuttosto impegnativo, in particolare al primo tentativo. I seguenti passaggi aiuteranno:



Passaggio 1: assicurati che il tuo sistema soddisfi i prerequisiti

Questa procedura avrà successo solo se conosci le operazioni e i processi Lambda di base. Pertanto, questo dovrebbe essere il primo modo per garantire che la tua comprensione di Lambda sia superiore alla media.



Il secondo prerequisito che vale la pena considerare è la conferma della versione AWS del tuo sistema. Puoi usare il seguente comando:





aws –versione

Il risultato per il comando fornito dovrebbe essere simile al seguente:

aws-cli/ 2 .x.x Python/ 3 .xx Linux/ 4 .x.x-xxx-std botocore/ 2 .x.x

La risposta di esempio fornita contiene la versione installata dell'AWS CLI ( aws-cli/2.x.x ), la versione Python ( Python/3.x.x ) e il sistema operativo ( Linux/4.x.x-xxx-std ). La parte finale della risposta definisce la versione della libreria Botocore su cui viene eseguita l'AWS CLI ( botocore/2.x.x ).



Pertanto, ti ritroverai con qualcosa del genere:

Passaggio 2: creare un ruolo di esecuzione

Il passaggio successivo consiste nel creare un ruolo di esecuzione in AWS CLI. Un ruolo di esecuzione è un ruolo AWS Identity and Access Management (IAM) assunto da un servizio AWS per eseguire le attività per tuo conto. Ti dà accesso alle risorse AWS di cui avrai bisogno lungo il percorso.

Puoi creare un ruolo usando il seguente comando:

ruolo di creazione di aws iam \

--role-name LambdaDynamoDBExecutionRole \

--assume-role-policy-document file://assume-role-policy.json \

--descrizione ' AWSLambdaDynamoDBExecutionRole' \

--service-name lambda.amazonaws.com

Il comando precedente è un comando AWS CLI per creare un ruolo. Puoi anche utilizzare Amazon Management Console per creare un ruolo. Una volta che sei alla console IAM, apri il file Ruoli pagina e fare clic su Crea ruolo pulsante.

Procedere con l'inserimento di quanto segue:

  • Entità attendibile: Lambda
  • Nome ruolo: lambda-dynamodb-ruolo
  • Autorizzazioni: AWSLambdaDynamoDBExecutionRole

Puoi anche utilizzare Python installando prima l'SDK AWS per Python:

pip installa boto3

Passaggio 3: abilita gli stream DynamoDB sul tuo tavolo

Devi abilitare gli stream DynamoDB sul tuo tavolo. Per questa illustrazione, utilizziamo Boto3, SDK AWS per Python. Il seguente comando aiuterà:

importa boto3

# Connettiti al servizio DynamoDB
dynamodb = boto3.client( 'dinamodb' )

# Abilita i flussi DynamoDB sulla tabella 'my-table'
risposta = dynamodb.update_table(
NomeTabella= 'miatabella' ,
Specifica flusso={
'StreamEnabled' : Vero,
'StreamViewType' : 'NUOVE_E_VECCHIE_IMMAGINI'
}
)

# Controlla la risposta per assicurarti che lo stream sia stato abilitato correttamente
se risposta[ 'Specifica flusso' ][ 'StreamEnabled' ]:
Stampa( 'Stream DynamoDB abilitato correttamente' )
altro:
Stampa( 'Errore durante l'abilitazione del flusso DynamoDB' )

Questo codice abilita lo stream DynamoDB sulla tabella 'mytable' che trasmette sia la nuova che la vecchia immagine degli elementi non appena si verificano modifiche. Puoi scegliere di eseguire lo streaming solo delle nuove immagini non appena StreamViewType su 'NEW_IMAGE'.

In particolare, l'esecuzione di questo codice potrebbe abilitare i flussi sui tuoi tavoli solo dopo un po'. Invece, il processo potrebbe richiedere del tempo. Puoi usare il metodo describe_table per controllare lo stato del flusso.

Passaggio 4: creare la funzione Lambda

Il passaggio successivo consiste nella creazione di una funzione Lambda che attiva il flusso DynamoDB. I seguenti passaggi dovrebbero aiutare:

  • Apri la console AWS Lambda e fai clic sulla scheda 'Crea funzione'. Nella pagina 'Crea funzione', scegli 'Autore da zero' e inserisci un nome per la tua funzione. A questo punto devi anche inserire il tuo runtime. Abbiamo selezionato Python per questa illustrazione.
  • In 'Scegli o crea un ruolo di esecuzione', seleziona 'Crea un nuovo ruolo con autorizzazioni Lambda di base' per creare un ruolo IAM con le autorizzazioni necessarie per la tua funzione Lambda.
  • Fai clic sul pulsante 'Crea funzione' per creare la tua funzione Lambda.
  • Nella pagina 'Configurazione' per la tua funzione, scorri verso il basso fino alla sezione 'Progettista' e fai clic sulla scheda 'Aggiungi trigger'.
  • Nella casella 'Configurazione trigger' visualizzata, seleziona 'DynamoDB' dal menu a discesa 'Trigger'.
  • Seleziona la tabella DynamoDB che desideri utilizzare per attivare la funzione. Al termine, scegli se desideri che la funzione venga attivata su tutti gli aggiornamenti della tabella o solo su aggiornamenti specifici (come gli aggiornamenti a determinate colonne).
  • Fare clic sul pulsante 'Aggiungi' per creare il trigger.
  • Nell'editor 'Codice funzione', scrivi il codice Python per la tua funzione. È possibile utilizzare l'oggetto evento passato alla funzione per accedere ai dati che attivano la funzione.
  • Fare clic sul pulsante 'Salva' per salvare la funzione.

Questo è tutto ciò che accade durante la creazione di una funzione Lambda! La tua funzione ora viene attivata ogni volta che ci sono aggiornamenti alla tabella DynamoDB specificata.

Ecco un esempio di una semplice funzione Python che il flusso DynamoDB può attivare:

def lambda_handler(evento, contesto):

per la registrazione nell'evento[ 'Record' ]:

stampa(registra[ 'dinamodb' ][ 'Nuova immagine' ])

Questa funzione scorre i record nell'oggetto evento e stampa la nuova immagine dell'elemento nella tabella DynamoDB che attiva la funzione.

Passaggio 5: testare la funzione Lambda

Per testare una funzione Lambda che può essere attivata da un flusso DynamoDB, puoi utilizzare il file boto3 library per accedere all'API DynamoDB e al invocare metodo del Lambda client per attivare la funzione.

Ecco un esempio su come farlo:

importa boto3

# Connettiti al servizio DynamoDB
dynamodb = boto3.client( 'dinamodb' )

# Connettiti al servizio Lambda
lambda_client = boto3.client( 'lambda' )

# Inserisci un elemento nella tabella 'my-table'
risposta = dinamodb.put_item(
NomeTabella= 'miatabella' ,
Articolo={
'id' :{ 'N' : '123' },
'nome' :{ 'S' : 'Joel Austin},
'
età ':{' N ':' 3. 4 '}
}
)

# Controlla la risposta per assicurarti che l'elemento sia stato inserito correttamente
se risposta['
Metadati di risposta '][' HTTPStatusCode '] == 200:
print('Articolo inserito con successo')
altro:
print('Errore durante l'inserimento dell'elemento')

# Attiva la funzione Lambda che è sottoscritta al '
mio-tavolo ' tavolo
risposta = lambda_client.invoke(
NomeFunzione='
funzione ',
TipoInvocazione='
Evento ',
LogType='
Coda ',
Carico utile='
{ 'Record' :[{ 'dinamodb' :{ 'Nuova immagine' :{ 'id' :{ 'N' : '123' }, 'nome' :{ 'S' : 'Joel Austin' }, 'età' :{ 'N' : '3,4' }}}}]} '
)

# Controlla la risposta per assicurarti che la funzione sia stata attivata correttamente
se risposta['
Codice di stato '] == 202:
print('La funzione Lambda è stata attivata con successo')
altro:
print('Errore durante l'attivazione della funzione Lambda')

Questo codice inserisce prima un elemento nel file mytable table e quindi attiva il file funzione Funzione Lambda inviando un payload dell'evento di esempio alla funzione utilizzando il invocare metodo. Il payload dell'evento simula un evento stream DynamoDB che include la nuova immagine dell'elemento appena inserito.

Puoi quindi controllare i log della funzione Lambda per vedere se ha attivato ed elaborato correttamente i dati dell'evento.

Conclusione

È fondamentale notare che puoi invocare più volte per lo stesso record di flusso che un flusso DynamoDB può attivare una funzione Lambda. Il motivo principale alla base di ciò è che i record del flusso alla fine sono coerenti ed è possibile elaborare lo stesso record più volte dalla funzione Lambda. È fondamentale progettare la funzione Lambda per gestire correttamente questo caso.