Tutorial: Verwenden von AWS Lambda mit Amazon DynamoDB Streams
In diesem Tutorial erstellen Sie eine Lambda-Funktion zum Verarbeiten von Ereignissen aus einem Amazon-DynamoDB-Stream.
Voraussetzungen
Wenn Sie die AWS Command Line Interface noch nicht installiert haben, folgen Sie den Schritten unter Installieren oder Aktualisieren der neuesten Version von AWS CLI, um diese zu installieren.
Das Tutorial erfordert zum Ausführen von Befehlen ein Befehlszeilenterminal oder eine Shell. Verwenden Sie unter Linux und macOS Ihre bevorzugte Shell und Ihren bevorzugten Paketmanager.
Anmerkung
In Windows werden einige Bash-CLI-Befehle, die Sie häufig mit Lambda verwenden (z. B. zip), von den integrierten Terminals des Betriebssystems nicht unterstützt. Um eine in Windows integrierte Version von Ubuntu und Bash zu erhalten, installieren Sie das Windows-Subsystem für Linux
Erstellen der Ausführungsrolle
Erstellen Sie die Ausführungsrolle die Ihrer Funktion die Berechtigung für den Zugriff auf AWS-Ressourcen erteilt.
So erstellen Sie eine Ausführungsrolle
-
Öffnen Sie die Seite Roles (Rollen)
in der IAM-Konsole. -
Wählen Sie Create role aus.
-
Erstellen Sie eine Rolle mit den folgenden Eigenschaften.
-
Vertrauenswürdige Entität – Lambda.
-
Berechtigungen – AWSLambdaDynamoDBExecutionRole.
-
Role name (Name der Rolle –
lambda-dynamodb-role.
-
Die AWSLambdaDynamoDBExecutionRole verfügt über die Berechtigungen, die die Funktion zum Lesen von Elementen aus DynamoDB und zum Schreiben von Protokollen in CloudWatch Logs benötigt.
Erstellen der Funktion
Erstellen Sie eine Lambda-Funktion, die Ihre DynamoDB-Ereignisse verarbeitet. Der Funktionscode schreibt einige der eingehenden Ereignisdaten in CloudWatch Logs.
So erstellen Sie die Funktion
-
Kopieren Sie den Beispiel-Code in eine Datei mit dem Namen
example.js. -
Erstellen Sie ein Bereitstellungspaket.
zip function.zip example.js -
Erstellen Sie eine Lambda-Funktion mit dem Befehl
create-function.aws lambda create-function --function-name ProcessDynamoDBRecords \ --zip-file fileb://function.zip --handler example.handler --runtime nodejs22.x \ --role arn:aws:iam::111122223333:role/lambda-dynamodb-role
Lambda-Funktion testen
In diesem Schritt rufen Sie Ihre Lambda-Funktion manuell mit dem invoke-CLI-Befehl AWS Lambda und dem folgenden DynamoDB-Beispielereignis auf. Kopieren Sie den folgenden Code in eine Datei mit dem Namen input.txt.
Beispiel input.txt
{ "Records":[ { "eventID":"1", "eventName":"INSERT", "eventVersion":"1.0", "eventSource":"aws:dynamodb", "awsRegion":"us-east-1", "dynamodb":{ "Keys":{ "Id":{ "N":"101" } }, "NewImage":{ "Message":{ "S":"New item!" }, "Id":{ "N":"101" } }, "SequenceNumber":"111", "SizeBytes":26, "StreamViewType":"NEW_AND_OLD_IMAGES" }, "eventSourceARN":"stream-ARN" }, { "eventID":"2", "eventName":"MODIFY", "eventVersion":"1.0", "eventSource":"aws:dynamodb", "awsRegion":"us-east-1", "dynamodb":{ "Keys":{ "Id":{ "N":"101" } }, "NewImage":{ "Message":{ "S":"This item has changed" }, "Id":{ "N":"101" } }, "OldImage":{ "Message":{ "S":"New item!" }, "Id":{ "N":"101" } }, "SequenceNumber":"222", "SizeBytes":59, "StreamViewType":"NEW_AND_OLD_IMAGES" }, "eventSourceARN":"stream-ARN" }, { "eventID":"3", "eventName":"REMOVE", "eventVersion":"1.0", "eventSource":"aws:dynamodb", "awsRegion":"us-east-1", "dynamodb":{ "Keys":{ "Id":{ "N":"101" } }, "OldImage":{ "Message":{ "S":"This item has changed" }, "Id":{ "N":"101" } }, "SequenceNumber":"333", "SizeBytes":38, "StreamViewType":"NEW_AND_OLD_IMAGES" }, "eventSourceARN":"stream-ARN" } ] }
Führen Sie den Befehl invoke aus.
aws lambda invoke --function-name ProcessDynamoDBRecords \ --cli-binary-format raw-in-base64-out \ --payload file://input.txt outputfile.txt
Die cli-binary-format-Option ist erforderlich, wenn Sie AWS CLI Version 2 verwenden. Um dies zur Standardeinstellung zu machen, führen Sie aws configure set cli-binary-format raw-in-base64-out aus. Weitere Informationen finden Sie unter Von AWS CLI unterstützte globale Befehlszeilenoptionen im AWS Command Line Interface-Benutzerhandbuch für Version 2.
Die Funktion gibt die Zeichenfolge message im Antworttext zurück.
Überprüfen Sie die Ausgabe in der Datei outputfile.txt.
Erstellen einer DynamoDB-Tabelle mit einem aktivierten Stream
Erstellen einer Amazon-DynamoDB-Tabelle mit einem aktivierten Stream.
So erstellen Sie eine DynamoDB-Tabelle
-
Öffnen Sie die DynamoDB-Konsole
. -
Wählen Sie Create table aus.
-
Erstellen Sie eine Tabelle mit den folgenden Einstellungen:
-
Tabellenname –
lambda-dynamodb-stream -
Primärschlüssel –
id(Zeichenfolge)
-
-
Wählen Sie Create aus.
So aktivieren Sie Streams
-
Öffnen Sie die DynamoDB-Konsole
. -
Wählen Sie Tables (Tabellen) aus.
-
Wählen Sie die Tabelle lambda-dynamodb-stream aus.
-
Wählen Sie unter Exports and streams (Exporte und Streams) die Option DynamoDB stream details (Details zu DynamoDB-Streams) aus.
-
Wählen Sie Turn on (Einschalten) aus.
-
Wählen Sie als Ansichtstyp die Option Nur Schlüsselattribute aus.
-
Wählen Sie Stream einschalten.
Notieren Sie sich den Stream-ARN. Sie benötigen diesen im nächsten Schritt, um die Lambda-Funktion dem Stream zuzuordnen. Weitere Informationen zur Aktivierung von Streams finden Sie unter Erfassen von Tabellenaktivitäten mit DynamoDB Streams.
Hinzufügen einer Ereignisquelle in AWS Lambda
Erstellen Sie eine Ereignisquellenzuordnung in AWS Lambda. Diese Ereignisquellenzuordnung ordnet den DynamoDB-Stream Ihrer Lambda-Funktion zu. Nach dem Erstellen dieser Ereignisquellenzuordnung beginnt AWS Lambda mit der Abfrage des Streams.
Führen Sie den folgenden AWS CLI-create-event-source-mapping-Befehl aus. Notieren Sie sich die UUID, nachdem Sie den Befehl ausgeführt haben. Sie benötigen diese UUID, um in Befehlen auf die Ereignisquellenzuordnung zu verweisen (beispielsweise beim Löschen der Ereignisquellen-Zuweisung).
aws lambda create-event-source-mapping --function-name ProcessDynamoDBRecords \ --batch-size 100 --starting-position LATEST --event-sourceDynamoDB-stream-arn
Dadurch wird eine Zuweisung zwischen dem angegebenen DynamoDB-Stream und der Lambda-Funktion erstellt. Sie können einen DynamoDB-Stream mehreren Lambda-Funktionen und dieselbe Lambda-Funktion mehreren Streams zuordnen. Die Lambda-Funktionen teilen jedoch den Lesedurchsatz für den geteilten Stream.
Sie erhalten die Liste der Ereignisquellen-Zuweisungen, indem Sie folgenden Befehl ausführen.
aws lambda list-event-source-mappings
Die Liste gibt alle von Ihnen erstellten Ereignisquellenzuordnungen zurück und für jede Zuordnung zeigt sie u. a. den LastProcessingResult. Dieses Feld wird verwendet, um eine informative Meldung bereitzustellen, wenn Probleme auftreten. Werte wie No records processed (gibt an, dass AWS Lambda nicht mit der Abfrage begonnen hat oder dass keine Datensätze im Stream vorhanden sind) und OK (gibt an, dass AWS Lambda erfolgreich Datensätze aus dem Stream gelesen und Ihre Lambda-Funktion aufgerufen hat) geben an, dass es keine Probleme gibt. Bei Problemen erhalten Sie eine Fehlermeldung.
Bei einer großen Anzahl von Ereignisquellen-Zuweisungen verwenden Sie den Funktionsnamen-Parameter, um die Ergebnisse einzugrenzen.
aws lambda list-event-source-mappings --function-name ProcessDynamoDBRecords
Testen der Einrichtung
Testen Sie die durchgehende Erfahrung. Beim Aktualisieren der Tabelle schreibt DynamoDB Ereignisdatensätze in den Stream. Da AWS Lambda den Stream abfragt, erkennt es neue Datensätze im Stream und ruft Ihre Lambda-Funktion für Sie auf, indem Ereignisse an die Funktion übergeben werden.
-
Fügen Sie in der DynamoDB-Konsole Elemente hinzu, aktualisieren und löschen Sie diese und fügen Sie diese hinzu. DynamoDB schreibt Datensätze dieser Aktionen in den Stream.
-
AWS Lambda fragt den Stream ab und ruft bei Erkennung von Aktualisierungen im Stream Ihre Lambda-Funktion auf, indem die Ereignisdaten aus dem Stream weitergegeben werden.
-
Ihre Funktion wird ausgeführt und erstellt Protokolle in Amazon CloudWatch. Sie können die in der Amazon-CloudWatch-Konsole gemeldeten Protokolle überprüfen.
Nächste Schritte
In diesem Tutorial haben Sie die Grundlagen der Verarbeitung von DynamoDB-Stream-Ereignissen mit Lambda kennengelernt. Bei Produktions-Workloads sollten Sie erwägen, eine Logik für teilweise Batch-Antworten zu implementieren, um einzelne Datensatzfehler effizienter zu handhaben. Das Batch-Prozessor-Dienstprogramm
Bereinigen Ihrer Ressourcen
Sie können jetzt die Ressourcen, die Sie für dieses Tutorial erstellt haben, löschen, es sei denn, Sie möchten sie behalten. Durch das Löschen von AWS-Ressourcen, die Sie nicht mehr verwenden, können Sie verhindern, dass unnötige Gebühren in Ihrem AWS-Konto-Konto anfallen.
So löschen Sie die Lambda-Funktion:
-
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie die Funktion aus, die Sie erstellt haben.
-
Wählen Sie Actions, Delete.
-
Geben Sie
confirmin das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.
So löschen Sie die Ausführungsrolle
-
Öffnen Sie die Seite Roles
in der IAM-Konsole. -
Wählen Sie die von Ihnen erstellte Ausführungsrolle aus.
-
Wählen Sie Löschen aus.
-
Geben Sie den Namen der Rolle in das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.
So löschen Sie die DynamoDB-Tabelle
-
Öffnen Sie die Seite Tables (Tabellen)
in der DynamoDB-Konsole. -
Wählen Sie die von Ihnen erstellte Tabelle aus.
-
Wählen Sie Delete (Löschen).
-
Geben Sie
deletein das Textfeld ein. -
Wählen Sie Delete Table (Tabelle löschen).