Tutorial: Verwendung AWS Lambda mit Amazon DocumentDB DocumentDB-Streams - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial: Verwendung AWS Lambda mit Amazon DocumentDB 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 das end-to-end Setup, indem Sie Elemente in Ihre Amazon DocumentDB DocumentDB-Datenbank einfügen.

Voraussetzungen

Wenn Sie noch keine haben AWS-Konto, führen Sie die folgenden Schritte aus, um eine zu erstellen.

Um sich für eine anzumelden AWS-Konto
  1. Öffnen Sie https://portal.aws.amazon.com/billing/die Anmeldung.

  2. Folgen Sie den Online-Anweisungen.

    Bei der Anmeldung müssen Sie auch einen Telefonanruf entgegennehmen und einen Verifizierungscode über die Telefontasten eingeben.

    Wenn Sie sich für eine anmelden AWS-Konto, Root-Benutzer des AWS-Kontoswird eine erstellt. Der Root-Benutzer hat Zugriff auf alle AWS-Services und Ressourcen des Kontos. Als bewährte Sicherheitsmethode weisen Sie einem Administratorbenutzer Administratorzugriff zu und verwenden Sie nur den Root-Benutzer, um Aufgaben auszuführen, die Root-Benutzerzugriff erfordern.

AWS sendet Ihnen nach Abschluss des Anmeldevorgangs eine Bestätigungs-E-Mail. Sie können Ihre aktuellen Kontoaktivitäten jederzeit einsehen und Ihr Konto verwalten, indem Sie zu https://aws.amazon.com/gehen und Mein Konto auswählen.

Nachdem Sie sich für einen angemeldet haben AWS-Konto, sichern Sie Ihren Root-Benutzer des AWS-Kontos AWS IAM Identity Center, aktivieren und erstellen Sie einen Administratorbenutzer, sodass Sie den Root-Benutzer nicht für alltägliche Aufgaben verwenden.

Sichern Sie Ihre Root-Benutzer des AWS-Kontos
  1. Melden Sie sich AWS Management Consoleals Kontoinhaber an, indem Sie Root-Benutzer auswählen und Ihre AWS-Konto E-Mail-Adresse eingeben. Geben Sie auf der nächsten Seite Ihr Passwort ein.

    Hilfe bei der Anmeldung mit dem Root-Benutzer finden Sie unter Anmelden als Root-Benutzer im AWS-Anmeldung Benutzerhandbuch zu.

  2. Aktivieren Sie die Multi-Faktor-Authentifizierung (MFA) für Ihren Root-Benutzer.

    Anweisungen finden Sie im Benutzerhandbuch unter Aktivieren eines virtuellen MFA Geräts für Ihren AWS-Konto IAM Root-Benutzer (Konsole).

Erstellen eines Benutzers mit Administratorzugriff
  1. Aktivieren Sie IAM Identity Center.

    Anweisungen finden Sie unter Aktivieren AWS IAM Identity Center im AWS IAM Identity Center Benutzerhandbuch.

  2. Gewähren Sie einem Benutzer in IAM Identity Center Administratorzugriff.

    Ein Tutorial zur Verwendung von IAM-Identity-Center-Verzeichnis als Identitätsquelle finden Sie unter Benutzerzugriff mit der Standardeinstellung konfigurieren IAM-Identity-Center-Verzeichnis im AWS IAM Identity Center Benutzerhandbuch.

Anmelden als Administratorbenutzer
Weiteren Benutzern Zugriff zuweisen
  1. Erstellen Sie in IAM Identity Center einen Berechtigungssatz, der der bewährten Methode zur Anwendung von Berechtigungen mit den geringsten Rechten folgt.

    Anweisungen hierzu finden Sie unter Berechtigungssatz erstellen im AWS IAM Identity Center Benutzerhandbuch.

  2. Weisen Sie Benutzer einer Gruppe zu und weisen Sie der Gruppe dann Single Sign-On-Zugriff zu.

    Eine genaue Anleitung finden Sie unter Gruppen hinzufügen im AWS IAM Identity Center Benutzerhandbuch.

Wenn Sie das noch nicht installiert haben AWS Command Line Interface, folgen Sie den Schritten unter Installieren oder Aktualisieren der neuesten Version von AWS CLI, um es 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 CLI Bash-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 Sie die Umgebung AWS Cloud9

Schritt 1: Erstellen Sie eine AWS Cloud9 Umgebung

Bevor Sie die Lambda-Funktion erstellen, müssen Sie Ihren Amazon-DocumentDB-Cluster erstellen und konfigurieren. Die Schritte zum Einrichten Ihres Clusters in diesem Tutorial basieren auf dem Verfahren unter Erste Schritte mit Amazon DocumentDB.

Anmerkung

Wenn Sie bereits einen Amazon DocumentDB-Cluster eingerichtet haben, stellen Sie sicher, dass Sie Change-Streams aktivieren und die erforderlichen VPC Schnittstellenendpunkte erstellen. Anschließend können Sie direkt mit den Schritten zur Funktionserstellung fortfahren.

Erstellen Sie zunächst eine AWS Cloud9 Umgebung. In diesem Tutorial verwenden Sie diese Umgebung, um eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herzustellen und ihn abzufragen.

Um eine Umgebung zu erstellen AWS Cloud9
  1. Öffnen Sie die AWS Cloud9 Konsole und wählen Sie Umgebung erstellen.

  2. Erstellen Sie eine Umgebung mit der folgenden Konfiguration:

    • Unter Details:

      • Name (Name: DocumentDBCloud9Environment

      • Umgebungstyp: Neue EC2 Instanz

    • Unter Neue EC2 Instanz:

      • Instanztyp: t2.micro (1 GiB RAM + 1 vCPU)

      • Plattform: Amazon Linux 2

      • Timeout: 30 Minuten

    • Unter Netzwerkeinstellungen:

      • Verbindung: AWS Systems Manager () SSM

      • Erweitern Sie das VPCDrop-down-Menü mit den Einstellungen.

      • Amazon Virtual Private Cloud (VPC): Wählen Sie Ihre Standardeinstellung. VPC

      • Subnetz: Keine Präferenz

    • Behalten Sie die alle Standardeinstellung bei.

  3. Wählen Sie Create (Erstellen) aus. Die Bereitstellung Ihrer neuen AWS Cloud9 Umgebung kann mehrere Minuten dauern.

Erstellen Sie die EC2 Amazon-Sicherheitsgruppe

Schritt 2: Erstellen Sie eine EC2 Amazon-Sicherheitsgruppe

Als Nächstes erstellen Sie eine EC2Amazon-Sicherheitsgruppe mit Regeln, die den Datenverkehr zwischen Ihrem Amazon DocumentDB-Cluster und Ihrer AWS Cloud9 Umgebung zulassen.

Um eine EC2 Sicherheitsgruppe zu erstellen
  1. Öffnen Sie die EC2Konsole. Wählen Sie unter Netzwerk und Sicherheit die Option Sicherheitsgruppen aus.

  2. Wählen Sie Sicherheitsgruppe erstellen aus.

  3. Erstellen Sie eine Sicherheitsgruppe mit der folgenden Konfiguration:

    • Unter Grundlegende Details:

      • Security group name (Name der Sicherheitsgruppe: DocDBTutorial

      • Beschreibung: Sicherheitsgruppe für den Verkehr zwischen AWS Cloud9 und Amazon DocumentDB.

      • VPC: Wählen Sie Ihre Standardeinstellung VPC.

    • Wählen Sie unter Inbound rules (Regeln für eingehenden Datenverkehr) die Option Add rule (Regel hinzufügen). Erstellen Sie eine Regel mit der folgenden Konfiguration:

      • Typ: Benutzerdefiniert TCP

      • Portbereich: 27017

      • Quelle: Benutzerdefiniert

      • Wählen Sie im Suchfeld neben Quelle die Sicherheitsgruppe für die AWS Cloud9 Umgebung aus, die Sie im vorherigen Schritt erstellt haben. Um eine Liste der verfügbaren Sicherheitsgruppen anzuzeigen, geben Sie cloud9 in das Suchfeld ein. Wählen Sie die Sicherheitsgruppe mit dem Namen aws-cloud9-<environment_name> aus.

    • Behalten Sie die alle Standardeinstellung bei.

  4. Wählen Sie Sicherheitsgruppe erstellen aus.

Erstellen Sie den Amazon DocumentDB-Cluster

Schritt 3: Erstellen Sie einen Amazon DocumentDB-Cluster

In diesem Schritt erstellen Sie einen Amazon DocumentDB-Cluster mit der Sicherheitsgruppe aus dem vorherigen Schritt.

So erstellen Sie einen Amazon DocumentDB-Cluster
  1. Öffnen Sie die Amazon DocumentDB DocumentDB-Konsole. Wählen Sie unter Cluster die Option Erstellen aus.

  2. Erstellen Sie einen Cluster mit der folgenden Konfiguration:

    • Wählen Sie als Cluster-Typ die Option Instance-basierter Cluster aus.

    • Unter Konfiguration:

      • Engine-Version: 5.0.0

      • Instanzklasse: db.t3.medium (für eine kostenlose Testversion geeignet)

      • Anzahl der Instanzen: 1

    • Unter Authentifizierung:

      • Geben Sie den Benutzernamen und das Passwort ein, die für die Verbindung mit Ihrem Cluster erforderlich sind (dieselben Anmeldeinformationen, mit denen Sie das Geheimnis im vorherigen Schritt erstellt haben). Bestätigen Sie unter Passwort bestätigen Ihr Passwort.

    • Aktivieren Sie Erweiterte Einstellungen anzeigen.

    • Unter Netzwerkeinstellungen:

      • Virtual Private Cloud (VPC): Wählen Sie Ihren Standard VPC.

      • Subnetzgruppe: Standard

      • VPCSicherheitsgruppen: Wählen Sie zusätzlich die DocDBTutorial (VPC) Sicherheitsgruppe ausdefault (VPC), die Sie im vorherigen Schritt erstellt haben.

    • Behalten Sie die alle Standardeinstellung bei.

  3. Wählen Sie Cluster erstellen. Die Bereitstellung Ihres Amazon DocumentDB-Clusters kann mehrere Minuten dauern.

Erstellen des Secrets in Secrets Manager

Schritt 4: Erstellen Sie ein Geheimnis in Secrets Manager

Um manuell auf Ihren Amazon DocumentDB-Cluster zuzugreifen, müssen Sie einen Benutzernamen und ein Passwort angeben. Damit Lambda auf Ihren Cluster zugreifen kann, müssen Sie bei der Einrichtung Ihrer Zuordnung von Ereignisquellen ein Secret in Secrets Manager angeben, das die gleichen Anmeldeinformationen enthält. In diesem Schritt erstellen Sie dieses Secret.

Um das Secret in Secrets Manager zu erstellen
  1. Öffnen Sie die Secrets-Manager-Konsole und wählen Sie Neues Secret speichern.

  2. Wählen Sie für Secret-Typ auswählen eine der folgenden Optionen aus:

    • Unter Grundlegende Details:

      • Geheimer Typ: Anmeldeinformationen für Ihre Amazon DocumentDB DocumentDB-Datenbank

      • Geben Sie unter Anmeldeinformationen den Benutzernamen und das Passwort ein, die Sie für den Zugriff auf Ihren Amazon DocumentDB-Cluster verwenden.

      • Datenbank: Wählen Sie Ihren Amazon DocumentDB-Cluster.

      • Wählen Sie Weiter.

  3. Wählen Sie unter Secret konfigurieen eine der folgenden Optionen aus:

    • Geheimer NameDocumentDBSecret

    • Wählen Sie Weiter.

  4. Wählen Sie Weiter.

  5. Wählen Sie Store (Speichern) aus.

  6. Aktualisieren Sie die Konsole, um zu überprüfen, ob Sie das DocumentDBSecret-Secret erfolgreich gespeichert haben.

Notieren Sie sich das Geheimnis ARN Ihres Geheimnisses. Sie werden es in einem späteren Schritt noch benötigen.

Installieren der mongo-Shell

Schritt 5 Installieren der mongo-Shell

In diesem Schritt installieren Sie die Mongo-Shell in Ihrer AWS Cloud9 Umgebung. Die Mongo-Shell ist ein Befehlszeilenprogramm, mit dem Sie eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herstellen und ihn abfragen können.

Um die Mongo-Shell in Ihrer Umgebung zu installieren AWS Cloud9
  1. Öffnen Sie die AWS Cloud9 -Konsole. Klicken Sie neben der DocumentDBCloud9Environment Umgebung, die Sie zuvor erstellt haben, auf den Link Öffnen in der AWS Cloud9 IDESpalte.

  2. Erstellen Sie im Terminal-Fenster die MongoDB-Repository-Datei mit dem folgenden Befehl:

    echo -e "[mongodb-org-5.0] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/5.0/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc" | sudo tee /etc/yum.repos.d/mongodb-org-5.0.repo
  3. Installieren Sie daraufhin die mongo-Shell mit dem folgenden Befehl:

    sudo yum install -y mongodb-org-shell
  4. Um Daten während der Übertragung zu verschlüsseln, laden Sie den öffentlichen Schlüssel für Amazon DocumentDB. Der folgende Befehl lädt eine Datei mit dem Namen global-bundle.pem herunter:

    wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

Connect zum Amazon DocumentDB-Cluster her

Schritt 6 Stellen Sie eine Verbindung zum Amazon DocumentDB-Cluster her

Sie sind jetzt bereit, über die Mongo-Shell eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herzustellen.

So stellen Sie eine Verbindung zu Ihrem Amazon DocumentDB-Cluster her
  1. Öffnen Sie die Amazon DocumentDB DocumentDB-Konsole. Wählen Sie unter Cluster Ihren Cluster aus, indem Sie seine Cluster-ID auswählen.

  2. Wählen Sie auf der Registerkarte Konnektivität und Sicherheit unter Mit der Mongo-Shell mit diesem Cluster Connect die Option Kopieren aus.

  3. Fügen Sie diesen Befehl in Ihrer AWS Cloud9 Umgebung in das Terminal ein. Ersetzen Sie <insertYourPassword> durch das richtige Passwort.

Wenn nach der Eingabe dieses Befehls die Eingabeaufforderung auf rs0:PRIMARY> gesetzt wird, sind Sie mit Ihrem Amazon DocumentDB-Cluster verbunden.

Change-Streams aktivieren

Schritt 7 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. Erstellen Sie zunächst die docdbdemo-Datenbank und testen Sie sie, indem Sie einen Datensatz einfügen.

Um eine neue Datenbank in Ihrem Cluster zu erstellen
  1. Stellen Sie in Ihrer AWS Cloud9 Umgebung sicher, dass Sie immer noch mit Ihrem Amazon DocumentDB-Cluster verbunden sind.

  2. Erstellen Sie mit dem folgenden Befehl im Terminal-Fenster eine neue Datenbank mit dem Namen docdbdemo:

    use docdbdemo
  3. Verwenden Sie dann den folgenden Befehl, um einen Datensatz einzufügen docdbdemo:

    db.products.insert({"hello":"world"})

    Die Ausgabe sollte in etwa wie folgt aussehen:

    WriteResult({ "nInserted" : 1 })
  4. Verwenden Sie den folgenden Befehl, um alle Datenbanken aufzulisten:

    show dbs

    Stellen Sie sicher, dass Ihre Ausgabe die docdbdemo-Datenbank enthält:

    docdbdemo 0.000GB

Dann aktivieren Sie mit dem folgenden Befehl Change-Streams für die products-Sammlung der docdbdemo-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) }

Erstellen Sie Schnittstellen-Endpunkte VPC

Schritt 8: Schnittstellen-Endpunkte VPC erstellen

Als Nächstes erstellen Sie VPCSchnittstellenendpunkte, um sicherzustellen, dass Lambda und Secrets Manager (die später zum Speichern unserer Cluster-Zugangsdaten verwendet werden) eine Verbindung zu Ihrem Standard herstellen können. VPC

Um Schnittstellen-Endpunkte zu erstellen VPC
  1. Öffnen Sie die VPCKonsole. Wählen Sie im linken Menü unter Virtual Private Cloud die Option Endpunkte aus.

  2. Wählen Sie Endpunkt erstellen aus. Erstellen Sie einen Endpunkt mit der folgenden Konfiguration:

    • Geben Sie für Name Tag lambda-default-vpc ein.

    • Wählen Sie als Dienstkategorie die Option AWS Dienste aus.

    • Geben Sie unter Services lambda in das Suchfeld ein. Wählen Sie den Service im Format com.amazonaws.<region>.lambda.

    • Wählen Sie für VPCIhre Standardeinstellung 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 als IP-AdresstypIPv4.

    • Wählen Sie für Sicherheitsgruppen die VPC Standardsicherheitsgruppe (Gruppenname vondefault) und die Sicherheitsgruppe, die Sie zuvor erstellt haben (Gruppenname vonDocDBTutorial).

    • Behalten Sie die alle Standardeinstellung bei.

    • Wählen Sie Endpunkt erstellen aus.

  3. Wählen Sie erneut Endpunkt erstellen. Erstellen Sie einen Endpunkt mit der folgenden Konfiguration:

    • Geben Sie für Name Tag secretsmanager-default-vpc ein.

    • Wählen Sie als Dienstkategorie die Option AWS Dienste aus.

    • Geben Sie unter Services secretsmanager in das Suchfeld ein. Wählen Sie den Service im Format com.amazonaws.<region>.secretsmanager.

    • Wählen Sie für VPCIhre Standardeinstellung 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 als IP-AdresstypIPv4.

    • Wählen Sie für Sicherheitsgruppen die VPC Standardsicherheitsgruppe (Gruppenname vondefault) und die Sicherheitsgruppe, die Sie zuvor erstellt haben (Gruppenname vonDocDBTutorial).

    • 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

Schritt 9 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 fügen diese Richtlinie dann einer IAM Rolle hinzu.

Um eine Richtlinie zu erstellen IAM
  1. Öffnen Sie die Seite Richtlinien in der IAM Konsole und wählen Sie Richtlinie erstellen aus.

  2. Wählen Sie die JSONRegisterkarte. Ersetzen Sie in der folgenden Richtlinie die Secrets Manager Manager-Ressource ARN in der letzten Zeile der Anweisung durch Ihr Geheimnis ARN von früher und kopieren Sie die Richtlinie in den Editor.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "LambdaESMNetworkingAccess", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "LambdaDocDBESMAccess", "Effect": "Allow", "Action": [ "rds:DescribeDBClusters", "rds:DescribeDBClusterParameters", "rds:DescribeDBSubnetGroups" ], "Resource": "*" }, { "Sid": "LambdaDocDBESMGetSecretValueAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:DocumentDBSecret" } ] }
  3. Wählen Sie Weiter: Tags und dann Weiter: Prüfen aus.

  4. Geben Sie unter Name AWSDocumentDBLambdaPolicy ein.

  5. Wählen Sie Create Policy (Richtlinie erstellen) aus.

So erstellen Sie die IAM-Rolle
  1. Öffnen Sie die Seite Rollen in der IAM Konsole und wählen Sie Rolle erstellen aus.

  2. Wählen Sie für Vertrauenswürdige Entität auswählen die folgenden Optionen:

    • Vertrauenswürdiger Entitätstyp — AWS Dienst

    • Anwendungsfall — Lambda

    • Wählen Sie Weiter.

  3. Wählen Sie für Berechtigungen hinzufügen die AWSDocumentDBLambdaPolicy Richtlinie aus, die Sie gerade erstellt haben, sowie die, AWSLambdaBasicExecutionRole um Ihrer Funktion Berechtigungen zum Schreiben in Amazon CloudWatch Logs zu erteilen.

  4. Wählen Sie Weiter.

  5. Geben Sie für Role name (Rollenname) den Namen AWSDocumentDBLambdaExecutionRole ein.

  6. Wählen Sie Create role (Rolle erstellen) aus.

So erstellen Sie die Lambda-Funktion:

Schritt 10 Erstellen der Lambda-Funktion

Der folgende Beispielcode empfängt eine Amazon DocumentDB DocumentDB-Ereigniseingabe und verarbeitet die darin enthaltene Nachricht.

Go
SDKfür Go V2
Anmerkung

Es gibt noch mehr dazu GitHub. Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Verwenden eines Amazon DocumentDB DocumentDB-Ereignisses mit Lambda mithilfe von Go.

package main import ( "context" "encoding/json" "fmt" "github.com/aws/aws-lambda-go/lambda" ) type Event struct { Events []Record `json:"events"` } type Record struct { Event struct { OperationType string `json:"operationType"` NS struct { DB string `json:"db"` Coll string `json:"coll"` } `json:"ns"` FullDocument interface{} `json:"fullDocument"` } `json:"event"` } func main() { lambda.Start(handler) } func handler(ctx context.Context, event Event) (string, error) { fmt.Println("Loading function") for _, record := range event.Events { logDocumentDBEvent(record) } return "OK", nil } func logDocumentDBEvent(record Record) { fmt.Printf("Operation type: %s\n", record.Event.OperationType) fmt.Printf("db: %s\n", record.Event.NS.DB) fmt.Printf("collection: %s\n", record.Event.NS.Coll) docBytes, _ := json.MarshalIndent(record.Event.FullDocument, "", " ") fmt.Printf("Full document: %s\n", string(docBytes)) }
JavaScript
SDKfür JavaScript (v3)
Anmerkung

Es gibt noch mehr dazu GitHub. Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Verwenden eines Amazon DocumentDB DocumentDB-Ereignisses mit Lambda. JavaScript

console.log('Loading function'); exports.handler = async (event, context) => { event.events.forEach(record => { logDocumentDBEvent(record); }); return 'OK'; }; const logDocumentDBEvent = (record) => { console.log('Operation type: ' + record.event.operationType); console.log('db: ' + record.event.ns.db); console.log('collection: ' + record.event.ns.coll); console.log('Full document:', JSON.stringify(record.event.fullDocument, null, 2)); };

Ein Amazon DocumentDB DocumentDB-Ereignis mit Lambda verwenden TypeScript

import { DocumentDBEventRecord, DocumentDBEventSubscriptionContext } from 'aws-lambda'; console.log('Loading function'); export const handler = async ( event: DocumentDBEventSubscriptionContext, context: any ): Promise<string> => { event.events.forEach((record: DocumentDBEventRecord) => { logDocumentDBEvent(record); }); return 'OK'; }; const logDocumentDBEvent = (record: DocumentDBEventRecord): void => { console.log('Operation type: ' + record.event.operationType); console.log('db: ' + record.event.ns.db); console.log('collection: ' + record.event.ns.coll); console.log('Full document:', JSON.stringify(record.event.fullDocument, null, 2)); };
PHP
SDK für PHP
Anmerkung

Es gibt noch mehr dazu. GitHub Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Verwenden eines Amazon DocumentDB DocumentDB-Ereignisses mit Lambda. PHP

<?php require __DIR__.'/vendor/autoload.php'; use Bref\Context\Context; use Bref\Event\Handler; class DocumentDBEventHandler implements Handler { public function handle($event, Context $context): string { $events = $event['events'] ?? []; foreach ($events as $record) { $this->logDocumentDBEvent($record['event']); } return 'OK'; } private function logDocumentDBEvent($event): void { // Extract information from the event record $operationType = $event['operationType'] ?? 'Unknown'; $db = $event['ns']['db'] ?? 'Unknown'; $collection = $event['ns']['coll'] ?? 'Unknown'; $fullDocument = $event['fullDocument'] ?? []; // Log the event details echo "Operation type: $operationType\n"; echo "Database: $db\n"; echo "Collection: $collection\n"; echo "Full document: " . json_encode($fullDocument, JSON_PRETTY_PRINT) . "\n"; } } return new DocumentDBEventHandler();
Python
SDKfür Python (Boto3)
Anmerkung

Es gibt noch mehr dazu. GitHub Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Verwenden eines Amazon DocumentDB DocumentDB-Ereignisses mit Lambda mithilfe von Python.

import json def lambda_handler(event, context): for record in event.get('events', []): log_document_db_event(record) return 'OK' def log_document_db_event(record): event_data = record.get('event', {}) operation_type = event_data.get('operationType', 'Unknown') db = event_data.get('ns', {}).get('db', 'Unknown') collection = event_data.get('ns', {}).get('coll', 'Unknown') full_document = event_data.get('fullDocument', {}) print(f"Operation type: {operation_type}") print(f"db: {db}") print(f"collection: {collection}") print("Full document:", json.dumps(full_document, indent=2))
Ruby
SDKfür Ruby
Anmerkung

Es gibt noch mehr dazu GitHub. Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Verwenden eines Amazon DocumentDB DocumentDB-Ereignisses mit Lambda unter Verwendung von Ruby.

require 'json' def lambda_handler(event:, context:) event['events'].each do |record| log_document_db_event(record) end 'OK' end def log_document_db_event(record) event_data = record['event'] || {} operation_type = event_data['operationType'] || 'Unknown' db = event_data.dig('ns', 'db') || 'Unknown' collection = event_data.dig('ns', 'coll') || 'Unknown' full_document = event_data['fullDocument'] || {} puts "Operation type: #{operation_type}" puts "db: #{db}" puts "collection: #{collection}" puts "Full document: #{JSON.pretty_generate(full_document)}" end
Rust
SDKfür Rust
Anmerkung

Es gibt noch mehr dazu GitHub. Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Verwenden eines Amazon DocumentDB DocumentDB-Ereignisses mit Lambda mithilfe von Rust.

use lambda_runtime::{service_fn, tracing, Error, LambdaEvent}; use aws_lambda_events::{ event::documentdb::{DocumentDbEvent, DocumentDbInnerEvent}, }; // Built with the following dependencies: //lambda_runtime = "0.11.1" //serde_json = "1.0" //tokio = { version = "1", features = ["macros"] } //tracing = { version = "0.1", features = ["log"] } //tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt"] } //aws_lambda_events = "0.15.0" async fn function_handler(event: LambdaEvent<DocumentDbEvent>) ->Result<(), Error> { tracing::info!("Event Source ARN: {:?}", event.payload.event_source_arn); tracing::info!("Event Source: {:?}", event.payload.event_source); let records = &event.payload.events; if records.is_empty() { tracing::info!("No records found. Exiting."); return Ok(()); } for record in records{ log_document_db_event(record); } tracing::info!("Document db records processed"); // Prepare the response Ok(()) } fn log_document_db_event(record: &DocumentDbInnerEvent)-> Result<(), Error>{ tracing::info!("Change Event: {:?}", record.event); Ok(()) } #[tokio::main] async fn main() -> Result<(), Error> { tracing_subscriber::fmt() .with_max_level(tracing::Level::INFO) .with_target(false) .without_time() .init(); let func = service_fn(function_handler); lambda_runtime::run(func).await?; Ok(()) }
So erstellen Sie die Lambda-Funktion:
  1. Kopieren Sie den Beispiel-Code in eine Datei mit dem Namen index.js.

  2. Erstellen Sie ein Bereitstellungspaket mit dem folgenden -Befehl.

    zip function.zip index.js
  3. Verwenden Sie den folgenden CLI Befehl, um die Funktion zu erstellen. us-east-1Ersetzen Sie es durch die AWS-Region, und 123456789012 durch Ihre Konto-ID.

    aws lambda create-function \ --function-name ProcessDocumentDBRecords \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs20.x \ --region us-east-1 \ --role arn:aws:iam::123456789012:role/AWSDocumentDBLambdaExecutionRole

Erstellen Sie die Zuordnung von Ereignisquellen in Lambda

Schritt 11 Erstellen Sie die Zuordnung von Ereignisquellen in Lambda

Erstellen Sie die Ereignisquellenzuordnung, die Ihren Amazon DocumentDB DocumentDB-Change-Stream mit Ihrer Lambda-Funktion verknüpft. Nachdem Sie diese Ereignisquellenzuordnung erstellt haben, beginnt AWS Lambda sofort die Abfrage des Streams.

Die Zuordnung von Ereignisquellen erstellen
  1. Öffnen Sie die Seite Funktionen in der Lambda-Konsole.

  2. Wählen Sie die ProcessDocumentDBRecords-Funktion aus, die Sie zuvor erstellt haben.

  3. Wählen Sie die Registerkarte Konfiguration und dann im linken Menü Trigger aus.

  4. Wählen Sie Add trigger.

  5. Wählen Sie unter Trigger-Konfiguration für die Quelle Amazon DocumentDB aus.

  6. Erstellen Sie die Zuordnung von Ereignisquellen mit der folgenden Konfiguration:

    • Amazon DocumentDB-Cluster — Wählen Sie den Cluster aus, den Sie zuvor erstellt haben.

    • Datenbanknamedocdbdemo

    • Name der Kollektion — Produkte

    • Chargengröße — 1

    • Startposition — Letzte

    • Authentifizierung — BASIC _ AUTH

    • Secrets Manager Manager-Schlüssel — Wählen DocumentDBSecret Sie den, den Sie gerade erstellt haben.

    • Batchfenster — 1

    • Vollständige Konfiguration des Dokuments — UpdateLookup

  7. Wählen Sie Hinzufügen aus. Die Erstellung Ihrer Zuordnung von Ereignisquellen kann einige Minuten dauern.

Testen Sie Ihre -Funktion – manueller Aufruf

Schritt 12 Testen Sie Ihre Funktion mit einem manuellen Aufruf

Um zu testen, ob Sie Ihre Funktion und die Zuordnung von Ereignisquellen korrekt erstellt haben, rufen Sie Ihre Funktion mit dem Befehl invoke auf. Kopieren Sie dazu zunächst das folgende Ereignis JSON in eine Datei mit dem Nameninput.txt:

{ "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", "events": [ { "event": { "_id": { "_data": "0163eeb6e7000000090100000009000041e1" }, "clusterTime": { "$timestamp": { "t": 1676588775, "i": 9 } }, "documentKey": { "_id": { "$oid": "63eeb6e7d418cd98afb1c1d7" } }, "fullDocument": { "_id": { "$oid": "63eeb6e7d418cd98afb1c1d7" }, "anyField": "sampleValue" }, "ns": { "db": "docdbdemo", "coll": "products" }, "operationType": "insert" } } ], "eventSource": "aws:docdb" }

Verwenden Sie dann den folgenden Befehl, um Ihre Funktion mit diesem Ereignis aufzurufen:

aws lambda invoke \ --function-name ProcessDocumentDBRecords \ --cli-binary-format raw-in-base64-out \ --region us-east-1 \ --payload file://input.txt out.txt

Sie sollten eine Antwort erhalten, die wie die folgende aussieht:

{ "StatusCode": 200, "ExecutedVersion": "$LATEST" }

Sie können überprüfen, ob Ihre Funktion das Ereignis erfolgreich verarbeitet hat, indem Sie CloudWatch Logs überprüfen.

Um den manuellen Aufruf über CloudWatch Logs zu überprüfen
  1. Öffnen Sie die Seite Funktionen in der Lambda-Konsole.

  2. Wählen Sie die Registerkarte „Überwachen“ und anschließend „ CloudWatch Protokolle anzeigen“. Dadurch gelangen Sie zu der spezifischen Protokollgruppe, die Ihrer Funktion in der CloudWatch Konsole zugeordnet ist.

  3. Wählen Sie den neuesten Protokollstreams aus. In den Protokollnachrichten sollten Sie das Ereignis sehenJSON.

Testen Sie Ihre Funktion – fügen Sie einen Datensatz ein

Schritt 13 Testen Sie Ihre Funktion, indem Sie einen Datensatz einfügen.

Testen Sie Ihr end-to-end Setup, indem Sie direkt mit Ihrer Amazon DocumentDB DocumentDB-Datenbank interagieren. In den nächsten Schritten fügen Sie einen Datensatz ein, aktualisieren ihn und löschen ihn dann.

Um einen Datensatz einzufügen
  1. Stellen Sie erneut eine Verbindung zu Ihrem Amazon DocumentDB-Cluster in Ihrer AWS Cloud9 Umgebung her.

  2. Verwenden Sie diesen Befehl, um sicherzustellen, dass Sie gerade die docdbdemo-Datenbank verwenden:

    use docdbdemo
  3. Fügen Sie einen Datensatz in die products-Sammlung der docdbdemo-Datenbank ein:

    db.products.insert({"name":"Pencil", "price": 1.00})

Testen Sie Ihre Funktion – aktualisieren Sie einen Datensatz

Schritt 14 Testen Sie Ihre Funktion, indem Sie einen Datensatz aktualisieren.

Aktualisieren Sie als Nächstes den gerade eingefügten Datensatz mit dem folgenden Befehl:

db.products.update( { "name": "Pencil" }, { $set: { "price": 0.50 }} )

Überprüfen Sie anhand von Logs, ob Ihre Funktion dieses Ereignis erfolgreich verarbeitet hat. CloudWatch

Testen Sie Ihre Funktion – löschen Sie einen Datensatz

Schritt 15 Testen Sie Ihre Funktion, indem Sie einen Datensatz löschen.

Löschen Sie schließlich den Datensatz, den Sie gerade aktualisiert haben, mit dem folgenden Befehl:

db.products.remove( { "name": "Pencil" } )

Überprüfen Sie anhand von CloudWatch Logs, ob Ihre Funktion dieses Ereignis erfolgreich verarbeitet hat.

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:
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie die Funktion aus, die Sie erstellt haben.

  3. Wählen Sie Aktionen, Löschen aus.

  4. Geben Sie delete in das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.

So löschen Sie die Ausführungsrolle
  1. Öffnen Sie die Rollenseite der IAM Konsole.

  2. Wählen Sie die von Ihnen erstellte Ausführungsrolle aus.

  3. Wählen Sie Löschen.

  4. Geben Sie den Namen der Rolle in das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.

Um die VPC Endpoints zu löschen
  1. Öffnen Sie die VPCKonsole. Wählen Sie im linken Menü unter Virtual Private Cloud die Option Endpunkte aus.

  2. Wählen Sie die Endpunkte aus, die Sie erstellt haben.

  3. Wählen Sie „Aktionen“, „VPCEndpoints löschen“.

  4. Geben Sie delete in das Texteingabefeld ein.

  5. Wählen Sie Löschen.

So löschen Sie den Amazon DocumentDB-Cluster
  1. Öffnen Sie die Amazon DocumentDB DocumentDB-Konsole.

  2. Wählen Sie den Amazon DocumentDB-Cluster aus, den Sie für dieses Tutorial erstellt haben, und deaktivieren Sie den Löschschutz.

  3. Wählen Sie auf der Cluster-Hauptseite erneut Ihren Amazon DocumentDB-Cluster aus.

  4. Wählen Sie Aktionen, Löschen aus.

  5. Wählen Sie für Finalen Cluster-Snapshot erstellen die Option Nein aus.

  6. Geben Sie delete in das Texteingabefeld ein.

  7. Wählen Sie Löschen.

So löschen Sie das Secret im Secrets Manager
  1. Öffnen Sie die Secrets Manager-Konsole.

  2. Wählen Sie das Secret aus, das Sie für dieses Tutorial erstellt haben.

  3. Wählen Sie Aktionen, Secret löschen.

  4. Wählen Sie Schedule deletion.

Um die EC2 Amazon-Sicherheitsgruppe zu löschen
  1. Öffnen Sie die EC2Konsole. Wählen Sie unter Netzwerk und Sicherheit die Option Sicherheitsgruppen aus.

  2. Wählen Sie die Sicherheitsgruppe, die Sie für dieses Tutorial erstellt haben.

  3. Wählen Sie Aktionen, Sicherheitsgruppen löschen.

  4. Wählen Sie Löschen.

Um die AWS Cloud9 Umgebung zu löschen
  1. Öffnen Sie die AWS Cloud9 -Konsole.

  2. Wählen Sie die Umgebung aus, die Sie für dieses Tutorial erstellt haben.

  3. Wählen Sie Löschen.

  4. Geben Sie delete in das Texteingabefeld ein.

  5. Wählen Sie Löschen.