DynamoDB struji s Lambda

Dynamodb Struji S Lambda



DynamoDB Streams značajka je u Amazon DynamoDB-u koja vam omogućuje da dobijete tok promjena ili promjena podataka u stvarnom vremenu u vašim DynamoDB tablicama. Ovu značajku možete koristiti za izradu aplikacija koje reagiraju na promjene podataka u DynamoDB tablicama kao što su ažuriranje predmemorija i slanje obavijesti.

Naravno, također možete koristiti DynamoDB Streams za pokretanje nizvodnih procesa i AWS Lambda funkcija. Lambda je, po definiciji, računalna usluga bez poslužitelja koja pokreće vaš kod kao odgovor na događaje i automatski upravlja računalnim resursima umjesto vas.

Možete koristiti Lambda za pisanje koda u Node.js, Python, Java ili C# za obradu zapisa toka i poduzimanje odgovarajućih radnji. Glavna prednost integracije DynamoDB Streams s Lambdom je ta što vam Lambda omogućuje pokretanje podržanih usluga ili kodova aplikacija bez potrebe za administracijom.







Kako koristiti AWS DynamoDB streamove s Lambda

Iako je moguće stvoriti Lambda funkciju koja koristi događaje i pojave iz DynamoDB Stream-a, proces može biti prilično zahtjevan, osobito pri prvom pokušaju. Pomoći će vam sljedeći koraci:



Korak 1: Provjerite ispunjava li vaš sustav preduvjete

Ovaj će postupak biti uspješan samo ako poznajete osnovne Lambda operacije i procese. Stoga bi ovo trebao biti vaš prvi način da osigurate da je vaše razumijevanje Lambde iznad prosjeka.



Drugi preduvjet koji vrijedi razmotriti je potvrda AWS verzije vašeg sustava. Možete koristiti sljedeću naredbu:





aws – verzija

Rezultat za danu naredbu trebao bi izgledati ovako:

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

Navedeni uzorak odgovora sadrži instaliranu verziju AWS CLI ( aws-cli/2.x.x ), Python verzija ( Python/3.x.x ), i operativni sustav ( Linux/4.x.x-xxx-std ). Posljednji dio odgovora definira verziju biblioteke Botocore na kojoj radi vaš AWS CLI ( botocore/2.x.x ).



Stoga ćete završiti s nečim poput ovoga:

Korak 2: Stvorite izvršnu ulogu

Sljedeći korak je kreiranje izvršne uloge u AWS CLI. Izvršna uloga je uloga AWS upravljanja identitetom i pristupom (IAM) koju preuzima AWS usluga za obavljanje zadataka u vaše ime. Daje vam pristup AWS resursima koji će vam trebati na putu.

Ulogu možete stvoriti pomoću sljedeće naredbe:

aws ja kreiram ulogu \

--ime-uloge LambdaDynamoDBExecutionRole \

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

--opis ' AWSLambdaDynamoDBExecutionRole' \

--naziv-usluge lambda.amazonaws.com

Prethodna naredba je AWS CLI naredba za stvaranje uloge. Također možete koristiti Amazon Management Console za stvaranje uloge. Kada ste na IAM konzoli, otvorite Uloge stranicu i kliknite na Stvorite ulogu dugme.

Nastavite s unosom sljedećeg:

  • Pouzdani entitet: Lambda
  • Naziv uloge: lambda-dynamodb-role
  • Dopuštenja: AWSLambdaDynamoDBExecutionRole

Također možete koristiti Python tako da prvo instalirate AWS SDK za Python:

pip instaliraj boto3

Korak 3: Omogućite DynamoDB streamove na vašoj tablici

Morate omogućiti DynamoDB Streams na vašoj tablici. Za ovu ilustraciju koristimo Boto3, AWS SDK za Python. Sljedeća naredba će vam pomoći:

uvoz boto3

# Spojite se na uslugu DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Omogućite DynamoDB tokove na tablici 'my-table'
odgovor = dynamodb.update_table(
NazivTablice= 'mytable' ,
StreamSpecification={
'StreamEnabled' : Istina,
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# Provjerite odgovor kako biste bili sigurni da je stream uspješno omogućen
ako odgovor[ 'StreamSpecification' ][ 'StreamEnabled' ]:
ispis( 'DynamoDB stream je uspješno omogućen' )
drugo:
ispis( 'Pogreška pri omogućavanju DynamoDB streama' )

Ovaj kod omogućuje DynamoDB tok na tablici 'mytable' koji struji i nove i stare slike stavki čim dođe do bilo kakve promjene. Možete odabrati samo strujanje novih slika čim StreamViewType postavite na “NEW_IMAGE”.

Naime, pokretanje ovog koda može tek nakon nekog vremena omogućiti streamove na vašim stolovima. Umjesto toga, proces može potrajati neko vrijeme. Možete koristiti describe_table metodu za provjeru statusa streama.

Korak 4: Stvorite Lambda funkciju

Sljedeći korak je stvaranje Lambda funkcije koja pokreće DynamoDB tok. Sljedeći koraci trebali bi pomoći:

  • Otvorite AWS Lambda konzolu i kliknite karticu 'Create function'. Na stranici 'Izradi funkciju' odaberite 'Autor ispočetka' i unesite naziv svoje funkcije. U ovom trenutku također morate unijeti svoje vrijeme izvođenja. Odabrali smo Python za ovu ilustraciju.
  • U odjeljku 'Odaberite ili stvorite izvršnu ulogu' odaberite 'Stvori novu ulogu s osnovnim Lambda dopuštenjima' da biste stvorili IAM ulogu s potrebnim dopuštenjima za vašu Lambda funkciju.
  • Pritisnite gumb 'Stvori funkciju' da biste stvorili svoju Lambda funkciju.
  • Na stranici 'Konfiguracija' za svoju funkciju pomaknite se prema dolje do odjeljka 'Dizajner' i kliknite karticu 'Dodaj okidač'.
  • U okviru 'Konfiguracija okidača' koji se pojavi odaberite 'DynamoDB' s padajućeg izbornika 'Okidač'.
  • Odaberite DynamoDB tablicu koju želite koristiti za pokretanje funkcije. Kada završite, odaberite želite li da se funkcija pokreće na svim ažuriranjima tablice ili samo na određenim ažuriranjima (kao što su ažuriranja određenih stupaca).
  • Kliknite gumb 'Dodaj' za stvaranje okidača.
  • U uređivaču 'Kod funkcije' napišite Python kod za svoju funkciju. Možete koristiti objekt događaja koji se prosljeđuje vašoj funkciji za pristup podacima koji pokreću funkciju.
  • Pritisnite gumb 'Spremi' da biste spremili funkciju.

To je sve što se događa prilikom kreiranja Lambda funkcije! Vaša se funkcija sada pokreće kad god postoje ažuriranja navedene DynamoDB tablice.

Evo primjera jednostavne Python funkcije koju DynamoDB stream može pokrenuti:

def lambda_handler(događaj, kontekst):

za zapis u događaju[ 'Zapisi' ]:

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

Ova funkcija prolazi kroz zapise u objektu događaja i ispisuje novu sliku stavke u DynamoDB tablici koja pokreće funkciju.

Korak 5: Testirajte Lambda funkciju

Za testiranje Lambda funkcije koju DynamoDB tok može pokrenuti, možete koristiti boto3 knjižnici za pristup DynamoDB API-ju i prizivati metoda Lambda klijent za pokretanje funkcije.

Evo primjera kako to učiniti:

uvoz boto3

# Spojite se na uslugu DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Spojite se na Lambda servis
lambda_klijent = boto3.klijent( 'lambda' )

# Umetnite stavku u tablicu 'my-table'
odgovor = dynamodb.put_item(
NazivTablice= 'mytable' ,
Stavka={
'iskaznica' :{ 'N' : '123' },
'Ime' :{ 'S' : 'Joel Austin},
'
dob ':{' N ':' 3. 4 '}
}
)

# Provjerite odgovor kako biste bili sigurni da je stavka uspješno umetnuta
ako odgovor['
Metapodaci odgovora '][' HTTPStatusCode '] == 200:
print('Stavka je uspješno umetnuta')
drugo:
print('Pogreška pri umetanju stavke')

# Pokreni Lambda funkciju koja je pretplaćena na '
moj-stol ' stol
odgovor = lambda_client.invoke(
Function,
InvocationType='
Događaj ',
LogType='
Rep ',
nosivost='
{ 'Zapisi' :[{ 'dynamodb' :{ 'Nova slika' :{ 'iskaznica' :{ 'N' : '123' }, 'Ime' :{ 'S' : 'Joel Austin' }, 'dob' :{ 'N' : '3. 4' }}}}]} '
)

# Provjerite odgovor kako biste bili sigurni da je funkcija uspješno pokrenuta
ako odgovor['
StatusCode '] == 202:
print('Lambda funkcija uspješno pokrenuta')
drugo:
print('Pogreška pokretanja Lambda funkcije')

Ovaj kod prvo umeće stavku u mytable stol i zatim pokreće moja funkcija Lambda funkcija slanjem uzorka korisnog sadržaja događaja u funkciju pomoću prizivati metoda. Korisni teret događaja simulira DynamoDB događaj toka koji uključuje novu sliku stavke koja je upravo umetnuta.

Zatim možete provjeriti zapisnike funkcije Lambda da vidite je li uspješno pokrenula i obradila podatke o događaju.

Zaključak

Važno je napomenuti da možete pozvati više puta za isti zapis toka da DynamoDB tok može pokrenuti Lambda funkciju. Primarni razlog za to je taj što su zapisi toka na kraju konzistentni, a moguće je više puta obraditi isti zapis pomoću Lambda funkcije. Ključno je dizajnirati svoju Lambda funkciju kako bi ispravno obradila ovaj slučaj.