DynamoDB-streams met Lambda

Dynamodb Streams Met Lambda



DynamoDB Streams is een functie in Amazon DynamoDB waarmee u een realtime stroom van wijzigingen of gegevenswijzigingen kunt krijgen die in uw DynamoDB-tabellen zijn aangebracht. U kunt deze functie gebruiken om de toepassingen te bouwen die reageren op gegevenswijzigingen in DynamoDB-tabellen, zoals het bijwerken van caches en het verzenden van meldingen.

Natuurlijk kunt u de DynamoDB Streams ook gebruiken om de stroomafwaartse processen en AWS Lambda-functies te activeren. Lambda is per definitie een serverloze rekenservice die uw code uitvoert als reactie op gebeurtenissen en automatisch de rekenbronnen voor u beheert.

U kunt Lambda gebruiken om de code in Node.js, Python, Java of C# te schrijven om de streamrecords te verwerken en passende acties te ondernemen. Het belangrijkste voordeel van het integreren van de DynamoDB Streams met Lambda is dat Lambda u in staat stelt om de ondersteunde services of applicatiecodes uit te voeren zonder dat er administratie nodig is.







Hoe de AWS DynamoDB-streams met Lambda te gebruiken

Hoewel het mogelijk is om een ​​Lambda-functie te maken die de gebeurtenissen en gebeurtenissen van een DynamoDB-stream verbruikt, kan het proces behoorlijk lastig zijn, vooral bij uw eerste poging. De volgende stappen zullen helpen:



Stap 1: Zorg ervoor dat uw systeem voldoet aan de vereisten

Deze procedure zal alleen succesvol zijn als u de basis Lambda-bewerkingen en -processen kent. Dit zou dus de eerste moeten zijn om ervoor te zorgen dat uw begrip van Lambda bovengemiddeld is.



De tweede vereiste die het overwegen waard is, is het bevestigen van de AWS-versie van uw systeem. U kunt de volgende opdracht gebruiken:





aws-versie

Het resultaat voor de opgegeven opdracht zou er als volgt uit moeten zien:

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

Het gegeven voorbeeldantwoord bevat de geïnstalleerde versie van de AWS CLI ( aws-cli/2.x.x ), de Python-versie ( Python/3.x.x ) en het besturingssysteem ( Linux/4.x.x-xxx-std ). Het laatste deel van het antwoord definieert de Botocore-bibliotheekversie waarop uw AWS CLI draait ( botocore/2.x.x ).



Je krijgt dus zoiets als dit:

Stap 2: Creëer een uitvoeringsrol

De volgende stap is het aanmaken van een uitvoeringsrol in AWS CLI. Een uitvoeringsrol is een AWS Identity and Access Management (IAM)-rol die wordt aangenomen door een AWS-service om de taken namens u uit te voeren. Het geeft u toegang tot AWS-bronnen die u onderweg nodig zult hebben.

U kunt een rol maken met behulp van de volgende opdracht:

aws iam maak-rol \

--role-name LambdaDynamoDBExecutionRole \

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

--Beschrijving ' AWSLambdaDynamoDBExecutionRole' \

--servicenaam lambda.amazonaws.com

De vorige opdracht is een AWS CLI-opdracht om een ​​rol te maken. U kunt ook de Amazon Management Console gebruiken om een ​​rol aan te maken. Zodra u bij de IAM-console bent, opent u het Rollen pagina en klik op de Maak een rol knop.

Ga verder met het invoeren van het volgende:

  • Vertrouwde entiteit: Lambda
  • Rolnaam: lambda-dynamodb-rol
  • Machtigingen: AWSLambdaDynamoDBExecutionRole

U kunt Python ook gebruiken door eerst de AWS SDK voor Python te installeren:

pip installeer boto3

Stap 3: schakel de DynamoDB-streams op uw tafel in

U moet de DynamoDB-streams op uw tafel inschakelen. Voor deze illustratie gebruiken we de Boto3, AWS SDK voor Python. De volgende opdracht zal helpen:

boto3 importeren

# Maak verbinding met de DynamoDB-service
dynamodb = boto3.client( 'dynamodb' )

# Schakel DynamoDB-streams in op de 'my-table'-tabel
antwoord = dynamodb.update_table(
Tabelnaam= 'mijn tafel' ,
Streamspecificatie={
'Stream ingeschakeld' : WAAR,
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# Controleer het antwoord om er zeker van te zijn dat de stream met succes is ingeschakeld
als antwoord[ 'Streamspecificatie' ][ 'Stream ingeschakeld' ]:
afdrukken( 'DynamoDB-stream ingeschakeld' )
anders:
afdrukken( 'Fout bij inschakelen DynamoDB-stream' )

Deze code maakt de DynamoDB-stream op de 'mytable' -tabel mogelijk die zowel de nieuwe als de oude afbeeldingen van items streamt zodra er wijzigingen optreden. Je kunt ervoor kiezen om de nieuwe beelden pas te streamen zodra het StreamViewType op “NEW_IMAGE” staat.

Met name het uitvoeren van deze code kan de streams op uw tafels pas na een tijdje inschakelen. In plaats daarvan kan het proces enige tijd duren. U kunt de methode description_table gebruiken om de status van de stream te controleren.

Stap 4: Maak de Lambda-functie

De volgende stap is het maken van een Lambda-functie die de DynamoDB-stream activeert. De volgende stappen zouden moeten helpen:

  • Open de AWS Lambda-console en klik op het tabblad 'Functie maken'. Kies op de pagina 'Functie maken' de optie 'Author from scratch' en voer een naam in voor uw functie. U moet op dit punt ook uw looptijd invoeren. We hebben Python gekozen voor deze illustratie.
  • Selecteer onder 'Een uitvoeringsrol kiezen of maken' de optie 'Een nieuwe rol maken met basis Lambda-machtigingen' om een ​​IAM-rol aan te maken met de benodigde machtigingen voor uw Lambda-functie.
  • Klik op de knop 'Functie maken' om uw Lambda-functie te maken.
  • Blader op de pagina 'Configuratie' voor uw functie omlaag naar het gedeelte 'Ontwerper' en klik op het tabblad 'Trigger toevoegen'.
  • Selecteer in het vak 'Trigger-configuratie' dat verschijnt 'DynamoDB' in het vervolgkeuzemenu 'Trigger'.
  • Selecteer de DynamoDB-tabel die u wilt gebruiken om de functie te activeren. Als u klaar bent, kiest u of u de functie wilt activeren bij alle updates van de tabel of alleen bij specifieke updates (zoals updates voor bepaalde kolommen).
  • Klik op de knop 'Toevoegen' om de trigger te maken.
  • Schrijf in de editor 'Functiecode' de Python-code voor uw functie. U kunt het gebeurtenisobject gebruiken dat aan uw functie wordt doorgegeven om toegang te krijgen tot de gegevens die de functie activeren.
  • Klik op de knop 'Opslaan' om de functie op te slaan.

Dat is alles wat er gebeurt bij het maken van een Lambda-functie! Uw functie wordt nu geactiveerd wanneer er updates zijn voor de opgegeven DynamoDB-tabel.

Hier is een voorbeeld van een eenvoudige Python-functie die de DynamoDB-stream kan activeren:

def lambda_handler(gebeurtenis, context):

voor record in evenement[ 'Records' ]:

afdrukken(opnemen[ 'dynamodb' ][ 'Nieuw beeld' ])

Deze functie doorloopt de records in het gebeurtenisobject en drukt de nieuwe afbeelding af van het item in de DynamoDB-tabel dat de functie activeert.

Stap 5: Test de Lambda-functie

Om een ​​Lambda-functie te testen die een DynamoDB-stream kan activeren, kunt u de boto3 bibliotheek om toegang te krijgen tot de DynamoDB API en de aanroepen methode van de Lambda client om de functie te activeren.

Hier is een voorbeeld van hoe het moet:

boto3 importeren

# Maak verbinding met de DynamoDB-service
dynamodb = boto3.client( 'dynamodb' )

# Maak verbinding met de Lambda-service
lambda_client = boto3.client( 'lambda' )

# Plaats een item in de 'mijn-tafel'-tabel
antwoord = dynamodb.put_item(
Tabelnaam= 'mijn tafel' ,
Artikel={
'ID kaart' :{ 'N' : '123' },
'naam' :{ 'S' : 'Joël Austin},
'
leeftijd ':{' N ':' 3. 4 '}
}
)

# Controleer het antwoord om er zeker van te zijn dat het item met succes is ingevoegd
als antwoord['
ReactieMetadata '][' HTTP-statuscode '] == 200:
print('Item succesvol ingevoegd')
anders:
print('Fout bij invoegen item')

# Activeer de Lambda-functie die is geabonneerd op de '
mijn tafel ' tafel
antwoord = lambda_client.invoke(
Functienaam='
mijnfunctie ',
InvocationType='
Evenement ',
LogType='
Staart ',
Laadvermogen='
{ 'Records' :[{ 'dynamodb' :{ 'Nieuw beeld' :{ 'ID kaart' :{ 'N' : '123' }, 'naam' :{ 'S' : 'Joël Austin' }, 'leeftijd' :{ 'N' : '3. 4' }}}}]} '
)

# Controleer het antwoord om er zeker van te zijn dat de functie met succes is geactiveerd
als antwoord['
Status code '] == 202:
print ('Lambda-functie succesvol geactiveerd')
anders:
print('Fout bij triggeren Lambda-functie')

Deze code voegt eerst een item in de mijn tafel tabel en activeert vervolgens de mijnfunctie Lambda-functie door een voorbeeldgebeurtenis-payload naar de functie te sturen met behulp van de aanroepen methode. De gebeurtenispayload simuleert een DynamoDB-streamgebeurtenis die de nieuwe afbeelding bevat van het item dat zojuist is ingevoegd.

U kunt vervolgens de logboeken van de Lambda-functie controleren om te zien of deze de gebeurtenisgegevens met succes heeft geactiveerd en verwerkt.

Gevolgtrekking

Het is van vitaal belang op te merken dat u meerdere keren kunt aanroepen voor dezelfde streamrecord dat een DynamoDB-stream een ​​Lambda-functie kan activeren. De belangrijkste reden hierachter is dat de streamrecords uiteindelijk consistent zijn en dat het mogelijk is om dezelfde record meerdere keren te verwerken met de Lambda-functie. Het is cruciaal om uw Lambda-functie te ontwerpen om deze zaak correct af te handelen.