DynamoDB Streams Lambdalla

Dynamodb Streams Lambdalla



DynamoDB Streams on Amazon DynamoDB:n ominaisuus, jonka avulla voit saada reaaliaikaisen virran DynamoDB-taulukoihisi tehdyistä muutoksista tai tietomuutoksista. Tämän ominaisuuden avulla voit rakentaa sovelluksia, jotka reagoivat DynamoDB-taulukoiden tietojen muutoksiin, kuten välimuistien päivittämiseen ja ilmoitusten lähettämiseen.

Tietysti voit myös käyttää DynamoDB-virtoja myöhempien prosessien ja AWS Lambda -toimintojen käynnistämiseen. Lambda on määritelmänsä mukaan palvelimeton laskentapalvelu, joka suorittaa koodisi vastauksena tapahtumiin ja hallitsee automaattisesti laskentaresursseja puolestasi.

Voit käyttää Lambdaa koodin kirjoittamiseen Node.js-, Python-, Java- tai C#-kielellä stream-tietueiden käsittelemiseksi ja tarvittavien toimien suorittamiseksi. Suurin etu DynamoDB Streamsin integroimisesta Lambdaan on, että Lambda antaa sinun suorittaa tuetut palvelut tai sovelluskoodit ilman hallintaa.







Kuinka käyttää AWS DynamoDB -virtoja Lambdan kanssa

Vaikka on mahdollista luoda Lambda-funktio, joka kuluttaa tapahtumat ja esiintymät DynamoDB-streamista, prosessi voi olla melko työläs, etenkin ensimmäisellä yritykselläsi. Seuraavat vaiheet auttavat:



Vaihe 1: Varmista, että järjestelmäsi täyttää edellytykset

Tämä toimenpide onnistuu vain, jos tunnet Lambdan perustoiminnot ja -prosessit. Siksi tämän pitäisi olla ensimmäinen varmistaaksesi, että ymmärryksesi lambdasta on keskimääräistä korkeampi.



Toinen harkitsemisen arvoinen edellytys on järjestelmän AWS-version vahvistaminen. Voit käyttää seuraavaa komentoa:





aws – versio

Annetun komennon tuloksen pitäisi näyttää tältä:

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

Annettu esimerkkivastaus sisältää asennetun version AWS CLI:stä ( aws-cli/2.x.x ), Python-versio ( Python/3.x.x ) ja käyttöjärjestelmä ( Linux/4.x.x-xxx-std ). Vastauksen viimeinen osa määrittää Botocore-kirjastoversion, jossa AWS CLI:si toimii ( botocore/2.x.x ).



Päädyt siis johonkin tämän kaltaiseen:

Vaihe 2: Luo suoritusrooli

Seuraava askel on luoda suoritusrooli AWS CLI:ssä. Suoritusrooli on AWS-identiteetin ja käyttöoikeuksien hallinnan (IAM) rooli, jonka AWS-palvelu ottaa tehtävien suorittamiseksi puolestasi. Se antaa sinulle pääsyn AWS-resursseihin, joita tarvitset matkan varrella.

Voit luoda roolin seuraavalla komennolla:

aws iam Create-role \

--roolin nimi LambdaDynamoDBExecutionRole \

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

--kuvaus 'AWSLambdaDynamoDBExecutionRole' \

--palvelun nimi lambda.amazonaws.com

Edellinen komento on AWS CLI -komento roolin luomiseksi. Voit myös käyttää Amazon Management Consolea roolin luomiseen. Kun olet IAM-konsolissa, avaa Roolit sivu ja napsauta Luo rooli -painiketta.

Syötä seuraavat tiedot:

  • Luotettu taho: Lambda
  • Roolin nimi: lambda-dynamodb-role
  • Käyttöoikeudet: AWSLambdaDynamoDBExecutionRole

Voit myös käyttää Pythonia asentamalla ensin Pythonin AWS SDK:n:

pip asennus boto3

Vaihe 3: Ota DynamoDB-streamit käyttöön pöydälläsi

Sinun on otettava DynamoDB-streamit käyttöön taulukossasi. Tässä kuvassa käytämme Boto3, AWS SDK:ta Pythonille. Seuraava komento auttaa:

tuonti boto3

# Yhdistä DynamoDB-palveluun
dynamodb = boto3.client( 'dynamodb' )

# Ota DynamoDB-streamit käyttöön 'my-table'-taulukossa
vastaus = dynamodb.update_table(
TaulukonNimi= 'oma pöytä' ,
StreamSpecification={
'StreamEnabled' : Totta,
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# Tarkista vastaus varmistaaksesi, että suoratoisto on otettu käyttöön onnistuneesti
jos vastaus[ 'StreamSpecification' ][ 'StreamEnabled' ]:
Tulosta( 'DynamoDB-stream otettu käyttöön onnistuneesti' )
muu:
Tulosta( 'Virhe DynamoDB-streamin käyttöönotossa' )

Tämä koodi mahdollistaa DynamoDB-virran 'mytable'-taulukossa, joka suoratoistaa sekä uudet että vanhat kuvat kohteista heti, kun muutoksia tapahtuu. Voit vain suoratoistaa uudet kuvat heti, kun StreamViewType on 'NEW_IMAGE'.

Erityisesti tämän koodin suorittaminen saattaa ottaa streamit käyttöön pöydissäsi vasta jonkin ajan kuluttua. Sen sijaan prosessi voi kestää jonkin aikaa. Voit käyttää description_table-menetelmää tarkistaaksesi virran tilan.

Vaihe 4: Luo lambda-funktio

Seuraava vaihe on Lambda-funktion luominen, joka käynnistää DynamoDB-virran. Seuraavien vaiheiden pitäisi auttaa:

  • Avaa AWS Lambda -konsoli ja napsauta 'Luo toiminto' -välilehteä. Valitse Luo toiminto -sivulla 'Tekijä tyhjästä' ja anna funktiolle nimi. Sinun on myös annettava suoritusaikasi tässä vaiheessa. Valitsimme Pythonin tälle kuvalle.
  • Valitse 'Valitse tai luo suoritusrooli' -kohdasta 'Luo uusi rooli Lambda-perusoikeuksilla' luodaksesi IAM-roolin, jolla on tarvittavat oikeudet Lambda-toimintoon.
  • Napsauta 'Luo toiminto' -painiketta luodaksesi lambda-toiminnon.
  • Vieritä toimintosi 'Määritykset'-sivulla 'Suunnittelija'-osioon ja napsauta 'Lisää liipaisin' -välilehteä.
  • Valitse näkyviin tulevasta 'Triggerin määritys' -ruudusta 'DynamoDB' 'Trigger'-pudotusvalikosta.
  • Valitse DynamoDB-taulukko, jota haluat käyttää toiminnon käynnistämiseen. Kun olet valmis, valitse, haluatko toiminnon käynnistyvän kaikissa taulukon päivityksissä vai vain tietyissä päivityksissä (kuten tiettyjen sarakkeiden päivitykset).
  • Luo laukaisin napsauttamalla Lisää-painiketta.
  • Kirjoita 'Function code' -editoriin funktiosi Python-koodi. Voit käyttää funktiollesi välitettyä tapahtumaobjektia päästäksesi käsiksi funktion käynnistäviin tietoihin.
  • Napsauta 'Tallenna' -painiketta tallentaaksesi toiminnon.

Siinä kaikki, mitä tapahtuu luotaessa lambda-toimintoa! Toiminto käynnistyy nyt aina, kun määritettyyn DynamoDB-taulukkoon tulee päivityksiä.

Tässä on esimerkki yksinkertaisesta Python-funktiosta, jonka DynamoDB-virta voi laukaista:

def lambda_handler(tapahtuma, konteksti):

ennätys tapahtumassa[ 'ennätykset' ]:

print(record[ 'dynamodb' ][ 'Uusi kuva' ])

Tämä funktio iteroi tapahtumaobjektin tietueiden läpi ja tulostaa DynamoDB-taulukossa olevan kohteen uuden kuvan, joka käynnistää toiminnon.

Vaihe 5: Testaa lambda-toiminto

Voit testata Lambda-funktiota, jonka DynamoDB-virta voi laukaista, käyttämällä boto3 kirjasto, jolla pääset DynamoDB-sovellusliittymään ja vedota menetelmä Lambda asiakas käynnistää toiminnon.

Tässä on esimerkki kuinka se tehdään:

tuonti boto3

# Yhdistä DynamoDB-palveluun
dynamodb = boto3.client( 'dynamodb' )

# Yhdistä Lambda-palveluun
lambda_client = boto3.client( 'lambda' )

# Lisää kohde 'my-table' -taulukkoon
vastaus = dynamodb.put_item(
TaulukonNimi= 'oma pöytä' ,
item={
'id' :{ 'N' : '123' },
'nimi' :{ 'S' : 'Joel Austin},
'
ikä ':{' N ':' 3. 4 '}
}
)

# Tarkista vastaus varmistaaksesi, että kohde on lisätty onnistuneesti
jos vastaus['
ResponseMetadata '][' HTTPStatusCode '] == 200:
print('Tuote lisätty onnistuneesti')
muu:
print('Virhe lisättäessä kohdetta')

# Käynnistä lambda-toiminto, joka on tilattu
minun pöytäni ' pöytä
vastaus = lambda_client.invoke(
Function,
InvocationType='
Tapahtuma ',
LogType='
Häntä ',
hyötykuorma='
{ 'Ennätykset' :[{ 'dynamodb' :{ 'Uusi kuva' :{ 'id' :{ 'N' : '123' }, 'nimi' :{ 'S' : 'Joel Austin' }, 'ikä' :{ 'N' : '3. 4' }}}}]} '
)

# Tarkista vastaus varmistaaksesi, että toiminto käynnistyi onnistuneesti
jos vastaus['
StatusCode '] == 202:
print('Lambda-toiminto laukaistiin onnistuneesti')
muu:
print('Virhe käynnistäessä lambda-toimintoa')

Tämä koodi lisää ensin kohteen mytable taulukko ja laukaisee sitten minun toimintoni Lambda-toiminto lähettämällä näytetapahtuman hyötykuorma toimintoon käyttämällä vedota menetelmä. Tapahtuman hyötykuorma simuloi DynamoDB-virtatapahtumaa, joka sisältää juuri lisätyn kohteen uuden kuvan.

Voit sitten tarkistaa Lambda-toiminnon lokeista, laukaisiko se onnistuneesti ja käsittelikö se tapahtumatiedot.

Johtopäätös

On tärkeää huomata, että voit kutsua useita kertoja samalle stream-tietueelle, että DynamoDB-virta voi laukaista Lambda-toiminnon. Ensisijainen syy tähän on, että stream-tietueet ovat lopulta johdonmukaisia, ja on mahdollista käsitellä samaa tietuetta useita kertoja Lambda-toiminnolla. On ratkaisevan tärkeää suunnitella Lambda-toiminto käsittelemään tätä tapausta oikein.