„DynamoDB“ srautai su „Lambda“.

Dynamodb Srautai Su Lambda



„DynamoDB Streams“ yra „Amazon DynamoDB“ funkcija, leidžianti realiuoju laiku gauti „DynamoDB“ lentelių pakeitimų arba duomenų pakeitimų srautą. Galite naudoti šią funkciją kurdami programas, kurios reaguoja į duomenų pokyčius DynamoDB lentelėse, pvz., talpyklos atnaujinimą ir pranešimų siuntimą.

Žinoma, taip pat galite naudoti DynamoDB srautus, kad suaktyvintumėte tolesnius procesus ir AWS Lambda funkcijas. „Lambda“ pagal apibrėžimą yra skaičiavimo paslauga be serverio, kuri paleidžia jūsų kodą reaguodama į įvykius ir automatiškai valdo skaičiavimo išteklius už jus.

Galite naudoti Lambda kodą parašyti Node.js, Python, Java arba C#, kad apdorotumėte srauto įrašus ir atliktumėte atitinkamus veiksmus. Pagrindinis „DynamoDB Streams“ integravimo su „Lambda“ pranašumas yra tas, kad „Lambda“ leidžia paleisti palaikomas paslaugas arba programų kodus be administravimo.







Kaip naudoti AWS DynamoDB srautus su „Lambda“.

Nors galima sukurti Lambda funkciją, kuri naudoja įvykius ir įvykius iš DynamoDB srauto, procesas gali būti gana sudėtingas, ypač pirmą kartą bandant. Šie veiksmai padės:



1 veiksmas: įsitikinkite, kad jūsų sistema atitinka būtinas sąlygas

Ši procedūra bus sėkminga tik tuo atveju, jei žinosite pagrindines Lambda operacijas ir procesus. Taigi tai turėtų būti jūsų pirmas įsitikinimas, kad jūsų supratimas apie lambda yra didesnis nei vidutinis.



Antroji būtina sąlyga, kurią verta apsvarstyti, yra sistemos AWS versijos patvirtinimas. Galite naudoti šią komandą:





aws – versija

Pateiktos komandos rezultatas turėtų atrodyti taip:

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

Pateiktame atsakymo pavyzdyje yra įdiegta AWS CLI versija ( aws-cli/2.x.x ), Python versija ( Python/3.x.x ) ir operacinę sistemą ( Linux/4.x.x-xxx-std ). Paskutinė atsakymo dalis apibrėžia Botocore bibliotekos versiją, kurioje veikia jūsų AWS CLI ( botocore/2.x.x ).



Taigi jūs gausite kažką panašaus į tai:

2 veiksmas: sukurkite vykdymo vaidmenį

Kitas žingsnis yra sukurti vykdymo vaidmenį AWS CLI. Vykdymo vaidmuo yra AWS tapatybės ir prieigos valdymo (IAM) vaidmuo, kurį prisiima AWS tarnyba, kad atliktų užduotis jūsų vardu. Tai suteikia prieigą prie AWS išteklių, kurių jums prireiks.

Galite sukurti vaidmenį naudodami šią komandą:

aws iam sukurti vaidmenį \

--role-name LambdaDynamoDBExecutionRole \

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

--apibūdinimas „AWSLambdaDynamoDBExecutionRole“ \

-- paslaugos pavadinimas lambda.amazonaws.com

Ankstesnė komanda yra AWS CLI komanda, skirta vaidmeniui sukurti. Taip pat galite naudoti „Amazon Management Console“, kad sukurtumėte vaidmenį. Kai būsite IAM pulte, atidarykite Vaidmenys puslapį ir spustelėkite Sukurti vaidmenį mygtuką.

Toliau įveskite:

  • Patikimas subjektas: Lambda
  • Vaidmens pavadinimas: lambda-dynamodb-role
  • Leidimai: AWSLambdaDynamoDBExecutionRole

Taip pat galite naudoti Python, pirmiausia įdiegę AWS SDK, skirtą Python:

pip įdiegti boto3

3 veiksmas: įgalinkite „DynamoDB“ srautus savo lentelėje

Savo lentelėje turite įjungti „DynamoDB“ srautus. Šiai iliustracijai naudojame Boto3, AWS SDK, skirtą Python. Ši komanda padės:

importuoti boto3

# Prisijunkite prie „DynamoDB“ paslaugos
dynamodb = boto3.client( 'dinamodb' )

# Įgalinkite „DynamoDB“ srautus „mano stalo“ lentelėje
atsakymas = dynamodb.update_table(
Lentelės pavadinimas = 'mano stalas' ,
StreamSpecification={
„StreamEnabled“ : Tiesa,
„StreamViewType“ : „NEW_AND_OLD_IMAGES“
}
)

# Patikrinkite atsakymą, kad įsitikintumėte, jog srautas buvo sėkmingai įjungtas
jei atsakymas[ „StreamSpecification“ ][ „StreamEnabled“ ]:
spausdinti ( „DynamoDB srautas sėkmingai įjungtas“ )
Kitas:
spausdinti ( „Klaida įgalinant DynamoDB srautą“ )

Šis kodas įgalina „DynamoDB“ srautą „mytable“ lentelėje, kuris srautu perduoda naujus ir senus elementų vaizdus, ​​kai tik įvyksta bet kokie pakeitimai. Galite pasirinkti srautu perduoti tik naujus vaizdus, ​​kai tik StreamViewType į „NEW_IMAGE“.

Pažymėtina, kad paleidus šį kodą srautai jūsų lentelėse gali būti įjungti tik po kurio laiko. Vietoj to, procesas gali užtrukti šiek tiek laiko. Norėdami patikrinti srauto būseną, galite naudoti aprašo_lentelės metodą.

4 veiksmas: sukurkite lambda funkciją

Kitas žingsnis yra sukurti Lambda funkciją, kuri suaktyvina DynamoDB srautą. Šie veiksmai turėtų padėti:

  • Atidarykite AWS Lambda konsolę ir spustelėkite skirtuką „Sukurti funkciją“. Puslapyje „Sukurti funkciją“ pasirinkite „Autorius nuo nulio“ ir įveskite funkcijos pavadinimą. Šiuo metu taip pat turite įvesti vykdymo laiką. Šiai iliustracijai pasirinkome Python.
  • Skiltyje „Pasirinkti arba sukurti vykdymo vaidmenį“ pasirinkite „Sukurti naują vaidmenį su pagrindiniais Lambda leidimais“, kad sukurtumėte IAM vaidmenį su reikalingais jūsų Lambda funkcijai leidimais.
  • Spustelėkite mygtuką „Sukurti funkciją“, kad sukurtumėte savo lambda funkciją.
  • Savo funkcijos puslapyje „Konfigūracija“ slinkite žemyn iki skyriaus „Dizaineris“ ir spustelėkite skirtuką „Pridėti aktyviklį“.
  • Pasirodžiusiame laukelyje „Trigger konfigūracija“ išskleidžiamajame meniu „Trigger“ pasirinkite „DynamoDB“.
  • Pasirinkite DynamoDB lentelę, kurią norite naudoti funkcijai suaktyvinti. Baigę pasirinkite, ar norite, kad funkcija būtų suaktyvinta atliekant visus lentelės naujinimus, ar tik konkretiems naujinimams (pvz., atnaujinant tam tikrus stulpelius).
  • Spustelėkite mygtuką „Pridėti“, kad sukurtumėte aktyviklį.
  • Redagavimo priemonėje „Funkcijos kodas“ parašykite savo funkcijos Python kodą. Norėdami pasiekti duomenis, kurie suaktyvina funkciją, galite naudoti įvykio objektą, kuris perduodamas jūsų funkcijai.
  • Spustelėkite mygtuką „Išsaugoti“, kad funkcija būtų išsaugota.

Tai viskas, kas nutinka kuriant Lambda funkciją! Jūsų funkcija dabar suaktyvinama, kai yra nurodytos DynamoDB lentelės atnaujinimų.

Štai paprastos Python funkcijos, kurią gali suaktyvinti DynamoDB srautas, pavyzdys:

def lambda_handler(įvykis, kontekstas):

įrašui renginyje[ 'Įrašai' ]:

print(įrašyti[ 'dinamodb' ][ 'Naujas vaizdas' ])

Ši funkcija kartojasi per įvykio objekto įrašus ir išspausdina naują elemento vaizdą DynamoDB lentelėje, kuris suaktyvina funkciją.

5 veiksmas: patikrinkite lambda funkciją

Norėdami išbandyti Lambda funkciją, kurią gali suaktyvinti DynamoDB srautas, galite naudoti boto3 biblioteką, kad pasiektumėte DynamoDB API ir prisišaukti metodas Lambda klientas, kad suaktyvintų funkciją.

Štai pavyzdys, kaip tai padaryti:

importuoti boto3

# Prisijunkite prie „DynamoDB“ paslaugos
dynamodb = boto3.client( 'dinamodb' )

# Prisijunkite prie „Lambda“ paslaugos
lambda_client = boto3.client( 'lambda' )

# Įterpkite elementą į lentelę „mano lentelė“.
atsakymas = dynamodb.put_item(
Lentelės pavadinimas = 'mano stalas' ,
elementas={
'id' :{ 'N' : '123' },
'vardas' :{ 'S' : 'Joelis Austinas},
'
amžiaus ':{' N ':' 3. 4 '}
}
)

# Patikrinkite atsakymą, kad įsitikintumėte, jog elementas buvo sėkmingai įdėtas
jei atsakymas['
ResponseMetadata '][' HTTPStatusCode '] == 200:
print ('Elementas sėkmingai įdėtas')
Kitas:
print ('Klaida įterpiant elementą')

# Suaktyvinkite lambda funkciją, kuri yra prenumeruojama
mano stalas ' stalas
atsakymas = lambda_client.invoke(
Function,
InvocationType='
Renginys ',
LogType='
Uodega ',
Payload='
{ 'Rekordai' :[{ 'dinamodb' :{ 'Naujas vaizdas' :{ 'id' :{ 'N' : '123' }, 'vardas' :{ 'S' : 'Joelis Ostinas' }, 'amžius' :{ 'N' : '3. 4' }}}}]} '
)

# Patikrinkite atsakymą, kad įsitikintumėte, jog funkcija buvo sėkmingai suaktyvinta
jei atsakymas['
Būsenos kodas '] == 202:
print ('Lambda funkcija sėkmingai suaktyvinta')
Kitas:
print ('Klaida suaktyvinant lambda funkciją')

Šis kodas pirmiausia įterpia elementą į mytable lentelę ir tada suaktyvina mano funkcija Lambda funkcija, siųsdama pavyzdinį įvykio naudingą apkrovą į funkciją, naudodama prisišaukti metodas. Įvykio naudingoji apkrova imituoja DynamoDB srauto įvykį, į kurį įtrauktas naujas ką tik įterpto elemento vaizdas.

Tada galite patikrinti Lambda funkcijos žurnalus, kad sužinotumėte, ar ji sėkmingai suaktyvino ir apdorojo įvykio duomenis.

Išvada

Labai svarbu pažymėti, kad tam pačiam srauto įrašui galite iškviesti kelis kartus, kad „DynamoDB“ srautas gali suaktyvinti Lambda funkciją. Pagrindinė to priežastis yra ta, kad srauto įrašai galiausiai yra nuoseklūs ir tą patį įrašą galima apdoroti kelis kartus naudojant Lambda funkciją. Labai svarbu suprojektuoti Lambda funkciją, kad būtų galima tinkamai elgtis su šiuo atveju.