DynamoDB pretaka z Lambdo

Dynamodb Pretaka Z Lambdo



DynamoDB Streams je funkcija v Amazon DynamoDB, ki vam omogoča, da v realnem času dobite tok sprememb ali sprememb podatkov, ki so narejene v vaših tabelah DynamoDB. To funkcijo lahko uporabite za izdelavo aplikacij, ki se odzivajo na spremembe podatkov v tabelah DynamoDB, kot je posodabljanje predpomnilnikov in pošiljanje obvestil.

Seveda lahko uporabite tudi DynamoDB Streams za sprožitev nadaljnjih procesov in funkcij AWS Lambda. Lambda je po definiciji računalniška storitev brez strežnika, ki izvaja vašo kodo kot odziv na dogodke in samodejno upravlja računalniške vire namesto vas.

Lambda lahko uporabite za pisanje kode v Node.js, Python, Java ali C# za obdelavo zapisov toka in izvajanje ustreznih dejanj. Glavna prednost integracije tokov DynamoDB z Lambdo je, da vam Lambda omogoča zagon podprtih storitev ali kod aplikacij brez potrebe po skrbništvu.







Kako uporabljati tokove AWS DynamoDB z Lambdo

Čeprav je mogoče ustvariti funkcijo Lambda, ki porablja dogodke in pojavitve iz toka DynamoDB, je lahko postopek precej naporen, zlasti pri prvem poskusu. Naslednji koraki vam bodo pomagali:



1. korak: Zagotovite, da vaš sistem izpolnjuje predpogoje

Ta postopek bo uspešen le, če poznate osnovne operacije in procese Lambda. Zato bi moralo biti to vaše prvo, da zagotovite, da je vaše razumevanje Lambde nadpovprečno.



Drugi predpogoj, ki ga je vredno upoštevati, je potrditev različice AWS vašega sistema. Uporabite lahko naslednji ukaz:





aws –različica

Rezultat za podani ukaz bi moral izgledati takole:

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

Podani vzorčni odgovor vsebuje nameščeno različico AWS CLI ( aws-cli/2.x.x ), različica Python ( Python/3.x.x ) in operacijski sistem ( Linux/4.x.x-xxx-std ). Zadnji del odgovora definira različico knjižnice Botocore, na kateri deluje vaš AWS CLI ( botocore/2.x.x ).



Na koncu boste torej dobili nekaj takega:

2. korak: Ustvarite izvršilno vlogo

Naslednji korak je ustvariti izvršilno vlogo v AWS CLI. Izvršilna vloga je vloga AWS Identity and Access Management (IAM), ki jo prevzame storitev AWS za izvajanje nalog v vašem imenu. Omogoča vam dostop do virov AWS, ki jih boste potrebovali na poti.

Vlogo lahko ustvarite z naslednjim ukazom:

aws sem ustvari vlogo \

--ime-vloge LambdaDynamoDBExecutionRole \

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

--opis ' AWSLambdaDynamoDBExecutionRole' \

--ime-storitve lambda.amazonaws.com

Prejšnji ukaz je ukaz AWS CLI za ustvarjanje vloge. Za ustvarjanje vloge lahko uporabite tudi konzolo Amazon Management Console. Ko ste na konzoli IAM, odprite Vloge strani in kliknite Ustvari vlogo gumb.

Nadaljujte z vnosom naslednjega:

  • Zaupanja vreden subjekt: Lambda
  • Ime vloge: lambda-dynamodb-role
  • Dovoljenja: AWSLambdaDynamoDBExecutionRole

Python lahko uporabljate tudi tako, da najprej namestite AWS SDK za Python:

pip namestite boto3

3. korak: Omogočite tokove DynamoDB na vaši tabeli

V svoji tabeli morate omogočiti tokove DynamoDB. Za to ilustracijo uporabljamo Boto3, AWS SDK za Python. Naslednji ukaz vam bo pomagal:

uvoz boto3

# Povežite se s storitvijo DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Omogoči tokove DynamoDB v tabeli 'my-table'
odgovor = dynamodb.update_table(
ImeTabele= 'mytable' ,
StreamSpecification={
»StreamEnabled« : Prav,
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# Preverite odgovor, da se prepričate, ali je bil tok uspešno omogočen
če odgovor[ 'StreamSpecification' ][ »StreamEnabled« ]:
natisni( 'Tok DynamoDB uspešno omogočen' )
drugače:
natisni( 'Napaka pri omogočanju toka DynamoDB' )

Ta koda omogoča tok DynamoDB v tabeli »mytable«, ki pretaka nove in stare slike elementov, takoj ko pride do kakršnih koli sprememb. Izberete lahko samo pretakanje novih slik takoj, ko StreamViewType nastavite na »NEW_IMAGE«.

Predvsem lahko izvajanje te kode omogoči tokove na vaših mizah šele čez nekaj časa. Namesto tega lahko postopek traja nekaj časa. Za preverjanje statusa toka lahko uporabite metodo describe_table.

4. korak: Ustvarite funkcijo Lambda

Naslednji korak je ustvarjanje funkcije Lambda, ki sproži tok DynamoDB. Naslednji koraki bi morali pomagati:

  • Odprite konzolo AWS Lambda in kliknite zavihek »Ustvari funkcijo«. Na strani »Ustvari funkcijo« izberite »Avtor iz nič« in vnesite ime za svojo funkcijo. Na tej točki morate vnesti tudi čas izvajanja. Za to ilustracijo smo izbrali Python.
  • V razdelku »Izberite ali ustvarite vlogo izvajanja« izberite »Ustvari novo vlogo z osnovnimi dovoljenji Lambda«, da ustvarite vlogo IAM s potrebnimi dovoljenji za vašo funkcijo Lambda.
  • Kliknite gumb »Ustvari funkcijo«, da ustvarite svojo funkcijo Lambda.
  • Na strani »Konfiguracija« za svojo funkcijo se pomaknite navzdol do razdelka »Oblikovalnik« in kliknite zavihek »Dodaj sprožilec«.
  • V polju »Konfiguracija sprožilca«, ki se prikaže, v spustnem meniju »Sprožilec« izberite »DynamoDB«.
  • Izberite tabelo DynamoDB, ki jo želite uporabiti za sprožitev funkcije. Ko končate, izberite, ali želite, da se funkcija sproži pri vseh posodobitvah tabele ali samo pri določenih posodobitvah (kot so posodobitve določenih stolpcev).
  • Kliknite gumb »Dodaj«, da ustvarite sprožilec.
  • V urejevalnik »Function code« napišite kodo Python za svojo funkcijo. Objekt dogodka, ki je posredovan vaši funkciji, lahko uporabite za dostop do podatkov, ki sprožijo funkcijo.
  • Kliknite gumb »Shrani«, da shranite funkcijo.

To je vse, kar se zgodi pri ustvarjanju funkcije Lambda! Vaša funkcija se zdaj sproži vsakič, ko pride do posodobitev navedene tabele DynamoDB.

Tukaj je primer preproste funkcije Python, ki jo lahko sproži tok DynamoDB:

def lambda_handler(dogodek, kontekst):

za zapis na dogodku[ 'Records' ]:

natisni (zapis [ 'dynamodb' ][ 'Nova slika' ])

Ta funkcija ponovi skozi zapise v objektu dogodka in natisne novo sliko elementa v tabeli DynamoDB, ki sproži funkcijo.

5. korak: preizkusite funkcijo Lambda

Če želite preizkusiti funkcijo Lambda, ki jo lahko sproži tok DynamoDB, lahko uporabite boto3 knjižnico za dostop do API-ja DynamoDB in priklicati metoda Lambda odjemalec, da sproži funkcijo.

Tukaj je primer, kako to storiti:

uvoz boto3

# Povežite se s storitvijo DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Povežite se s storitvijo Lambda
lambda_client = boto3.client( 'lambda' )

# Vstavite element v tabelo 'my-table'
odgovor = dynamodb.put_item(
ImeTabele= 'mytable' ,
Postavka={
'id' :{ 'N' : '123' },
'ime' :{ 'S' : 'Joel Austin},
'
starost ':{' n ':' 3. 4 '}
}
)

# Preverite odgovor, da se prepričate, ali je bil element uspešno vstavljen
če odgovor['
ResponseMetapodatki '][' HTTPStatusCode '] == 200:
print('Element uspešno vstavljen')
drugače:
print('Napaka pri vstavljanju predmeta')

# Sproži funkcijo Lambda, ki je naročena na '
moja-miza 'mizo
odgovor = lambda_client.invoke(
Function,
InvocationType='
Dogodek ',
LogType='
rep ',
Koristna obremenitev ='
{ 'Zapisi' :[{ 'dynamodb' :{ 'Nova slika' :{ 'id' :{ 'N' : '123' }, 'ime' :{ 'S' : 'Joel Austin' }, 'starost' :{ 'N' : '3. 4' }}}}]} '
)

# Preverite odziv, da se prepričate, ali je bila funkcija uspešno sprožena
če odgovor['
StatusCode '] == 202:
print('Lambda funkcija se je uspešno sprožila')
drugače:
print('Napaka pri sprožitvi funkcije Lambda')

Ta koda najprej vstavi element v mytable mizo in nato sproži moja funkcija Funkcijo Lambda s pošiljanjem koristnega vzorčnega dogodka v funkcijo z uporabo priklicati metoda. Obremenitev dogodka simulira dogodek toka DynamoDB, ki vključuje novo sliko elementa, ki je bil pravkar vstavljen.

Nato lahko preverite dnevnike funkcije Lambda, da vidite, ali je uspešno sprožila in obdelala podatke o dogodkih.

Zaključek

Pomembno je upoštevati, da lahko večkrat pokličete isti zapis toka, da lahko tok DynamoDB sproži funkcijo Lambda. Glavni razlog za to je, da so zapisi toka na koncu konsistentni in da je mogoče isti zapis večkrat obdelati s funkcijo Lambda. Za pravilno obravnavo tega primera je ključnega pomena, da oblikujete funkcijo Lambda.