Tutorial: Verwenden von AWS Lambda mit Amazon DocumentDB Streams
In diesem Tutorial erstellen Sie eine einfache Lambda-Funktion, die Ereignisse aus einem Amazon DocumentDB (mit MongoDB-Kompatibilität) Change-Stream konsumiert. Um dieses Tutorial abzuschließen, werden Sie die folgenden Phasen durchlaufen:
-
Richten Sie Ihren Amazon-DocumentDB-Cluster ein, stellen Sie eine Verbindung zu ihm her und aktivieren Sie Change-Streams darauf.
-
Erstellen Sie Ihre Lambda-Funktion und konfigurieren Sie Ihren Amazon-DocumentDB-Cluster als Ereignisquelle für Ihre Funktion.
-
Testen Sie die Einrichtung, indem Sie Elemente in Ihre Amazon-DocumentDB-Datenbank einfügen.
Erstellen Sie den Amazon DocumentDB-Cluster
-
Öffnen Sie die Amazon DocumentDB-Konsole
. Wählen Sie unter Cluster die Option Erstellen aus. -
Erstellen Sie einen Cluster mit der folgenden Konfiguration:
-
Wählen Sie als Cluster-Typ die Option Instance-basierter Cluster aus. Dies ist die Standardoption.
-
Stellen Sie sicher, dass unter Clusterkonfiguration die Engine-Version 5.0.0 ausgewählt ist. Dies ist die Standardoption.
-
Unter Instance-Konfiguration:
-
Wählen Sie für DB-Instance-Klasse die Option Speicheroptimierte Klassen aus. Dies ist die Standardoption.
-
Wählen Sie für Anzahl der regulären Replikat-Instances den Wert 1 aus.
-
Verwenden Sie für Instance-Klasse die Standardauswahl.
-
-
Geben Sie unter Authentifizierung einen Benutzernamen für den Hauptbenutzer ein und wählen Sie dann Selbstverwaltet aus. Geben Sie ein Passwort ein und bestätigen Sie es.
-
Behalten Sie die alle Standardeinstellung bei.
-
-
Wählen Sie Cluster erstellen.
Erstellen des Secrets in Secrets Manager
Während Amazon DocumentDB Ihren Cluster erstellt, erstellen Sie einen geheimen AWS Secrets Manager-Schlüssel, um Ihre Datenbank-Anmeldeinformationen zu speichern. Sie geben diesen geheimen Schlüssel an, wenn Sie in einem späteren Schritt die Zuordnung von Ereignisquellen in Lambda erstellen.
Um das Secret in Secrets Manager zu erstellen
-
Öffnen Sie die Secrets-Manager-Konsole
und wählen Sie Neues Secret speichern. -
Wählen Sie für Secret-Typ auswählen eine der folgenden Optionen aus:
-
Unter Grundlegende Details:
-
Secret-Typ: Anmeldeinformationen für die Amazon-DocumentDB-Datenbank
-
Geben Sie unter Anmeldeinformationen den Benutzernamen und das Passwort ein, den bzw. das Sie zum Erstellen Ihres Amazon-DocumentDB-Clusters verwendet haben.
-
Datenbank: Wählen Sie Ihren Amazon DocumentDB-Cluster aus.
-
Wählen Sie Weiter aus.
-
-
-
Wählen Sie unter Secret konfigurieen eine der folgenden Optionen aus:
-
Secret-Name:
DocumentDBSecret -
Wählen Sie Weiter aus.
-
-
Wählen Sie Weiter aus.
-
Wählen Sie Store (Speichern) aus.
-
Aktualisieren Sie die Konsole, um zu überprüfen, ob Sie das
DocumentDBSecret-Secret erfolgreich gespeichert haben.
Notieren Sie sich den geheimen ARN. Sie werden es in einem späteren Schritt noch benötigen.
Verbinden mit dem Cluster
Verbinden mit dem Amazon-DocumentDB-Cluster mithilfe von AWS CloudShell
-
Suchen Sie in der Amazon-DocumentDB-Verwaltungskonsole unter Cluster den von Ihnen erstellten Cluster. Wählen Sie Ihren Cluster aus, indem Sie das Kontrollkästchen daneben aktivieren.
-
Wählen Sie Mit Cluster verbinden aus. Der CloudShell-Bildschirm Befehl ausführen wird angezeigt.
-
Geben Sie im Feld Neuer Umgebungsname einen eindeutigen Namen ein, z. B. „Test“, und wählen Sie Erstellen und ausführen aus.
-
Geben Sie bei der Aufforderung Ihr Passwort ein. Wenn der Prompt zu
rs0 [direct: primary] <env-name>>wechselt, sind Sie erfolgreich mit Ihrem Amazon-DocumentDB-Cluster verbunden.
Change-Streams aktivieren
In diesem Tutorial verfolgen Sie Änderungen an der products-Sammlung der docdbdemo-Datenbank in Ihrem Amazon DocumentDB-Cluster. Sie tun dies, indem Sie Change-Streams aktivieren.
Um eine neue Datenbank in Ihrem Cluster zu erstellen
-
Führen Sie den folgenden Befehl aus, um eine neue Datenbank mit dem Namen
docdbdemozu erstellen:use docdbdemo -
Geben Sie im Terminalfenster den folgenden Befehl ein, um einen Datensatz in
docdbdemoeinzufügen:db.products.insertOne({"hello":"world"})Sie sollten eine Ausgabe wie die Folgende sehen:
{ acknowledged: true, insertedId: ObjectId('67f85066ca526410fd531d59') } -
Dann aktivieren Sie mit dem folgenden Befehl Change-Streams für die
products-Sammlung derdocdbdemo-Datenbank:db.adminCommand({modifyChangeStreams: 1, database: "docdbdemo", collection: "products", enable: true});Die Ausgabe sollte in etwa wie folgt aussehen:
{ "ok" : 1, "operationTime" : Timestamp(1680126165, 1) }
Schnittstellen-VPC-Endpunkte erstellen
Erstellen Sie als Nächstes Schnittstellen-VPC-Endpunkte, um sicherzustellen, dass Lambda und Secrets Manager (der später zum Speichern unserer Cluster-Anmeldeinformationen verwendet wird) eine Verbindung zu Ihrer Standard-VPC herstellen können.
Um Schnittstellen-VPC-Endpunkte zu erstellen
-
Öffnen Sie die VPC;-Konsole
. Wählen Sie im linken Menü unter Virtual Private Cloud die Option Endpunkte aus. -
Wählen Sie Endpunkt erstellen aus. Erstellen Sie einen Endpunkt mit der folgenden Konfiguration:
-
Geben Sie für Name Tag
lambda-default-vpcein. -
Wählen Sie unter Servicekategorie die Option AWS-Services aus.
-
Geben Sie unter Services
lambdain das Suchfeld ein. Wählen Sie den Service im Formatcom.amazonaws.<region>.lambda. -
Wählen Sie für VPC die VPC aus, in der sich Ihr Amazon-DocumentDB-Cluster befindet. Dies ist in der Regel die Standard-VPC.
-
Aktivieren Sie für Subnetze die Kästchen neben jeder Availability Zone. Wählen Sie die richtige Subnetz-ID für jede Availability Zone.
-
Wählen Sie unter IP-Adresstyp IPv4 aus.
-
Wählen Sie für Sicherheitsgruppen die Sicherheitsgruppe aus, die Ihr Amazon-DocumentDB-Cluster verwendet. Dies ist in der Regel die
default-Sicherheitsgruppe. -
Behalten Sie die alle Standardeinstellung bei.
-
Wählen Sie Endpunkt erstellen aus.
-
-
Wählen Sie erneut Endpunkt erstellen. Erstellen Sie einen Endpunkt mit der folgenden Konfiguration:
-
Geben Sie für Name Tag
secretsmanager-default-vpcein. -
Wählen Sie unter Servicekategorie die Option AWS-Services aus.
-
Geben Sie unter Services
secretsmanagerin das Suchfeld ein. Wählen Sie den Service im Formatcom.amazonaws.<region>.secretsmanager. -
Wählen Sie für VPC die VPC aus, in der sich Ihr Amazon-DocumentDB-Cluster befindet. Dies ist in der Regel die Standard-VPC.
-
Aktivieren Sie für Subnetze die Kästchen neben jeder Availability Zone. Wählen Sie die richtige Subnetz-ID für jede Availability Zone.
-
Wählen Sie unter IP-Adresstyp IPv4 aus.
-
Wählen Sie für Sicherheitsgruppen die Sicherheitsgruppe aus, die Ihr Amazon-DocumentDB-Cluster verwendet. Dies ist in der Regel die
default-Sicherheitsgruppe. -
Behalten Sie die alle Standardeinstellung bei.
-
Wählen Sie Endpunkt erstellen aus.
-
Damit ist der Abschnitt zur Einrichtung eines Clusters in diesem Tutorial abgeschlossen.
Erstellen der Ausführungsrolle
In den nächsten Schritten erstellen Sie Ihre Lambda-Funktion. Zunächst müssen Sie die Ausführungsrolle erstellen, die Ihrer Funktion die Berechtigung zum Zugriff auf Ihren Cluster gibt. Dazu erstellen Sie zunächst eine IAM-Richtlinie und verknüpfen diese dann mit einer IAM-Rolle.
So erstellen Sie eine IAM-Richtlinie
-
Öffnen Sie in der IAM-Konsole die Seite Richtlinien
und wählen Sie dann Richtlinie erstellen aus. -
Wählen Sie den Tab JSON. Ersetzen Sie in der folgenden Richtlinie den ARN der Secrets-Manager-Ressource in der letzten Zeile der Anweisung durch Ihren geheimen ARN von zuvor, und kopieren Sie die Richtlinie in den Editor.
-
Wählen Sie Weiter: Tags und dann Weiter: Prüfen aus.
-
Geben Sie unter Name
AWSDocumentDBLambdaPolicyein. -
Wählen Sie Richtlinie erstellen aus.
So erstellen Sie die IAM-Rolle
-
Öffnen Sie die Seite Rollen
in der IAM-Konsole und wählen Sie Rolle erstellen. -
Wählen Sie für Vertrauenswürdige Entität auswählen die folgenden Optionen:
-
Vertrauenswürdiger Entitätstyp: AWS-Service
-
Service oder Anwendungsfall: Lambda
-
Wählen Sie Weiter aus.
-
-
Wählen Sie unter Berechtigungen hinzufügen die
AWSDocumentDBLambdaPolicyRichtlinie aus, die Sie gerade erstellt haben, sowie dieAWSLambdaBasicExecutionRole, um Ihrer Funktion Berechtigungen zum Schreiben in Amazon CloudWatch Logs zu geben. -
Wählen Sie Weiter aus.
-
Geben Sie für Role name (Rollenname) den Namen
AWSDocumentDBLambdaExecutionRoleein. -
Wählen Sie Create role (Rolle erstellen) aus.
So erstellen Sie die Lambda-Funktion:
In diesem Tutorial wird die Python 3.13-Laufzeit verwendet. Es stehen aber auch Beispielcodedateien für andere Laufzeiten zur Verfügung. Sie können die Registerkarte im folgenden Feld auswählen, um den Code für die gewünschte Laufzeit anzusehen.
Der Code empfängt eine Amazon-DocumentDB-Ereigniseingabe und verarbeitet die darin enthaltene Nachricht.
So erstellen Sie die Lambda-Funktion:
-
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie Funktion erstellen.
-
Wählen Sie Ohne Vorgabe erstellen aus.
-
Führen Sie unter Basic information (Grundlegende Informationen) die folgenden Schritte aus:
-
Geben Sie unter Funktionsname
ProcessDocumentDBRecordsein. -
Wählen Sie für Runtime (Laufzeit) die Option Python 3.13 aus.
-
Wählen Sie für Architektur x86_64 aus.
-
-
Gehen Sie auf der Registerkarte Standard-Ausführungsrolle ändern wie folgt vor:
-
Erweitern Sie die Registerkarte und wählen Sie dann Verwenden einer vorhandenen Rolle aus.
-
Wählen Sie die zuvor erstellte
AWSDocumentDBLambdaExecutionRoleaus.
-
-
Wählen Sie Funktion erstellen.
So stellen Sie den Funktionscode bereit
-
Wählen Sie im folgenden Feld die Registerkarte Python und kopieren Sie den Code.
-
Fügen Sie den Code im Code-Quellbereich der Lambda-Konsole in den Code-Editor ein und ersetzen Sie dabei den von Lambda erstellten Code.
-
Wählen Sie im Abschnitt DEPLOY die Option Deploy aus, um den Code Ihrer Funktion zu aktualisieren:
Erstellen Sie die Zuordnung von Ereignisquellen in Lambda
Erstellen Sie die Zuordnung von Ereignisquellen, die Ihren Amazon DocumentDB-Change-Stream mit Ihrer Lambda-Funktion verknüpft. Nach dem Erstellen dieser Zuordnung von Ereignisquellen beginnt AWS Lambda sofort mit der Abfrage des Streams.
Die Zuordnung von Ereignisquellen erstellen
-
Öffnen Sie die Seite Funktionen
in der Lambda-Konsole. -
Wählen Sie die
ProcessDocumentDBRecords-Funktion aus, die Sie zuvor erstellt haben. -
Wählen Sie die Registerkarte Konfiguration und dann im linken Menü die Option Auslöser aus.
-
Wählen Sie Add trigger.
-
Wählen Sie unter Trigger-Konfiguration als Quelle die Option Amazon DocumentDB aus.
-
Erstellen Sie die Zuordnung von Ereignisquellen mit der folgenden Konfiguration:
-
Amazon-DocumentDB-Cluster: Wählen Sie den Cluster aus, den Sie zuvor erstellt haben.
-
Datenbankname: docdbdemo
-
Name der Kollektion:Produkte
-
Stapelgröße: 1
-
Startposition: Neueste
-
Authentifizierung: BASIC_AUTH
-
Secrets-Manager-Schlüssel: Wählen Sie das Secret für Ihren Amazon-DocumentDB-Cluster aus. Der Name ist ähnlich wie
rds!cluster-12345678-a6f0-52c0-b290-db4aga89274f. -
Batchfenster: 1
-
Vollständige Dokumentenkonfiguration: UpdateLookup
-
-
Wählen Sie Hinzufügen aus. Die Erstellung Ihrer Zuordnung von Ereignisquellen kann einige Minuten dauern.
Testen der -Funktion
Warten Sie, bis die Zuordnung von Ereignisquellen den Status Aktiviert erreicht hat. Dies kann mehrere Minuten dauern. Testen Sie anschließend die End-to-End-Konfiguration, indem Sie Datenbankdatensätze einfügen, aktualisieren und löschen. Bevor Sie beginnen:
-
Führen Sie den folgenden Befehl aus, um sicherzustellen, dass Sie die
docdbdemo-Datenbank verwenden:use docdbdemo
Fügen Sie einen Datensatz in die products-Sammlung der docdbdemo-Datenbank ein:
db.products.insertOne({"name":"Pencil", "price": 1.00})
Überprüfen Sie in den CloudWatch-Protokollen, ob Ihre Funktion dieses Ereignis erfolgreich verarbeitet hat. Sie sollten einen Protokolleintrag wie diesen sehen:
Aktualisieren Sie den gerade eingefügten Datensatz mit dem folgenden Befehl:
db.products.updateOne( { "name": "Pencil" }, { $set: { "price": 0.50 }} )
Überprüfen Sie in den CloudWatch-Protokollen, ob Ihre Funktion dieses Ereignis erfolgreich verarbeitet hat. Sie sollten einen Protokolleintrag wie diesen sehen:
Löschen Sie den Datensatz, den Sie gerade aktualisiert haben, mit dem folgenden Befehl:
db.products.deleteOne( { "name": "Pencil" } )
Überprüfen Sie in den CloudWatch-Protokollen, ob Ihre Funktion dieses Ereignis erfolgreich verarbeitet hat. Sie sollten einen Protokolleintrag wie diesen sehen:
Fehlerbehebung
Wenn in den CloudWatch-Protokollen Ihrer Funktion keine Datenbankereignisse angezeigt werden, prüfen Sie Folgendes:
-
Stellen Sie sicher, dass sich die Zuordnung von Ereignisquellen in Lambda (auch als Auslöser bezeichnet) im Status Aktiviert befindet. Die Zuordnung von Ereignisquellen kann mehrere Minuten in Anspruch nehmen.
-
Wenn die Zuordnung von Ereignisquellen aktiviert ist, Sie aber immer noch keine Datenbankereignisse in CloudWatch sehen:
-
Stellen Sie sicher, dass der Datenbankname in der Zuordnung von Ereignisquellen auf
docdbdemoeingestellt ist.
-
Überprüfen Sie das Feld Letztes Verarbeitungsergebnis der Zuordnung von Ereignisquellen auf die folgende Meldung: „PROBLEM: Verbindungsfehler. Ihre VPC muss eine Verbindung zu Lambda und STS sowie zu Secrets Manager herstellen können, wenn eine Authentifizierung erforderlich ist.“ Wenn diese Fehlermeldung angezeigt wird, stellen Sie sicher, dass Sie die Lambda- und Secrets-Manager-VPC-Schnittstellenendpunkte erstellt haben und dass die Endpunkte dieselbe VPC und dieselben Subnetze verwenden wie Ihr Amazon-DocumentDB-Cluster.
-
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.
Löschen von VPC-Endpunkten
-
Öffnen Sie die VPC;-Konsole
. Wählen Sie im linken Menü unter Virtual Private Cloud die Option Endpunkte aus. -
Wählen Sie die Endpunkte aus, die Sie erstellt haben.
-
Wählen Sie Actions (Aktionen), Delete VPC Endpoint (VPC-Endpunkte löschen).
-
Geben Sie
deletein das Texteingabefeld ein. -
Wählen Sie Löschen aus.
So löschen Sie den Amazon DocumentDB-Cluster
-
Öffnen Sie die Amazon DocumentDB-Konsole
. -
Wählen Sie den Amazon DocumentDB-Cluster aus, den Sie für dieses Tutorial erstellt haben, und deaktivieren Sie den Löschschutz.
-
Wählen Sie auf der Cluster-Hauptseite erneut Ihren Amazon DocumentDB-Cluster aus.
-
Wählen Sie Aktionen, Löschen aus.
-
Wählen Sie für Finalen Cluster-Snapshot erstellen die Option Nein aus.
-
Geben Sie
deletein das Texteingabefeld ein. -
Wählen Sie Löschen aus.
So löschen Sie das Secret im Secrets Manager
-
Öffnen Sie die Secrets Manager-Konsole
. -
Wählen Sie das Secret aus, das Sie für dieses Tutorial erstellt haben.
-
Wählen Sie Aktionen, Secret löschen.
-
Wählen Sie Schedule deletion.