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/signup.

  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 jederzeit Ihre aktuelle Kontoaktivität anzeigen und Ihr Konto verwalten. Rufen Sie dazu https://aws.amazon.com/ auf und klicken Sie auf Mein Konto.

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 den Root-Benutzer.

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

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

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

  2. Gewähren Sie einem Administratorbenutzer im IAM Identity Center Benutzerzugriff.

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

Anmelden als Administratorbenutzer
Weiteren Benutzern Zugriff zuweisen
  1. Erstellen Sie im IAM-Identity-Center einen Berechtigungssatz, der den bewährten Vorgehensweisen für die Anwendung von geringsten Berechtigungen 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 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 Sie die AWS Cloud9 Umgebung

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 Schnittstellen-VPC-Endpunkte erstellen. Anschließend können Sie direkt mit den Schritten zur Funktionserstellung fortfahren.

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

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

  2. Erstellen Sie eine Umgebung mit der folgenden Konfiguration:

    • Unter Details:

      • Name (NameDocumentDBCloud9Environment

      • Umgebungstyp – Neue EC2-Instance

    • Unter Neue EC2-Instance:

      • Instance-Typt2.micro (1 GiB RAM + 1 vCPU)

      • Plattform – Amazon Linux 2

      • Timeout – 30 Minuten

    • Unter Netzwerkeinstellungen:

      • Verbindung — AWS Systems Manager (SSM)

      • Erweitern Sie das Dropdown-Menü für VPC-Einstellungen.

      • Amazon Virtual Private Cloud (VPC) – Wählen Sie Ihre Standard-VPC.

      • Subnetz – Keine Präferenz

    • Behalten Sie die alle Standardeinstellung bei.

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

Erstellen der EC2-Sicherheitsgruppe

Schritt 2 Erstellen einer EC2-Sicherheitsgruppe

Erstellen Sie als Nächstes eine EC2-Sicherheitsgruppe mit Regeln, die den Datenverkehr zwischen Ihrem DocumentDB-Cluster und Ihrer Cloud9-Umgebung zulassen.

Um eine EC2-Sicherheitsgruppe zu erstellen
  1. Öffnen Sie die EC2-Konsole. 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:

      • Name der SicherheitsgruppeDocDBTutorial

      • Beschreibung – Sicherheitsgruppe für den Datenverkehr zwischen Cloud9 und DocumentDB.

      • VPC – Wählen Sie Ihre Standard-VPC aus.

    • 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 – Benutzerdefiniertes 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 DocumentDB-Cluster

Schritt 3: Erstellen Sie einen DocumentDB-Cluster

In diesem Schritt erstellen Sie einen DocumentDB-Cluster mithilfe der Sicherheitsgruppe aus dem vorigen Schritt.

Um einen DocumentDB-Cluster zu erstellen
  1. Öffnen Sie die 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 Instances – 1.

    • Unter Authentifizierung:

      • Geben Sie den Benutzernamen und das Passwort ein, die für die Verbindung zu 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 Ihre Standard-VPC.

      • Subnetz-Gruppe – standard

      • VPC-Sicherheitsgruppen – Wählen Sie neben der default (VPC) auch die DocDBTutorial (VPC)-Sicherheitsgruppe aus, die Sie im vorherigen Schritt erstellt haben.

    • Behalten Sie die alle Standardeinstellung bei.

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

Erstellen des Secrets in Secrets Manager

Schritt 4: Erstellen Sie ein Geheimnis in Secrets Manager

Um manuell auf Ihren DocumentDB-Cluster zuzugreifen, müssen Sie den Benutzernamen und das 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:

      • Secret-Typ – Anmeldeinformationen für die Amazon-DocumentDB-Datenbank

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

      • Datenbank – Wählen Sie Ihren DocumentDB-Cluster aus.

      • Wählen Sie Weiter aus.

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

    • Secret-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 den Secret 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 Cloud9-Umgebung. Die mongo-Shell ist ein Befehlszeilenprogramm, mit dem Sie eine Verbindung zu Ihrem DocumentDB-Cluster herstellen und ihn abfragen können.

Um die mongo-Shell in Ihrer Cloud9-Umgebung zu installieren
  1. Öffnen Sie die Cloud9-Konsole. Klicken Sie neben der DocumentDBCloud9Environment-Umgebung, die Sie zuvor erstellt haben, auf den Link Öffnen unter der Spalte Cloud9 IDE.

  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

Mit dem DocumentDB-Cluster verbinden

Schritt 6 Mit dem DocumentDB-Cluster verbinden

Sie sind jetzt bereit, mithilfe der mongo-Shell eine Verbindung zu Ihrem DocumentDB-Cluster herzustellen.

So stellen Sie eine Verbindung zu Ihrem DocumentDB-Cluster her
  1. Öffnen Sie die 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 verbinden die Option Kopieren aus.

  3. In Ihrer Cloud9-Umgebung fügen Sie diesen Befehl 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 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 Cloud9-Umgebung sicher, dass Sie immer noch mit Ihrem 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) }

Schnittstellen-VPC-Endpunkte erstellen

Schritt 8 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
  1. Öffnen Sie die VPC;-Konsole. 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 bei VPC Ihre Standard-VPC aus.

    • 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 Standard-VPC-Sicherheitsgruppe (Gruppenname von default) und die Sicherheitsgruppe, die Sie zuvor erstellt haben (Gruppenname von DocDBTutorial).

    • 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 Servicekategorie 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 bei VPC Ihre Standard-VPC aus.

    • 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 Standard-VPC-Sicherheitsgruppe (Gruppenname von default) und die Sicherheitsgruppe, die Sie zuvor erstellt haben (Gruppenname von DocDBTutorial).

    • 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 verknüpfen diese dann mit einer IAM-Rolle.

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

  2. 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.

    { "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 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.

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

    • Typ der vertrauenswürdigen Entität — AWS Dienst

    • Anwendungsfall – Lambda

    • Wählen Sie Weiter aus.

  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 aus.

  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 Beispiel-Code empfängt eine DocumentDB-Ereigniseingabe und verarbeitet die darin enthaltene Nachricht.

Go
SDK fü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.

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 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
SDK fü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.

Ein Amazon DocumentDB DocumentDB-Ereignis mit Lambda verwenden. 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 mithilfe von 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
SDK fü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
SDK fü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
SDK fü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.

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 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. Ersetzen Sie us-east-1 durch Ihre 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 Zuordnung von Ereignisquellen, die Ihren DocumentDB-Change-Stream mit Ihrer Lambda-Funktion verknüpft. Nachdem Sie diese Ereignisquellenzuordnung erstellt haben, wird AWS Lambda sofort mit der Abfrage des Streams begonnen.

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ü Auslöser.

  4. Wählen Sie Add trigger.

  5. Wählen Sie unter Trigger-Konfiguration als Quelle die Option DocumentDB aus.

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

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

    • Name der Datenbankdocdbdemo

    • Name der Kollektion – Produkte

    • Batch size – 1

    • Startposition – Neueste

    • Authentifizierung – BASIC_AUTH

    • Secrets-Manager-Schlüssel – Wählen Sie den DocumentDBSecret aus, 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 die folgende Ereignis-JSON in eine Datei mit dem Namen input.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 die Option 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 die Ereignis-JSON sehen.

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 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 DocumentDB-Cluster in Ihrer 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 CloudWatch Logs, ob Ihre Funktion dieses Ereignis erfolgreich verarbeitet hat.

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" } )

Vergewissern Sie sich, dass Ihre Funktion dieses Ereignis erfolgreich verarbeitet hat, indem Sie die Option CloudWatch Logs überprüfen.

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 Seite Roles in der IAM-Konsole.

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

  3. Wählen Sie Löschen aus.

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

Löschen von VPC-Endpunkten
  1. Öffnen Sie die VPC;-Konsole. 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 Actions (Aktionen), Delete VPC Endpoint (VPC-Endpunkte löschen).

  4. Geben Sie delete in das Texteingabefeld ein.

  5. Wählen Sie Löschen aus.

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

  2. Wählen Sie den 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 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 aus.

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.

Löschen einer Amazon-EC2-Sicherheitsgruppe
  1. Öffnen Sie die EC2-Konsole. 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 aus.

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

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

  3. Wählen Sie Löschen aus.

  4. Geben Sie delete in das Texteingabefeld ein.

  5. Wählen Sie Löschen.