DynamoDB straumē ar Lambda

Dynamodb Straume Ar Lambda



DynamoDB Streams ir Amazon DynamoDB līdzeklis, kas ļauj iegūt reāllaika izmaiņu vai datu izmaiņu straumi, kas veiktas jūsu DynamoDB tabulās. Varat izmantot šo līdzekli, lai izveidotu lietojumprogrammas, kas reaģē uz datu izmaiņām DynamoDB tabulās, piemēram, kešatmiņas atjaunināšanai un paziņojumu sūtīšanai.

Protams, varat arī izmantot DynamoDB Streams, lai aktivizētu pakārtotos procesus un AWS Lambda funkcijas. Lambda pēc definīcijas ir bezservera skaitļošanas pakalpojums, kas palaiž jūsu kodu, reaģējot uz notikumiem, un automātiski pārvalda skaitļošanas resursus jūsu vietā.

Varat izmantot Lambda, lai rakstītu kodu Node.js, Python, Java vai C#, lai apstrādātu straumes ierakstus un veiktu atbilstošas ​​darbības. Galvenais ieguvums, integrējot DynamoDB Streams ar Lambda, ir tas, ka Lambda ļauj palaist atbalstītos pakalpojumus vai lietojumprogrammu kodus bez nepieciešamības administrēt.







Kā izmantot AWS DynamoDB straumes ar Lambda

Lai gan ir iespējams izveidot Lambda funkciju, kas patērē notikumus un notikumus no DynamoDB straumes, process var būt diezgan sarežģīts, it īpaši pirmajā mēģinājumā. Palīdzēs šādas darbības:



1. darbība. Nodrošiniet, lai jūsu sistēma atbilstu priekšnosacījumiem

Šī procedūra būs veiksmīga tikai tad, ja zināt Lambda pamatdarbības un procesus. Tādējādi šim vajadzētu būt jūsu pirmajam, lai pārliecinātos, ka jūsu izpratne par lambda ir augstāka par vidējo.



Otrs priekšnoteikums, ko ir vērts apsvērt, ir sistēmas AWS versijas apstiprināšana. Varat izmantot šādu komandu:





aws – versija

Norādītās komandas rezultātam vajadzētu izskatīties šādi:

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

Dotajā atbildes paraugā ir instalēta AWS CLI versija ( aws-cli/2.x.x ), Python versija ( Python/3.x.x ), un operētājsistēmu ( Linux/4.x.x-xxx-std ). Pēdējā atbildes daļa nosaka Botocore bibliotēkas versiju, kurā darbojas jūsu AWS CLI ( botocore/2.x.x ).



Tādējādi jūs saņemsit kaut ko līdzīgu:

2. darbība. Izveidojiet izpildes lomu

Nākamais solis ir izveidot izpildes lomu AWS CLI. Izpildes loma ir AWS identitātes un piekļuves pārvaldības (IAM) loma, ko AWS pakalpojums uzņemas, lai veiktu uzdevumus jūsu vārdā. Tas sniedz jums piekļuvi AWS resursiem, kas jums būs nepieciešami ceļā.

Varat izveidot lomu, izmantojot šādu komandu:

aws iam Create-role \

-- lomas nosaukums LambdaDynamoDBExecutionRole \

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

-- apraksts 'AWSLambdaDynamoDBExecutionRole' \

--pakalpojuma nosaukums lambda.amazonaws.com

Iepriekšējā komanda ir AWS CLI komanda, lai izveidotu lomu. Varat arī izmantot Amazon pārvaldības konsoli, lai izveidotu lomu. Kad esat IAM konsolē, atveriet Lomas lapu un noklikšķiniet uz Izveidot lomu pogu.

Turpiniet ievadīt šo:

  • Uzticamā vienība: Lambda
  • Lomas nosaukums: lambda-dynamodb-role
  • Atļaujas: AWSLambdaDynamoDBExecutionRole

Varat arī izmantot Python, vispirms instalējot Python AWS SDK:

pip instalēt boto3

3. darbība: iespējojiet DynamoDB straumes savā tabulā

Tabulā ir jāiespējo DynamoDB straumes. Šajā ilustrācijā mēs izmantojam Boto3, AWS SDK Python. Palīdzēs šāda komanda:

importēt boto3

# Izveidojiet savienojumu ar DynamoDB pakalpojumu
dynamodb = boto3.client( 'dinamodb' )

# Iespējot DynamoDB straumes tabulā “mans galds”.
atbilde = dynamodb.update_table(
Tabulas nosaukums= 'mans galds' ,
StreamSpecification={
'StreamEnabled' : Tiesa,
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# Pārbaudiet atbildi, lai pārliecinātos, ka straume ir veiksmīgi iespējota
ja atbilde[ 'StreamSpecification' ][ 'StreamEnabled' ]:
drukāt ( 'DynamoDB straume ir veiksmīgi iespējota' )
cits:
drukāt ( 'Kļūda, iespējot DynamoDB straumi' )

Šis kods iespējo DynamoDB straumi tabulā “mytable”, kas straumē gan jaunos, gan vecos vienumu attēlus, tiklīdz notiek izmaiņas. Varat izvēlēties straumēt tikai jaunos attēlus, tiklīdz StreamViewType būs “NEW_IMAGE”.

Jo īpaši, palaižot šo kodu, straumes jūsu tabulās var iespējot tikai pēc kāda laika. Tā vietā process var aizņemt kādu laiku. Lai pārbaudītu straumes statusu, varat izmantot metodi description_table.

4. darbība: izveidojiet lambda funkciju

Nākamais solis ir izveidot Lambda funkciju, kas aktivizē DynamoDB straumi. Šādām darbībām vajadzētu palīdzēt:

  • Atveriet AWS Lambda konsoli un noklikšķiniet uz cilnes “Izveidot funkciju”. Lapā “Izveidot funkciju” izvēlieties “Autors no jauna” un ievadiet savas funkcijas nosaukumu. Šajā brīdī jums arī jāievada izpildlaiks. Šai ilustrācijai mēs izvēlējāmies Python.
  • Sadaļā “Izvēlēties vai izveidot izpildes lomu” atlasiet “Izveidot jaunu lomu ar pamata Lambda atļaujām”, lai izveidotu IAM lomu ar nepieciešamajām atļaujām jūsu Lambda funkcijai.
  • Noklikšķiniet uz pogas “Izveidot funkciju”, lai izveidotu savu Lambda funkciju.
  • Jūsu funkcijas lapā “Konfigurācija” ritiniet uz leju līdz sadaļai “Dizaineris” un noklikšķiniet uz cilnes “Pievienot aktivizētāju”.
  • Parādītajā lodziņā “Trigera konfigurācija” nolaižamajā izvēlnē “Trigger” atlasiet “DynamoDB”.
  • Atlasiet DynamoDB tabulu, kuru vēlaties izmantot, lai aktivizētu funkciju. Kad tas ir izdarīts, izvēlieties, vai vēlaties, lai funkcija tiktu aktivizēta visos tabulas atjauninājumos vai tikai noteiktos atjauninājumos (piemēram, konkrētu kolonnu atjauninājumos).
  • Noklikšķiniet uz pogas “Pievienot”, lai izveidotu aktivizētāju.
  • Redaktorā “Funkciju kods” ierakstiet savas funkcijas Python kodu. Varat izmantot notikuma objektu, kas tiek nodots jūsu funkcijai, lai piekļūtu datiem, kas aktivizē funkciju.
  • Noklikšķiniet uz pogas “Saglabāt”, lai funkcija tiktu saglabāta.

Tas ir viss, kas notiek, veidojot Lambda funkciju! Jūsu funkcija tagad tiek aktivizēta ikreiz, kad tiek veikti norādītās DynamoDB tabulas atjauninājumi.

Šeit ir vienkāršas Python funkcijas piemērs, ko var aktivizēt DynamoDB straume:

def lambda_handler(notikums, konteksts):

ierakstam pasākumā[ 'Rekordi' ]:

print(ieraksts[ 'dinamodb' ][ 'Jauns attēls' ])

Šī funkcija atkārto ierakstus notikuma objektā un izdrukā jauno DynamoDB tabulas vienuma attēlu, kas aktivizē funkciju.

5. darbība: pārbaudiet lambda funkciju

Lai pārbaudītu Lambda funkciju, ko var aktivizēt DynamoDB straume, varat izmantot boto3 bibliotēka, lai piekļūtu DynamoDB API un piesaukt metode Lambda klientu, lai aktivizētu funkciju.

Šeit ir piemērs, kā to izdarīt:

importēt boto3

# Izveidojiet savienojumu ar DynamoDB pakalpojumu
dynamodb = boto3.client( 'dinamodb' )

# Izveidojiet savienojumu ar pakalpojumu Lambda
lambda_client = boto3.client( 'lambda' )

# Ievietojiet vienumu tabulā 'mana tabula'.
atbilde = dynamodb.put_item(
Tabulas nosaukums= 'mans galds' ,
vienums={
'id' :{ 'N' : '123' },
'vārds' :{ 'S' : 'Džoels Ostins},
'
vecums ':{' N ':' 3. 4 '}
}
)

# Pārbaudiet atbildi, lai pārliecinātos, ka vienums ir veiksmīgi ievietots
ja atbilde['
ResponseMetadata '][' HTTPStatusCode '] == 200:
print ('Prece veiksmīgi ievietota')
cits:
print ('Kļūda, ievietojot vienumu')

# Iedarbiniet Lambda funkciju, kas ir abonēta
mans galds ' tabula
atbilde = lambda_client.invoke(
Function,
InvocationType='
Pasākums ',
LogType='
Aste ',
Payload='
{ 'Rekordi' :[{ 'dinamodb' :{ 'Jauns attēls' :{ 'id' :{ 'N' : '123' }, 'vārds' :{ 'S' : 'Džoels Ostins' }, 'vecums' :{ 'N' : '3. 4' }}}}]} '
)

# Pārbaudiet atbildi, lai pārliecinātos, ka funkcija ir veiksmīgi aktivizēta
ja atbilde['
Statusa kods '] == 202:
print ('Lambda funkcija veiksmīgi aktivizēta')
cits:
print ('Kļūda, iedarbinot Lambda funkciju')

Šis kods vispirms ievieto vienumu mytable tabulā un pēc tam aktivizē mana funkcija Lambda funkcija, nosūtot notikuma lietderīgās slodzes paraugu funkcijai, izmantojot piesaukt metodi. Notikuma slodze simulē DynamoDB straumes notikumu, kas ietver tikko ievietotā vienuma jauno attēlu.

Pēc tam varat pārbaudīt Lambda funkcijas žurnālus, lai redzētu, vai tā ir veiksmīgi aktivizējusi un apstrādājusi notikumu datus.

Secinājums

Ir svarīgi atzīmēt, ka vienam un tam pašam straumes ierakstam varat izsaukt vairākas reizes, ka DynamoDB straume var aktivizēt Lambda funkciju. Galvenais iemesls tam ir tas, ka straumes ieraksti galu galā ir konsekventi un vienu un to pašu ierakstu var apstrādāt vairākas reizes, izmantojot funkciju Lambda. Ir ļoti svarīgi izstrādāt Lambda funkciju, lai pareizi rīkoties ar šo lietu.