DynamoDB-Streams mit Lambda

Dynamodb Streams Mit Lambda



DynamoDB Streams ist eine Funktion in Amazon DynamoDB, mit der Sie einen Echtzeit-Stream von Änderungen oder Datenänderungen abrufen können, die an Ihren DynamoDB-Tabellen vorgenommen werden. Sie können diese Funktion verwenden, um Anwendungen zu erstellen, die auf Datenänderungen in DynamoDB-Tabellen reagieren, z. B. Caches aktualisieren und Benachrichtigungen senden.

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

Sie können Lambda verwenden, um den Code in Node.js, Python, Java oder C# zu schreiben, um die Stream-Datensätze zu verarbeiten und entsprechende Maßnahmen zu ergreifen. Der Hauptvorteil der Integration der DynamoDB-Streams mit Lambda besteht darin, dass Lambda es Ihnen ermöglicht, die unterstützten Dienste oder Anwendungscodes ohne Verwaltungsaufwand auszuführen.







So verwenden Sie die AWS DynamoDB-Streams mit Lambda

Es ist zwar möglich, eine Lambda-Funktion zu erstellen, die die Ereignisse und Vorkommnisse aus einem DynamoDB-Stream nutzt, aber der Prozess kann ziemlich anstrengend sein, insbesondere beim ersten Versuch. Folgende Schritte helfen dabei:



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. Daher sollte dies Ihr erster sein, um sicherzustellen, dass Ihr Verständnis von Lambda überdurchschnittlich ist.



Die zweite erwägenswerte Voraussetzung ist die Bestätigung der AWS-Version Ihres Systems. Sie können den folgenden Befehl verwenden:





aws –Version

Das Ergebnis für den bereitgestellten 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 der 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 Version der Botocore-Bibliothek, auf der Ihre AWS CLI ausgeführt wird ( botocore/2.x.x ).



Sie werden daher am Ende ungefähr so ​​​​aussehen:

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 Identity and Access Management (IAM)-Rolle, die von einem AWS-Service angenommen wird, um die Aufgaben in Ihrem Namen auszuführen. Es gibt Ihnen Zugriff auf AWS-Ressourcen, die Sie unterwegs benötigen werden.

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

aws iam create-role \

--Rollenname LambdaDynamoDBExecutionRole \

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

--Bezeichnung ' AWSLambdaDynamoDBExecution-Rolle' \

--service-name lambda.amazonaws.com

Der vorherige Befehl ist ein AWS CLI-Befehl zum Erstellen einer Rolle. Sie können auch die Amazon Management Console verwenden, um eine Rolle zu erstellen. Sobald Sie sich in der IAM-Konsole befinden, öffnen Sie die Rollen Seite und klicken Sie auf die Rolle erstellen Knopf.

Fahren Sie fort, um Folgendes einzugeben:

  • Vertrauenswürdige Entität: Lambda
  • Rollenname: lambda-dynamodb-role
  • Berechtigungen: AWSLambdaDynamoDBExecutionRole

Sie können Python auch verwenden, indem Sie zuerst das AWS SDK for Python installieren:

pip installieren boto3

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

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

boto3 importieren

# Stellen Sie eine Verbindung zum DynamoDB-Dienst her
dynamodb = boto3.client ( 'dynamodb' )

# DynamoDB-Streams für die Tabelle „my-table“ aktivieren
Antwort = dynamodb.update_table(
Tabellenname= 'mein Tisch' ,
StreamSpecification={
'Streamaktiviert' : WAHR,
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# Überprüfen Sie die Antwort, um sicherzustellen, dass der Stream erfolgreich aktiviert wurde
wenn antwort[ 'StreamSpezifikation' ][ 'Streamaktiviert' ]:
drucken( 'DynamoDB-Stream erfolgreich aktiviert' )
anders:
drucken( „Fehler beim Aktivieren des DynamoDB-Streams“ )

Dieser Code aktiviert den DynamoDB-Stream in der Tabelle „mytable“, der sowohl die neuen als auch die alten Bilder von Elementen streamt, sobald Änderungen auftreten. Sie können festlegen, dass die neuen Bilder nur gestreamt werden, sobald der StreamViewType „NEW_IMAGE“ ist.

Insbesondere kann die Ausführung dieses Codes die Streams auf Ihren Tabellen erst nach einer Weile aktivieren. Stattdessen kann der Vorgang einige Zeit dauern. Sie können die Methode 'describe_table' verwenden, um den Status des Streams zu überprüfen.

Schritt 4: Erstellen Sie die Lambda-Funktion

Der nächste Schritt ist das Erstellen einer Lambda-Funktion, die den DynamoDB-Stream auslöst. Folgende 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“ „Von Grund auf neu erstellen“ und geben Sie einen Namen für Ihre Funktion ein. An dieser Stelle müssen Sie auch Ihre Laufzeit eingeben. Wir haben Python für diese Illustration ausgewählt.
  • Wählen Sie unter „Ausführungsrolle auswählen oder erstellen“ „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 nach unten zum Abschnitt „Designer“ und klicken Sie auf die Registerkarte „Trigger hinzufügen“.
  • Wählen Sie im angezeigten Feld „Trigger-Konfiguration“ im Dropdown-Menü „Trigger“ die Option „DynamoDB“ aus.
  • Wählen Sie die DynamoDB-Tabelle aus, die Sie zum Auslösen der Funktion verwenden möchten. Wenn Sie fertig sind, wählen Sie aus, ob die Funktion bei allen Aktualisierungen der Tabelle oder nur bei bestimmten Aktualisierungen (z. B. Aktualisierungen bestimmter Spalten) ausgelöst werden soll.
  • Klicken Sie auf die Schaltfläche „Hinzufügen“, um den Trigger zu erstellen.
  • Schreiben Sie im Editor „Funktionscode“ den Python-Code für Ihre Funktion. Sie können das an Ihre Funktion übergebene Ereignisobjekt verwenden, 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 es Aktualisierungen an der angegebenen DynamoDB-Tabelle gibt.

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

def lambda_handler(Ereignis, Kontext):

für Rekord in Veranstaltung[ 'Aufzeichnungen' ]:

drucken(aufzeichnen[ 'dynamodb' ][ 'Neues Bild' ])

Diese Funktion durchläuft die Datensätze im Ereignisobjekt und gibt das neue Bild des Elements in der DynamoDB-Tabelle aus, das 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 boto3 Bibliothek für den 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

# Stellen Sie eine Verbindung zum DynamoDB-Dienst her
dynamodb = boto3.client ( 'dynamodb' )

# Stellen Sie eine Verbindung zum Lambda-Dienst her
lambda_client = boto3.client ( 'Lambdas' )

# Fügen Sie ein Element in die 'my-table'-Tabelle ein
Antwort = dynamodb.put_item (
Tabellenname= 'mein Tisch' ,
Artikel={
'Ich würde' :{ 'N' : '123' },
'Name' :{ 'S' : 'Joel Austin},
'
das Alter ':{' N ':' 3. 4 '}
}
)

# Überprüfen Sie die Antwort, um sicherzustellen, dass das Element erfolgreich eingefügt wurde
wenn antwort['
Antwortmetadaten '][' HTTPStatusCode '] == 200:
print('Artikel erfolgreich eingefügt')
anders:
print('Fehler beim Einfügen des Elements')

# Auslösen der Lambda-Funktion, die abonniert ist '
mein Tisch ' Tisch
Antwort = lambda_client.invoke (
Funktions,
InvocationType='
Fall ',
LogType='
Schwanz ',
Nutzlast='
{ 'Aufzeichnungen' :[{ 'dynamodb' :{ 'Neues Bild' :{ 'Ich würde' :{ 'N' : '123' }, 'Name' :{ 'S' : 'Joel Austin' }, 'das Alter' :{ 'N' : '3. 4' }}}}]} '
)

# Ü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('Fehler beim Auslösen der Lambda-Funktion')

Dieser Code fügt zuerst ein Element in die ein mein Tisch Tabelle und löst dann die aus meineFunktion Lambda-Funktion durch Senden einer Beispielereignisnutzlast an die Funktion mithilfe von 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 hat.

Fazit

Es ist wichtig zu beachten, dass Sie mehrmals für denselben Stream-Datensatz aufrufen können, dass ein DynamoDB-Stream eine Lambda-Funktion auslösen kann. Der Hauptgrund dafür ist, dass die Stream-Datensätze letztendlich konsistent sind und es möglich ist, denselben Datensatz mehrmals von der Lambda-Funktion zu verarbeiten. Es ist entscheidend, Ihre Lambda-Funktion so zu gestalten, dass sie diesen Fall korrekt handhabt.