DynamoDB transmite în flux cu Lambda

Dynamodb Transmite In Flux Cu Lambda



DynamoDB Streams este o caracteristică din Amazon DynamoDB care vă permite să obțineți un flux în timp real de modificări sau modificări ale datelor care sunt efectuate în tabelele dvs. DynamoDB. Puteți utiliza această caracteristică pentru a crea aplicații care reacționează la modificările datelor din tabelele DynamoDB, cum ar fi actualizarea cache-urilor și trimiterea de notificări.

Desigur, puteți utiliza și DynamoDB Streams pentru a declanșa procesele din aval și funcțiile AWS Lambda. Lambda, prin definiție, este un serviciu de calcul fără server care rulează codul dvs. ca răspuns la evenimente și gestionează automat resursele de calcul pentru dvs.

Puteți folosi Lambda pentru a scrie codul în Node.js, Python, Java sau C# pentru a procesa înregistrările fluxului și a lua măsurile adecvate. Principalul beneficiu al integrării DynamoDB Streams cu Lambda este că Lambda vă permite să rulați serviciile sau codurile de aplicație susținute fără a fi nevoie de administrare.







Cum să utilizați fluxurile AWS DynamoDB cu Lambda

Deși este posibil să creați o funcție Lambda care consumă evenimentele și aparițiile dintr-un flux DynamoDB, procesul poate fi destul de dificil, în special la prima încercare. Următorii pași vă vor ajuta:



Pasul 1: Asigurați-vă că sistemul dvs. îndeplinește cerințele preliminare

Această procedură va avea succes numai dacă cunoașteți operațiunile și procesele de bază Lambda. Prin urmare, acesta ar trebui să fie primul pentru a vă asigura că înțelegerea dvs. despre Lambda este peste medie.



A doua condiție prealabilă care merită luată în considerare este confirmarea versiunii AWS a sistemului dumneavoastră. Puteți folosi următoarea comandă:





aws –versiune

Rezultatul pentru comanda furnizată ar trebui să arate astfel:

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

Exemplul de răspuns dat conține versiunea instalată a AWS CLI ( aws-cli/2.x.x ), versiunea Python ( Python/3.x.x ), și sistemul de operare ( Linux/4.x.x-xxx-std ). Partea finală a răspunsului definește versiunea bibliotecii Botocore pe care rulează AWS CLI ( botocore/2.x.x ).



Prin urmare, vei ajunge cu ceva de genul acesta:

Pasul 2: Creați un rol de execuție

Următorul pas este crearea unui rol de execuție în AWS CLI. Un rol de execuție este un rol AWS Identity and Access Management (IAM) asumat de un serviciu AWS pentru a efectua sarcinile în numele dvs. Vă oferă acces la resursele AWS de care veți avea nevoie pe parcurs.

Puteți crea un rol folosind următoarea comandă:

aws am creat-rol \

--role-name LambdaDynamoDBExecutionRole \

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

--Descriere ' AWSLambdaDynamoDBExecutionRole' \

--service-name lambda.amazonaws.com

Comanda anterioară este o comandă AWS CLI pentru a crea un rol. De asemenea, puteți utiliza Amazon Management Console pentru a crea un rol. Odată ce vă aflați în consola IAM, deschideți Roluri pagina și faceți clic pe Creați un rol buton.

Continuați să introduceți următoarele:

  • Entitate de încredere: Lambda
  • Nume rol: lambda-dynamodb-role
  • Permisiuni: AWSLambdaDynamoDBExecutionRole

De asemenea, puteți utiliza Python instalând mai întâi AWS SDK pentru Python:

pip install boto3

Pasul 3: Activați fluxurile DynamoDB pe masa dvs

Trebuie să activați fluxurile DynamoDB pe masa dvs. Pentru această ilustrare, folosim Boto3, AWS SDK pentru Python. Următoarea comandă va ajuta:

import boto3

# Conectați-vă la serviciul DynamoDB
dynamodb = boto3.client( „dynamodb” )

# Activați fluxurile DynamoDB pe tabelul „tabelul meu”.
răspuns = dynamodb.update_table(
TableName= 'mytable' ,
StreamSpecification={
„StreamEnabled” : Adevărat,
„StreamViewType” : „NEW_AND_OLD_IMAGES”
}
)

# Verificați răspunsul pentru a vă asigura că fluxul a fost activat cu succes
dacă răspunsul[ „Specificație flux” ][ „StreamEnabled” ]:
imprimare( „Fluxul DynamoDB a fost activat cu succes” )
altceva:
imprimare( „Eroare la activarea fluxului DynamoDB” )

Acest cod activează fluxul DynamoDB pe tabelul „mytable” care transmite atât imaginile noi, cât și cele vechi ale elementelor de îndată ce au loc modificări. Puteți alege să transmiteți în flux noile imagini numai de îndată ce StreamViewType este „NEW_IMAGE”.

În special, rularea acestui cod poate activa fluxurile de pe mesele dvs. numai după un timp. În schimb, procesul poate dura ceva timp. Puteți utiliza metoda describe_table pentru a verifica starea fluxului.

Pasul 4: Creați funcția Lambda

Următorul pas este crearea unei funcții Lambda care declanșează fluxul DynamoDB. Următorii pași ar trebui să ajute:

  • Deschideți consola AWS Lambda și faceți clic pe fila „Creare funcție”. Pe pagina „Creați funcție”, alegeți „Autor de la zero” și introduceți un nume pentru funcția dvs. De asemenea, trebuie să introduceți timpul de rulare în acest moment. Am selectat Python pentru această ilustrație.
  • Sub „Alegeți sau creați un rol de execuție”, selectați „Creați un rol nou cu permisiuni Lambda de bază” pentru a crea un rol IAM cu permisiunile necesare pentru funcția dvs. Lambda.
  • Faceți clic pe butonul „Creați funcție” pentru a vă crea funcția Lambda.
  • Pe pagina „Configurare” a funcției dvs., derulați în jos la secțiunea „Designer” și faceți clic pe fila „Adăugați declanșator”.
  • În caseta „Trigger configuration” care apare, selectați „DynamoDB” din meniul drop-down „Trigger”.
  • Selectați tabelul DynamoDB pe care doriți să îl utilizați pentru a declanșa funcția. După ce ați terminat, alegeți dacă doriți ca funcția să fie declanșată pentru toate actualizările din tabel sau numai pentru anumite actualizări (cum ar fi actualizările pentru anumite coloane).
  • Faceți clic pe butonul „Adăugați” pentru a crea declanșatorul.
  • În editorul „Cod funcție”, scrieți codul Python pentru funcția dvs. Puteți utiliza obiectul eveniment care este transmis funcției dvs. pentru a accesa datele care declanșează funcția.
  • Faceți clic pe butonul „Salvare” pentru a salva funcția.

Asta este tot ce se întâmplă atunci când se creează o funcție Lambda! Funcția dvs. este acum declanșată ori de câte ori există actualizări ale tabelului DynamoDB specificat.

Iată un exemplu de funcție Python simplă pe care fluxul DynamoDB o poate declanșa:

def lambda_handler(eveniment, context):

pentru înregistrare în caz[ 'Înregistrări' ]:

print(inregistreaza[ „dynamodb” ][ 'Imagine noua' ])

Această funcție iterează prin înregistrările din obiectul eveniment și imprimă noua imagine a articolului din tabelul DynamoDB care declanșează funcția.

Pasul 5: Testați funcția Lambda

Pentru a testa o funcție Lambda pe care o poate declanșa un flux DynamoDB, puteți utiliza boto3 bibliotecă pentru a accesa API-ul DynamoDB și invoca metoda de Lambda client pentru a declanșa funcția.

Iată un exemplu despre cum să o faci:

import boto3

# Conectați-vă la serviciul DynamoDB
dynamodb = boto3.client( „dynamodb” )

# Conectați-vă la serviciul Lambda
lambda_client = boto3.client( 'lambda' )

# Inserați un articol în tabelul „tabelul meu”.
răspuns = dynamodb.put_item(
TableName= 'mytable' ,
Item={
'id' :{ 'N' : '123' },
'Nume' :{ „S” : „Joel Austin},
'
vârstă ':{' N ':' 3. 4 '}
}
)

# Verificați răspunsul pentru a vă asigura că articolul a fost introdus cu succes
dacă răspunsul['
Metadate de răspuns '][' HTTPStatusCode '] == 200:
print('Elementul a fost introdus cu succes')
altceva:
print('Eroare la inserarea articolului')

# Declanșați funcția Lambda care este abonată la „
masa mea ' masa
răspuns = lambda_client.invoke(
Function,
InvocationType='
Eveniment ',
LogType='
Coadă ',
sarcină utilă ='
{ 'Înregistrări' :[{ 'dinamodb' :{ 'Imagine noua' :{ 'id' :{ 'N' : '123' }, 'Nume' :{ 'S' : „Joel Austin” }, 'vârstă' :{ 'N' : '3. 4' }}}}]} '
)

# Verificați răspunsul pentru a vă asigura că funcția a fost declanșată cu succes
dacă răspunsul['
StatusCode '] == 202:
print('Funcția Lambda declanșată cu succes')
altceva:
print('Eroare la declanșarea funcției Lambda')

Acest cod inserează mai întâi un articol în mytable tabel și apoi declanșează funcția mea Funcția Lambda prin trimiterea unui eșantion de încărcare utilă a evenimentului către funcție folosind invoca metodă. Sarcina utilă a evenimentului simulează un eveniment de flux DynamoDB care include noua imagine a articolului care tocmai a fost inserat.

Puteți verifica apoi jurnalele funcției Lambda pentru a vedea dacă a declanșat și a procesat cu succes datele evenimentului.

Concluzie

Este vital să rețineți că puteți invoca de mai multe ori pentru aceeași înregistrare a fluxului pe care un flux DynamoDB poate declanșa o funcție Lambda. Motivul principal din spatele acestui lucru este că înregistrările fluxului sunt în cele din urmă consistente și este posibil să procesăm aceeași înregistrare de mai multe ori prin funcția Lambda. Este crucial să vă proiectați funcția Lambda pentru a gestiona acest caz corect.