DynamoDB flussi con lambda

DynamoDB flussi con lambda
Streams DynamoDB è una funzionalità in Amazon DynamoDB che consente di ottenere un flusso in tempo reale di modifiche o modifiche ai dati apportate alle tabelle DynamoDB. È possibile utilizzare questa funzione per creare le applicazioni che reagiscono alle modifiche ai dati nelle tabelle DynamoDB come l'aggiornamento delle cache e l'invio di notifiche.

Naturalmente, puoi anche utilizzare i flussi DynamoDB per attivare i processi a valle e le funzioni di Lambda AWS. Lambda, per definizione, è un servizio di calcolo senza server che esegue il codice in risposta agli eventi e gestisce automaticamente le risorse di calcolo per te.

Puoi usare lambda per scrivere il codice in nodo.JS, Python, Java o C# per elaborare i record del flusso e intraprendere le azioni appropriate. Il principale vantaggio dell'integrazione dei flussi DynamoDB con Lambda è che Lambda consente di eseguire i servizi di supporto o i codici applicativi senza la necessità di amministrazione.

Come usare i flussi AWS DynamoDB con Lambda

Sebbene sia possibile creare una funzione Lambda che consuma eventi e occorrenze da un flusso DynamoDB, il processo può essere abbastanza tasking, in particolare al tuo primo tentativo. I seguenti passaggi aiuteranno:

Passaggio 1: assicurarsi che il tuo sistema soddisfi i prerequisiti

Questa procedura avrà esito positivo solo se conosci le operazioni e i processi di base Lambda. Pertanto, questo dovrebbe essere il tuo primo a garantire che la tua comprensione di Lambda sia al di sopra della media.

Il secondo prerequisito che vale la pena considerare è confermare la versione AWS del tuo sistema. È possibile utilizzare il seguente comando:

AWS -Version

Il risultato per il comando fornito dovrebbe apparire così:

AWS-CLI/2.X.x Python/3.X.x Linux/4.X.X-XXX-STD BOTOCORE/2.X.X

La risposta del campione data contiene la versione installata della CLI AWS (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 esegue la tua CLI AWS (Botocore/2.X.X).

Pertanto, finirai con qualcosa del genere:

Passaggio 2: creare un ruolo di esecuzione

Il prossimo passo è creare un ruolo di esecuzione in AWS CLI. Un ruolo di esecuzione è un ruolo di Identity and Access Management (IAM) assunto da un servizio AWS per svolgere le attività per tuo conto. Ti dà accesso alle risorse AWS di cui avrai bisogno lungo la strada.

Puoi creare un ruolo usando il seguente comando:

AWS iam Crea-Role \
--Role-name LambdadynamoDbexecutionRole \
--Assumi il file del documento-documento: // Assume-Role-Policy.JSON \
--Descrizione "awslambdadynamodbexecutionrole" \
--Service-Name Lambda.Amazonaws.com

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

Procedere a inserire quanto segue:

  • Entità di fiducia: Lambda
  • Nome del ruolo: Lambda-Dynamodb-Role
  • Permessi: awslambdadynamodbexecutionrole

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

PIP Installa Boto3

Passaggio 3: abilita i flussi DynamODB sulla tabella

È necessario abilitare i flussi DynamODB sul tavolo. Per questa illustrazione, usiamo il Boto3, AWS SDK per Python. Il seguente comando aiuterà:

Importa Boto3
# Connettiti al servizio DynamoDB
DynamoDB = boto3.Client ('DynamoDB')
# Abilita flussi DynamoDB sul tavolo "My-Table"
Risposta = DynamoDB.update_table (
Tablename = 'mytable',
StreamSpecification =
"StrereNabled": vero,
'StreamViewType': 'new_and_old_images'

)
# Controlla la risposta per assicurarti che il flusso fosse abilitato correttamente
Se risposta ['Streamspecification'] ['StrereNabled']:
Stampa ("DynamoDB Stream abilitato correttamente")
altro:
Stampa ("Errore abilitante DynamODB Stream")

Questo codice abilita il flusso di DynamoDB sulla tabella "mytable" che trasmette sia le nuove che vecchie immagini di elementi non appena si verificano modifiche. Puoi scegliere di trasmettere in streaming solo le nuove immagini non appena StreamViewType su "New_Image".

In particolare, l'esecuzione di questo codice può abilitare i flussi solo sulle tabelle. Invece, il processo potrebbe richiedere del tempo. È possibile utilizzare il metodo Descrive_Table per verificare lo stato del flusso.

Passaggio 4: crea la funzione Lambda

Il prossimo passo è la creazione di una funzione Lambda che innesca 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. Devi anche inserire il tuo runtime a questo punto. Abbiamo selezionato Python per questa illustrazione.
  • In "Scegli o crea un ruolo di esecuzione", seleziona "Crea un nuovo ruolo con le autorizzazioni di base Lambda" per creare un ruolo IAM con le autorizzazioni necessarie per la funzione Lambda.
  • Fai clic sul pulsante "Crea funzione" per creare la funzione Lambda.
  • Nella pagina "Configurazione" per la funzione, scorrere verso il basso fino alla sezione "Designer" e fare clic sulla scheda "Aggiungi trigger".
  • Nella casella "Configurazione trigger" che appare, selezionare "DynamoDB" dal menu a discesa "Trigger".
  • Seleziona la tabella DynamoDB che si desidera utilizzare per attivare la funzione. Una volta fatto, scegli se si desidera la funzione attivata su tutti gli aggiornamenti alla tabella o solo su aggiornamenti specifici (come aggiornamenti a colonne particolari).
  • Fai 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 che viene passato alla funzione per accedere ai dati che innesca la funzione.
  • Fai clic sul pulsante "Salva" per salvare la funzione.

Questo è tutto ciò che accade quando si crea una funzione Lambda! La tua funzione è ora 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 record in event ['records']:
print (record ['dynamodb'] ['newimage'])

Questa funzione itera attraverso i record nell'oggetto evento e stampa la nuova immagine dell'elemento nella tabella Dynamodb che innesca la funzione.

Passaggio 5: testare la funzione Lambda

Per testare una funzione Lambda che un flusso DynamoDB può attivare, è possibile utilizzare il Boto3 libreria per accedere all'API DynamoDB e invocare metodo del Lambda client per attivare la funzione.

Ecco un esempio su come farlo:

Importa Boto3
# Connettiti al servizio DynamoDB
DynamoDB = boto3.Client ('DynamoDB')
# Connettiti al servizio Lambda
lambda_client = boto3.Client ('Lambda')
# Inserisci un elemento nella tabella "my-table"
Risposta = DynamoDB.put_item (
Tablename = 'mytable',
Item =
'id': 'n': '123',
'name': 's': 'Joel Austin,
'Age': 'n': '34'

)
# Controlla la risposta per assicurarti che l'articolo sia stato inserito correttamente
if Risposta ['ReshedeMetadata'] ['HttpStatusSode'] == 200:
Stampa ("Articolo inserito correttamente")
altro:
Stampa ("Errore che inserisce l'elemento")
# Trigger la funzione Lambda che è iscritta alla tabella "My-Table"
Risposta = Lambda_Client.invocare(
Functionname = 'myfunction',
InvocationType = 'Event',
LogType = 'coda',
Payload = '"Records": ["DynamoDB": "Newimage": "id": "n": "123", "nome": "s": "Joel Austin", " Age ": " n ":" 34 "] '
)
# Controlla la risposta per assicurarsi che la funzione sia stata attivata correttamente
if Risposta ['StatusCode'] == 202:
Print ("Funzione Lambda attivata correttamente")
altro:
Print ("Errore che attiva la funzione Lambda")

Questo codice inserisce prima un elemento in mytable tavolo e poi innesca il myfunction Funzione lambda inviando un payload evento di esempio alla funzione utilizzando il invocare metodo. Il payload dell'evento simula un evento di flusso DynamoDB che include la nuova immagine dell'oggetto che è stato appena inserito.

È quindi possibile controllare i registri della funzione Lambda per vedere se ha attivato correttamente ed elaborato i dati dell'evento.

Conclusione

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