DynamoDB -Streams mit Lambda

DynamoDB -Streams mit Lambda
DynamoDB Streams ist eine Funktion in Amazon DynamoDB, mit der Sie einen Echtzeitstrom von Änderungen oder Datenänderungen erhalten können, die an Ihren DynamoDB-Tabellen vorgenommen werden. Sie können diese Funktion verwenden, um die Anwendungen zu erstellen, die auf Datenänderungen in DynamoDB -Tabellen reagieren, z. B. das Aktualisieren von Caches und das Senden von Benachrichtigungen.

Natürlich können Sie auch die DynamoDB -Streams verwenden, um die nachgeschalteten Prozesse und AWS -Lambda -Funktionen auszulösen. Lambda ist per Definition ein serverloser Rechendienst, der Ihren Code als Antwort auf Ereignisse ausführt und die Rechenressourcen für Sie automatisch verwaltet.

Sie können Lambda verwenden, um den Code in den Knoten zu schreiben.JS, Python, Java oder C#, um die Stream -Datensätze zu verarbeiten und geeignete Maßnahmen zu ergreifen. Der Hauptvorteil bei der Integration der DynamoDB -Streams in Lambda besteht darin, dass Sie mit Lambda die gesicherten Dienste oder Anwendungscodes ausführen können, ohne dass die Verwaltung erforderlich ist.

So verwenden Sie die AWS -Dynamodb -Streams mit Lambda

Während es möglich ist, eine Lambda -Funktion zu erstellen, die die Ereignisse und Ereignisse aus einem DynamoDB -Stream verbraucht, kann der Prozess insbesondere bei Ihrem ersten Versuch eine ziemlich Aufgabe sein. Die folgenden Schritte helfen:

Schritt 1: Stellen Sie sicher, dass Ihr System die Voraussetzungen erfüllt

Dieses Verfahren ist nur erfolgreich, wenn Sie die grundlegenden Lambda -Operationen und -Prozesse kennen. Dies sollte daher Sie erster sein, um sicherzustellen, dass Ihr Verständnis von Lambda überdurchschnittlich liegt.

Die zweite Voraussetzung, die es wert ist, die AWS -Version Ihres Systems zu bestätigen. Sie können den folgenden Befehl verwenden:

AWS -Version

Das Ergebnis für den angegebenen Befehl sollte wie folgt aussehen:

AWS-CLI/2.X.x python/3.X.x Linux/4.X.x-xxx-std botocore/2.X.X

Die angegebene Beispielantwort enthält die installierte Version des AWS CLI (AWS-CLI/2.X.X), die Python -Version (Python/3.X.X) und das Betriebssystem (Linux/4.X.X-XXX-STD). Der letzte Teil der Antwort definiert die Botocore -Bibliotheksversion, auf der Ihre AWS -CLI ausgeführt wird (Botocore/2.X.X).

Sie werden daher so etwas enden:

Schritt 2: Erstellen Sie eine Ausführungsrolle

Der nächste Schritt besteht darin, eine Ausführungsrolle in AWS CLI zu erstellen. Eine Ausführungsrolle ist eine AWS -Identitäts- und Zugriffsmanagement -Rolle (IAM), die von einem AWS -Dienst übernommen wird, um die Aufgaben in Ihrem Namen auszuführen. Sie erhalten Zugriff auf AWS -Ressourcen, die Sie auf dem Weg benötigen.

Mit dem folgenden Befehl können Sie eine Rolle erstellen:

aws iam create-role \
--Rollenname Lambdadynamodbexecutionrol \
--Annahme-Role-Policy-Dokument-Datei: // assout-role-policy.json \
--Beschreibung "awslambdadynamodbexecutionrol" \
--Service-name Lambda.Amazonawen.com

Der vorherige Befehl ist ein AWS -CLI -Befehl, um eine Rolle zu erstellen. Sie können auch die Amazon -Managementkonsole verwenden, um eine Rolle zu erstellen. Sobald Sie bei der IAM -Konsole sind, öffnen Sie die Rollen Seite und klicken Sie auf die Rolle erstellen Taste.

Geben Sie Folgendes fort:

  • Vertrauenswürdige Einheit: Lambda
  • Rollenname: Lambda-Dynamodb-Role
  • Berechtigungen: awslambdadynamodbexecutionrol

Sie können Python auch verwenden, indem Sie zuerst das AWS SDK für Python installieren:

PIP Installieren Sie Boto3

Schritt 3: Aktivieren Sie die DynamoDB -Streams in Ihrer Tabelle

Sie müssen die DynamoDB -Streams in Ihrer Tabelle aktivieren. Für diese Illustration verwenden wir den Boto3, AWS SDK für Python. Der folgende Befehl hilft:

Boto3 importieren
# Verbinden Sie den DynamoDB -Dienst
DynamoDB = Boto3.Client ('DynamoDB')
# Aktivieren Sie DynamoDB-Streams in der Tabelle "My-table"
Antwort = DynamoDB.update_table (
TableName = 'mytable',
StreamSpecification =
'Streamababled': wahr,
'StreamViewType': 'new_and_old_images' '

)
# Überprüfen Sie die Antwort, um sicherzustellen, dass der Stream erfolgreich aktiviert wurde
Wenn Antwort ['StreamSpecification'] ['Streamababled']:
print ("DynamoDB Stream erfolgreich aktiviert"))
anders:
print ("Fehler aktivieren DynamoDB -Stream")

Dieser Code ermöglicht den DynamoDB -Stream in der Tabelle „Mytable“, in der sowohl die neuen als auch die alten Bilder von Elementen gestreamt werden, sobald Änderungen auftreten. Sie können die neuen Bilder nur nach dem StreamViewType auf "new_image" streamen.

Insbesondere kann das Ausführen dieses Codes die Streams in Ihren Tabellen nach einer Weile nur aktivieren. Stattdessen kann der Prozess einige Zeit dauern. Sie können mit der Methode cribs_table den Status des Streams überprüfen.

Schritt 4: Erstellen Sie die Lambda -Funktion

Der nächste Schritt besteht darin, eine Lambda -Funktion zu erstellen, die den DynamoDB -Stream auslöst. Die folgenden Schritte sollten helfen:

  • Öffnen Sie die AWS Lambda -Konsole und klicken Sie auf die Registerkarte "Funktion erstellen". Wählen Sie auf der Seite "Funktion erstellen", wählen Sie "Autor von Grund auf" und geben Sie einen Namen für Ihre Funktion ein. Sie müssen zu diesem Zeitpunkt auch Ihre Laufzeit eingeben. Wir haben Python für diese Illustration ausgewählt.
  • Wählen Sie unter „Wählen oder Erstellen einer Ausführungsrolle“ „eine neue Rolle mit grundlegenden Lambda -Berechtigungen erstellen“, um eine IAM -Rolle mit den erforderlichen Berechtigungen für Ihre Lambda -Funktion zu erstellen.
  • Klicken Sie auf die Schaltfläche „Funktion erstellen“, um Ihre Lambda -Funktion zu erstellen.
  • Scrollen Sie auf der Seite "Konfiguration" für Ihre Funktion zum Abschnitt "Designer" und klicken Sie auf die Registerkarte "Trigger hinzufügen".
  • Wählen Sie im Feld "Auslöserkonfiguration" im Dropdown -Menü "DynamoDB" "DynamoDB" aus.
  • Wählen Sie die DynamoDB -Tabelle aus, die Sie verwenden möchten, um die Funktion auszulösen. Sobald Sie fertig sind, wählen Sie, ob die Funktion in allen Aktualisierungen der Tabelle oder nur in bestimmten Updates (z. B. Aktualisierungen zu bestimmten Spalten) ausgelöst werden soll.
  • Klicken Sie auf die Schaltfläche "Hinzufügen", um den Auslöser zu erstellen.
  • Schreiben Sie im Editor „Funktionscode“ den Python -Code für Ihre Funktion. Sie können das Ereignisobjekt verwenden, das an Ihre Funktion übergeben wird, um auf die Daten zuzugreifen, die die Funktion auslösen.
  • Klicken Sie auf die Schaltfläche "Speichern", um die Funktion zu speichern.

Das ist alles, was beim Erstellen einer Lambda -Funktion passiert! Ihre Funktion wird jetzt ausgelöst, wenn die angegebenen DynamoDB -Tabelle aktualisiert wird.

Hier ist ein Beispiel für eine einfache Python -Funktion, die der DynamoDB -Stream auslösen kann:

Def lambda_handler (Ereignis, Kontext):
Für Record in Event ['Records']:
print (record ['dynamodb'] ['newImage'])

Diese Funktion durchläuft die Datensätze im Ereignisobjekt und druckt das neue Bild des Elements in der Dynamodb -Tabelle aus, die die Funktion auslöst.

Schritt 5: Testen Sie die Lambda -Funktion

Um eine Lambda -Funktion zu testen, die ein DynamoDB -Stream auslösen kann, können Sie die verwenden Boto3 Bibliothek zum Zugriff auf die DynamoDB -API und die aufrufen Methode der Lambda Client, um die Funktion auszulösen.

Hier ist ein Beispiel, wie es geht:

Boto3 importieren
# Verbinden Sie den DynamoDB -Dienst
DynamoDB = Boto3.Client ('DynamoDB')
# Verbinden Sie den Lambda -Service
lambda_client = boto3.Kunde ('Lambda')
# Fügen Sie einen Element in die Tabelle "My-table" ein
Antwort = DynamoDB.put_item (
TableName = 'mytable',
Item =
'id': 'n': '123',
'Name': 's': 'Joel Austin,
'Alter': 'n': '34'

)
# Überprüfen Sie die Antwort, um sicherzustellen, dass das Element erfolgreich eingefügt wurde
Wenn Antwort ['ResponseMetadata'] ['httpstatuscode'] == 200:
print ("erfolgreich eingefügt")
anders:
print ("Fehlereinfügungselement")
# Die Lambda-Funktion auslösen, die der Tabelle "My-table" abonniert ist
response = lambda_client.aufrufen(
FunktionName = 'myfunction',
InvocationType = 'Ereignis',
LogType = 'schwanz',
Payload = '"records": ["dynamodb": "newImage": "id": "n": "123", "Name": "S": "Joel Austin", " Alter ": " n ":" 34 "] '
)
# Überprüfen Sie die Antwort, um sicherzustellen, dass die Funktion erfolgreich ausgelöst wurde
Wenn Antwort ['Statuscode'] == 202:
print ("Lambda -Funktion erfolgreich ausgelöst"))
anders:
print ("Fehlerlösen Lambda -Funktion")

Dieser Code fügt zunächst ein Element in die ein mein Tisch Tisch und löst dann die aus Myfunktion Lambda -Funktion durch Senden einer Beispielereignis -Nutzlast an die Funktion mit der Funktion aufrufen Methode. Die Ereignisnutzlast simuliert ein DynamoDB -Stream -Ereignis, das das neue Bild des gerade eingefügten Elements enthält.

Sie können dann die Protokolle der Lambda -Funktion überprüfen, um festzustellen, ob sie die Ereignisdaten erfolgreich ausgelöst und verarbeitet haben.

Abschluss

Es ist wichtig zu beachten, dass Sie für denselben Stream -Datensatz mehrmals aufrufen können. Der Hauptgrund dafür ist, dass die Stream -Datensätze letztendlich konsistent sind und es möglich ist, dasselbe Datensatz von der Lambda -Funktion mehrfach zu verarbeiten. Es ist entscheidend, Ihre Lambda -Funktion zu entwerfen, um diesen Fall korrekt zu behandeln.