DynamoDB Streamek Lambdával

Dynamodb Streamek Lambdaval



A DynamoDB Streams az Amazon DynamoDB egyik funkciója, amely lehetővé teszi, hogy valós idejű adatfolyamot kapjon a DynamoDB táblákon végrehajtott módosításokról vagy adatmódosításokról. Ezzel a funkcióval olyan alkalmazásokat hozhat létre, amelyek reagálnak a DynamoDB táblák adatváltozásaira, például a gyorsítótárak frissítésére és az értesítések küldésére.

Természetesen a DynamoDB Streams segítségével is elindíthatja a downstream folyamatokat és az AWS Lambda funkcióit. A Lambda értelemszerűen egy kiszolgáló nélküli számítási szolgáltatás, amely az eseményekre válaszul futtatja a kódot, és automatikusan kezeli a számítási erőforrásokat.

A Lambda segítségével Node.js, Python, Java vagy C# nyelven írhatja meg a kódot a folyamrekordok feldolgozásához és a megfelelő intézkedések megtételéhez. A DynamoDB Streams és a Lambda integrálásának fő előnye, hogy a Lambda lehetővé teszi a támogatott szolgáltatások vagy alkalmazáskódok futtatását adminisztráció nélkül.







Az AWS DynamoDB Streams használata a Lambdával

Bár lehetséges olyan Lambda-függvény létrehozása, amely felhasználja az eseményeket és az előfordulásokat a DynamoDB Streamből, a folyamat meglehetősen nehézkes lehet, különösen az első próbálkozásra. A következő lépések segítenek:



1. lépés: Győződjön meg arról, hogy rendszere megfelel az előfeltételeknek

Ez az eljárás csak akkor lesz sikeres, ha ismeri az alapvető Lambda műveleteket és folyamatokat. Ezért ez legyen az első, hogy megbizonyosodjon arról, hogy a lambdát átlagon felüli értelmezése van.



A második megfontolandó előfeltétel a rendszer AWS verziójának megerősítése. A következő parancsot használhatja:





aws – verzió

A megadott parancs eredményének így kell kinéznie:

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

A megadott mintaválasz tartalmazza az AWS CLI telepített verzióját ( aws-cli/2.x.x ), a Python verzió ( Python/3.x.x ), és az operációs rendszer ( Linux/4.x.x-xxx-std ). A válasz utolsó része határozza meg a Botocore könyvtár verzióját, amelyen az AWS CLI fut ( botocore/2.x.x ).



Ezért valami ilyesmit fogsz kapni:

2. lépés: Hozzon létre egy végrehajtási szerepet

A következő lépés egy végrehajtási szerep létrehozása az AWS CLI-ben. A végrehajtási szerepkör egy AWS Identity and Access Management (IAM) szerepkör, amelyet egy AWS-szolgáltatás vesz fel a feladatok elvégzésére az Ön nevében. Hozzáférést biztosít az AWS-erőforrásokhoz, amelyekre az út során szüksége lesz.

Szerepkört a következő paranccsal hozhat létre:

aws iam Create-role \

--role-name LambdaDynamoDBExecutionRole \

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

--leírás 'AWSLambdaDynamoDBExecutionRole' \

--szolgáltatás neve lambda.amazonaws.com

Az előző parancs egy AWS CLI parancs szerep létrehozásához. Az Amazon Management Console segítségével is létrehozhat egy szerepkört. Miután az IAM konzolnál van, nyissa meg a Szerepek oldalra, és kattintson a Szerep létrehozása gomb.

Folytassa a következő beírásával:

  • Megbízható entitás: Lambda
  • Szerep neve: lambda-dynamodb-role
  • Engedélyek: AWSLambdaDynamoDBExecutionRole

A Pythont úgy is használhatja, hogy először telepíti az AWS SDK-t Pythonhoz:

pip telepítése boto3

3. lépés: Engedélyezze a DynamoDB adatfolyamokat az asztalon

Engedélyeznie kell a DynamoDB adatfolyamokat az asztalon. Ehhez az illusztrációhoz a Boto3, AWS SDK-t használjuk Pythonhoz. A következő parancs segít:

import boto3

# Csatlakozzon a DynamoDB szolgáltatáshoz
dynamodb = boto3.client( 'dinamodb' )

# Engedélyezze a DynamoDB adatfolyamokat a „my-table” táblán
válasz = dynamodb.update_table(
Táblanév= 'mytable' ,
StreamSpecification={
'StreamEnabled' : igaz,
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# Ellenőrizze a választ, hogy megbizonyosodjon arról, hogy az adatfolyam sikeresen engedélyezve lett
ha válasz[ 'StreamSpecification' ][ 'StreamEnabled' ]:
nyomtatás( 'A DynamoDB adatfolyam sikeresen engedélyezve' )
más:
nyomtatás( 'Hiba a DynamoDB adatfolyam engedélyezése során' )

Ez a kód lehetővé teszi a DynamoDB adatfolyamot a „mytable” táblán, amely az elemek új és régi képfájljait is streameli, amint bármilyen változás történik. Dönthet úgy, hogy csak az új képeket streameli, amint a StreamViewType a „NEW_IMAGE” formátumba kerül.

Nevezetesen, ennek a kódnak a futtatása csak egy idő után engedélyezi az adatfolyamokat az asztalokon. Ehelyett a folyamat eltarthat egy ideig. A description_table metódussal ellenőrizheti a folyam állapotát.

4. lépés: A lambda függvény létrehozása

A következő lépés egy Lambda függvény létrehozása, amely elindítja a DynamoDB adatfolyamot. A következő lépések segíthetnek:

  • Nyissa meg az AWS Lambda konzolt, és kattintson a „Funkció létrehozása” fülre. A „Funkció létrehozása” oldalon válassza a „Szerző a semmiből” lehetőséget, és adja meg a függvény nevét. Ezen a ponton meg kell adnia a futási idejét is. A Pythont választottuk ehhez az illusztrációhoz.
  • A „Végrehajtási szerepkör kiválasztása vagy létrehozása” részben válassza az „Új szerepkör létrehozása alapvető Lambda-engedélyekkel” lehetőséget, hogy létrehozzon egy IAM-szerepet a Lambda-funkcióhoz szükséges engedélyekkel.
  • Kattintson a „Funkció létrehozása” gombra a Lambda funkció létrehozásához.
  • A funkcióhoz tartozó „Konfiguráció” oldalon görgessen le a „Tervező” részhez, és kattintson az „Indító hozzáadása” fülre.
  • A megjelenő „Trigger konfiguráció” mezőben válassza ki a „DynamoDB” elemet a „Trigger” legördülő menüből.
  • Válassza ki azt a DynamoDB táblát, amelyet használni szeretne a függvény indításához. Ha elkészült, válassza ki, hogy a függvényt a táblázat összes frissítésénél vagy csak bizonyos frissítéseknél (például bizonyos oszlopok frissítésénél) kívánja aktiválni.
  • Kattintson a „Hozzáadás” gombra a trigger létrehozásához.
  • A „Funkciókód” szerkesztőben írja be a függvény Python-kódját. A függvénynek átadott eseményobjektumot használhatja a függvényt kiváltó adatok eléréséhez.
  • Kattintson a „Mentés” gombra a funkció mentéséhez.

Csak ez történik a lambda-függvény létrehozásakor! A függvény mostantól minden alkalommal aktiválódik, amikor frissítések vannak a megadott DynamoDB táblához.

Íme egy példa egy egyszerű Python-függvényre, amelyet a DynamoDB adatfolyam aktiválhat:

def lambda_handler(esemény, kontextus):

az eseményben[ 'Rekordok' ]:

print(record[ 'dinamodb' ][ 'Új kép' ])

Ez a függvény iterál az eseményobjektum rekordjain, és kinyomtatja az elem új képét a DynamoDB táblában, amely elindítja a függvényt.

5. lépés: Tesztelje a lambda funkciót

A DynamoDB adatfolyam által kiváltható Lambda-függvény teszteléséhez használhatja a boto3 könyvtárat a DynamoDB API eléréséhez és a hivatkozni módszere a Lambda kliens a funkció elindításához.

Íme egy példa, hogyan kell csinálni:

import boto3

# Csatlakozzon a DynamoDB szolgáltatáshoz
dynamodb = boto3.client( 'dinamodb' )

# Csatlakozzon a Lambda szolgáltatáshoz
lambda_client = boto3.client( 'lambda' )

# Szúrjon be egy elemet a 'my-table' táblába
válasz = dynamodb.put_item(
Táblanév= 'mytable' ,
item={
'azonosító' :{ 'N' : '123' },
'név' :{ 'S' : 'Joel Austin},
'
kor ':{' N ':' 3. 4 '}
}
)

# Ellenőrizze a választ, hogy megbizonyosodjon arról, hogy az elem sikeresen beillesztésre került
ha válasz['
ResponseMetadata '][' HTTPStatusCode '] == 200:
print ('Elem sikeresen beszúrva')
más:
print('Hiba az elem beszúrásakor')

# Indítsa el a Lambda funkciót, amely előfizetett a '
én-asztal ' asztal
válasz = lambda_client.invoke(
Function,
InvocationType='
Esemény ',
LogType='
Farok ',
Payload='
{ 'Rekordok' :[{ 'dinamodb' :{ 'Új kép' :{ 'azonosító' :{ 'N' : '123' }, 'név' :{ 'S' : 'Joel Austin' }, 'kor' :{ 'N' : '3. 4' }}}}]} '
)

# Ellenőrizze a választ, hogy megbizonyosodjon arról, hogy a funkció sikeresen aktiválódott
ha válasz['
ÁllapotKód '] == 202:
print('A lambda funkció sikeresen aktiválva')
más:
print('Hiba a lambda funkció aktiválásakor')

Ez a kód először beszúr egy elemet a mytable táblázatot, majd kiváltja a funkcióm Lambda funkciót úgy, hogy egy mintaesemény hasznos adatot küld a függvénynek a segítségével hivatkozni módszer. Az esemény hasznos adata egy DynamoDB adatfolyam-eseményt szimulál, amely tartalmazza az éppen beillesztett elem új képét.

Ezután ellenőrizheti a Lambda funkció naplóit, hogy megnézze, sikeresen aktiválta és feldolgozta-e az eseményadatokat.

Következtetés

Létfontosságú megjegyezni, hogy ugyanazon adatfolyam rekordhoz többször is meghívhat egy DynamoDB adatfolyam Lambda függvényt. Ennek elsődleges oka az, hogy a stream rekordok végül konzisztensek, és ugyanazt a rekordot többször is feldolgozhatja a Lambda függvény. Kulcsfontosságú a lambda funkció megtervezése, hogy ezt az esetet megfelelően kezelje.