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.xAnnettu 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 boto3Vaihe 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.