Wählen Sie Ihre Cookie-Einstellungen aus

Wir verwenden essentielle Cookies und ähnliche Tools, die für die Bereitstellung unserer Website und Services erforderlich sind. Wir verwenden Performance-Cookies, um anonyme Statistiken zu sammeln, damit wir verstehen können, wie Kunden unsere Website nutzen, und Verbesserungen vornehmen können. Essentielle Cookies können nicht deaktiviert werden, aber Sie können auf „Anpassen“ oder „Ablehnen“ klicken, um Performance-Cookies abzulehnen.

Wenn Sie damit einverstanden sind, verwenden AWS und zugelassene Drittanbieter auch Cookies, um nützliche Features der Website bereitzustellen, Ihre Präferenzen zu speichern und relevante Inhalte, einschließlich relevanter Werbung, anzuzeigen. Um alle nicht notwendigen Cookies zu akzeptieren oder abzulehnen, klicken Sie auf „Akzeptieren“ oder „Ablehnen“. Um detailliertere Entscheidungen zu treffen, klicken Sie auf „Anpassen“.

Ereignisse asynchron mit Amazon API Gateway und Amazon DynamoDB Streams verarbeiten - AWS Prescriptive Guidance

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.

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.

Ereignisse asynchron mit Amazon API Gateway und Amazon DynamoDB Streams verarbeiten

Erstellt von Andrea Meroni (AWS), Alessandro Trisolini (), Nadim Majed (AWS), Mariem Kthiri () und Michael Wallner (AWS) AWS AWS

Übersicht

Amazon API Gateway ist ein vollständig verwalteter Service, den Entwickler nutzen können, um sie in jeder Größenordnung zu erstellen, zu veröffentlichen, zu warten, APIs zu überwachen und zu sichern. Er erledigt die Aufgaben, die mit der Annahme und Bearbeitung von bis zu Hunderttausenden von gleichzeitigen API Anrufen verbunden sind.

Eine wichtige Servicequote von API Gateway ist das Integrations-Timeout. Das Timeout ist die maximale Zeit, in der ein Backend-Dienst eine Antwort zurückgeben muss, bevor er einen Fehler REST API zurückgibt. Die feste Grenze von 29 Sekunden ist für synchrone Workloads im Allgemeinen akzeptabel. Dieses Limit stellt jedoch eine Herausforderung für Entwickler dar, die API Gateway mit asynchronen Workloads verwenden möchten.

Dieses Muster zeigt eine Beispielarchitektur für die asynchrone Verarbeitung von Ereignissen mithilfe von API Gateway, Amazon DynamoDB Streams und. AWS Lambda Die Architektur unterstützt die Ausführung von Parallelverarbeitungsjobs mit denselben Eingabeparametern und verwendet ein Basic REST API als Schnittstelle. In diesem Beispiel begrenzt die Verwendung von Lambda als Backend die Dauer von Jobs auf 15 Minuten. Sie können dieses Limit umgehen, indem Sie einen alternativen Dienst zur Verarbeitung eingehender Ereignisse verwenden (z. B. AWS Fargate).

Projen wird verwendet, um die lokale Entwicklungsumgebung einzurichten und die Beispielarchitektur in Kombination mit dem AWS Cloud Development Kit (AWS CDK) Toolkit AWS-Konto, Docker und Node.js auf einem Ziel bereitzustellen. Projen richtet automatisch eine virtuelle Python-Umgebung mit Pre-Commit und den Tools ein, die für die Qualitätssicherung des Codes, Sicherheitsscans und Unit-Tests verwendet werden. Weitere Informationen finden Sie im Abschnitt Tools.

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

  • Die empfohlene maximale Anzahl von Lesern für DynamoDB Streams ist zwei, um eine Drosselung zu vermeiden.

  • Die maximale Laufzeit eines Jobs ist durch die maximale Laufzeit für Lambda-Funktionen (15 Minuten) begrenzt.

  • Die maximale Anzahl gleichzeitiger Jobanfragen ist durch die reservierte Parallelität der Lambda-Funktionen begrenzt.

Architektur

Architektur

Das folgende Diagramm zeigt die Interaktion der Jobs API mit DynamoDB Streams und der Lambda-Funktionen zur Ereignisverarbeitung und Fehlerbehandlung mit Ereignissen, die in einem Amazon-Ereignisarchiv gespeichert sind. EventBridge

Diagramm der Architektur und des Prozesses, wobei die Schritte nach dem Diagramm aufgeführt sind.

Ein typischer Arbeitsablauf umfasst die folgenden Schritte:

  1. Sie authentifizieren sich bei AWS Identity and Access Management (IAM) und erhalten Sicherheitsanmeldedaten.

  2. Sie senden eine HTTP POST Anfrage an den /jobs API Auftragsendpunkt und geben dabei die Jobparameter im Hauptteil der Anfrage an.

  3. Der Job API gibt Ihnen eine HTTP Antwort zurück, die die Job-ID enthält.

  4. Die Jobs fügen API die Jobparameter in die jobs_table Amazon DynamoDB-Tabelle ein.

  5. Der jobs_table DynamoDB-Stream der DynamoDB-Tabelle ruft die Lambda-Funktionen zur Ereignisverarbeitung auf.

  6. Die Lambda-Funktionen zur Ereignisverarbeitung verarbeiten das Ereignis und fügen dann die Auftragsergebnisse in die jobs_table DynamoDB-Tabelle ein. Um konsistente Ergebnisse zu gewährleisten, implementieren die Funktionen zur Ereignisverarbeitung einen optimistischen Sperrmechanismus.

  7. Sie senden eine HTTP GET Anfrage an den /jobs/{jobId} API Auftragsendpunkt mit der Job-ID aus Schritt 3 als. {jobId}

  8. Die Jobs API fragen die jobs_table DynamoDB-Tabelle ab, um die Auftragsergebnisse abzurufen.

  9. Die Jobs geben eine HTTP Antwort API zurück, die die Auftragsergebnisse enthält.

  10. Wenn die Ereignisverarbeitung fehlschlägt, sendet die Quellenzuordnung der Ereignisverarbeitungsfunktion das Ereignis an das Thema Amazon Simple Notification Service (Amazon) zur Fehlerbehandlung. SNS

  11. Das SNS Thema zur Fehlerbehandlung leitet das Ereignis asynchron an die Fehlerbehandlungsfunktion weiter.

  12. Die Fehlerbehandlungsfunktion platziert die Jobparameter in der jobs_table DynamoDB-Tabelle.

    Sie können die Job-Parameter abrufen, indem Sie eine HTTP GET Anfrage an den Job-Endpunkt senden. /jobs/{jobId} API

  13. Wenn die Fehlerbehandlung fehlschlägt, sendet die Fehlerbehandlungsfunktion das Ereignis an ein EventBridge Amazon-Archiv.

    Sie können die archivierten Ereignisse erneut abspielen, indem Sie EventBridge

Tools

AWS-Services

  • AWS Cloud Development Kit (AWS CDK)ist ein Framework für die Softwareentwicklung, mit dem Sie die AWS Cloud-Infrastruktur im Code definieren und bereitstellen können.

  • Amazon DynamoDB ist ein vollständig verwalteter Service ohne SQL Datenbank, der eine schnelle, vorhersehbare und skalierbare Leistung bietet.

  • Amazon EventBridge ist ein serverloser Event-Bus-Service, mit dem Sie Ihre Anwendungen mit Echtzeitdaten aus einer Vielzahl von Quellen verbinden können. Zum Beispiel AWS Lambda-Funktionen, HTTP Aufruf-Endpunkte, die API Ziele verwenden, oder Event-Busse in anderen Konten. AWS

  • AWS Lambda ist ein Datenverarbeitungsservice, mit dem Sie Code ausführen können, ohne dass Sie Server bereitstellen oder verwalten müssen. Es führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

  • Amazon Simple Notification Service (AmazonSNS) unterstützt Sie bei der Koordination und Verwaltung des Nachrichtenaustauschs zwischen Herausgebern und Kunden, einschließlich Webservern und E-Mail-Adressen.

Andere Tools

  • autopep8 formatiert Python-Code automatisch auf der Grundlage des Styleguides Python Enhancement Proposal (PEP) 8.

  • Bandit scannt Python-Code, um häufig auftretende Sicherheitsprobleme zu finden.

  • Commitizen ist ein Git-Commit-Checker und -Generator. CHANGELOG

  • cfn-lint ist ein Linter AWS CloudFormation

  • Checkov ist ein statisches Code-Analyse-Tool, das Infrastructure as Code (IaC) auf Sicherheits- und Compliance-Fehlkonfigurationen überprüft.

  • jq ist ein Befehlszeilentool zum Parsen. JSON

  • Postman ist eine Plattform. API

  • pre-commit ist ein Git-Hooks-Manager.

  • Projen ist ein Projektgenerator.

  • pytest ist ein Python-Framework zum Schreiben kleiner, lesbarer Tests.

Code-Repository

Dieser Beispielarchitekturcode befindet sich im Repository GitHub Asynchronous Processing with API Gateway und DynamoDB Streams.

Bewährte Methoden

  • Diese Beispielarchitektur beinhaltet keine Überwachung der bereitgestellten Infrastruktur. Wenn Ihr Anwendungsfall eine Überwachung erfordert, sollten Sie das Hinzufügen von CDKMonitoring-Konstrukten oder einer anderen Überwachungslösung in Betracht ziehen.

  • Diese Beispielarchitektur verwendet IAMBerechtigungen, um den Zugriff auf die Jobs API zu kontrollieren. Jeder, der autorisiert istJobsAPIInvokeRole, anzunehmen, kann die Jobs API aufrufen. Daher ist der Zugriffskontrollmechanismus binär. Wenn Ihr Anwendungsfall ein komplexeres Autorisierungsmodell erfordert, sollten Sie es mit einem anderen Zugriffskontrollmechanismus testen.

  • Wenn ein Benutzer eine HTTP POST Anfrage an den /jobs API Auftragsendpunkt sendet, werden die Eingabedaten auf zwei verschiedenen Ebenen validiert:

    • APIGateway ist für die erste Anforderungsvalidierung verantwortlich.

    • Die Funktion zur Ereignisverarbeitung führt die zweite Anfrage aus.

      Es wird keine Überprüfung durchgeführt, wenn der Benutzer eine HTTP GET Anfrage an den /jobs/{jobId} API Auftragsendpunkt sendet. Wenn Ihr Anwendungsfall eine zusätzliche Eingabevalidierung und ein erhöhtes Sicherheitsniveau erfordert, sollten Sie die Verwendung AWS WAF zum Schutz Ihrer Daten prüfenAPI.

  • Um eine Drosselung zu vermeiden, rät die DynamoDB Streams-Dokumentation Benutzern davon ab, mit mehr als zwei Verbrauchern vom Shard desselben Streams zu lesen. Um die Anzahl der Verbraucher zu erhöhen, empfehlen wir die Verwendung von Amazon Kinesis Data Streams.

  • In diesem Beispiel wurde optimistisches Sperren verwendet, um sicherzustellen, dass Elemente in der jobs_table DynamoDB-Tabelle konsistent aktualisiert werden. Je nach Anforderung des Anwendungsfalls müssen Sie möglicherweise zuverlässigere Sperrmechanismen implementieren, z. B. pessimistisches Sperren.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Klonen Sie das Repository

Führen Sie den folgenden Befehl aus, um das Repository lokal zu klonen:

git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk.git
DevOps Ingenieur

Richten Sie das Projekt ein.

Ändern Sie das Verzeichnis in das Repository-Stammverzeichnis und richten Sie die virtuelle Python-Umgebung und alle Tools mithilfe von Projen ein:

cd asynchronous-event-processing-api-gateway-api-gateway-dynamodb-streams-cdk npx projen
DevOps Ingenieur

Installieren Sie Pre-Commit-Hooks.

Gehen Sie wie folgt vor, um Pre-Commit-Hooks zu installieren:

  1. Aktivieren Sie die virtuelle Python-Umgebung:

    source .env/bin/activate
  2. Installieren Sie die Pre-Commit-Hooks:

    pre-commit install pre-commit install --hook-type commit-msg
DevOps Ingenieur

Richte die Umgebung ein

AufgabeBeschreibungErforderliche Fähigkeiten

Klonen Sie das Repository

Führen Sie den folgenden Befehl aus, um das Repository lokal zu klonen:

git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk.git
DevOps Ingenieur

Richten Sie das Projekt ein.

Ändern Sie das Verzeichnis in das Repository-Stammverzeichnis und richten Sie die virtuelle Python-Umgebung und alle Tools mithilfe von Projen ein:

cd asynchronous-event-processing-api-gateway-api-gateway-dynamodb-streams-cdk npx projen
DevOps Ingenieur

Installieren Sie Pre-Commit-Hooks.

Gehen Sie wie folgt vor, um Pre-Commit-Hooks zu installieren:

  1. Aktivieren Sie die virtuelle Python-Umgebung:

    source .env/bin/activate
  2. Installieren Sie die Pre-Commit-Hooks:

    pre-commit install pre-commit install --hook-type commit-msg
DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Bootstrap. AWS CDK

Um AWS CDKin Ihrem zu booten AWS-Konto, führen Sie den folgenden Befehl aus:

AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap
AWS DevOps

Stellen Sie die Beispielarchitektur bereit.

Führen Sie den folgenden Befehl aus AWS-Konto, um die Beispielarchitektur in Ihrem bereitzustellen:

AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy
AWS DevOps

Stellen Sie die Beispielarchitektur bereit

AufgabeBeschreibungErforderliche Fähigkeiten

Bootstrap. AWS CDK

Um AWS CDKin Ihrem zu booten AWS-Konto, führen Sie den folgenden Befehl aus:

AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap
AWS DevOps

Stellen Sie die Beispielarchitektur bereit.

Führen Sie den folgenden Befehl aus AWS-Konto, um die Beispielarchitektur in Ihrem bereitzustellen:

AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy
AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Installieren Sie die Testvoraussetzungen.

Installieren Sie auf Ihrer Workstation the AWS Command Line Interface (AWS CLI), Postman und jq.

Die Verwendung von Postman zum Testen dieser Beispielarchitektur wird empfohlen, ist aber nicht zwingend erforderlich. Wenn Sie sich für ein alternatives API Testtool entscheiden, stellen Sie sicher, dass es die Authentifizierung mit AWS Signature Version 4 unterstützt, und beziehen Sie sich auf die exponierten API Endpunkte, die überprüft werden können, indem Sie das exportieren. REST API

DevOps Ingenieur

Gehen Sie von der ausJobsAPIInvokeRole.

Gehen Sie davon ausJobsAPIInvokeRole, dass das als Ausgabe des deploy Befehls gedruckt wurde:

CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \ --no-cli-pager \ --role-arn $<JOBS_API_INVOKE_ROLE_ARN> \ --role-session-name JobsAPIInvoke) export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’) export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’) export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)
AWS DevOps

Konfigurieren Sie Postman.

  • Folgen Sie den Anweisungen in der Postman-Dokumentation, um die im Repository enthaltene Postman-Sammlung zu importieren.

  • Stellen Sie die JobsAPI Variablen mit den folgenden Werten ein:

    • accessKey‒ Der Wert des Credentials.AccessKeyId Attributs aus dem assume-role Befehl.

    • baseUrl‒ Der Wert der JobsApiJobsAPIEndpoint deploy Befehlsausgabe ohne den abschließenden Schrägstrich.

    • region‒ Der Wert der AWS-Region Stelle, an der Sie die Beispielarchitektur bereitgestellt haben.

    • seconds‒ Der Wert des Eingabeparameters für den Beispieljob. Es muss eine positive Ganzzahl sein.

    • secretKey‒ Der Wert des Credentials.SecretAccessKey Attributs aus dem assume-role Befehl.

    • sessionToken‒ Der Wert des Credentials.SessionToken Attributs aus dem assume-role Befehl.

AWS DevOps

Testen Sie die Beispielarchitektur.

Um die Beispielarchitektur zu testen, senden Sie Anfragen an die JobsAPI. Weitere Informationen finden Sie in der Postman-Dokumentation.

DevOps Ingenieur

Testen Sie die Architektur

AufgabeBeschreibungErforderliche Fähigkeiten

Installieren Sie die Testvoraussetzungen.

Installieren Sie auf Ihrer Workstation the AWS Command Line Interface (AWS CLI), Postman und jq.

Die Verwendung von Postman zum Testen dieser Beispielarchitektur wird empfohlen, ist aber nicht zwingend erforderlich. Wenn Sie sich für ein alternatives API Testtool entscheiden, stellen Sie sicher, dass es die Authentifizierung mit AWS Signature Version 4 unterstützt, und beziehen Sie sich auf die exponierten API Endpunkte, die überprüft werden können, indem Sie das exportieren. REST API

DevOps Ingenieur

Gehen Sie von der ausJobsAPIInvokeRole.

Gehen Sie davon ausJobsAPIInvokeRole, dass das als Ausgabe des deploy Befehls gedruckt wurde:

CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \ --no-cli-pager \ --role-arn $<JOBS_API_INVOKE_ROLE_ARN> \ --role-session-name JobsAPIInvoke) export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’) export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’) export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)
AWS DevOps

Konfigurieren Sie Postman.

  • Folgen Sie den Anweisungen in der Postman-Dokumentation, um die im Repository enthaltene Postman-Sammlung zu importieren.

  • Stellen Sie die JobsAPI Variablen mit den folgenden Werten ein:

    • accessKey‒ Der Wert des Credentials.AccessKeyId Attributs aus dem assume-role Befehl.

    • baseUrl‒ Der Wert der JobsApiJobsAPIEndpoint deploy Befehlsausgabe ohne den abschließenden Schrägstrich.

    • region‒ Der Wert der AWS-Region Stelle, an der Sie die Beispielarchitektur bereitgestellt haben.

    • seconds‒ Der Wert des Eingabeparameters für den Beispieljob. Es muss eine positive Ganzzahl sein.

    • secretKey‒ Der Wert des Credentials.SecretAccessKey Attributs aus dem assume-role Befehl.

    • sessionToken‒ Der Wert des Credentials.SessionToken Attributs aus dem assume-role Befehl.

AWS DevOps

Testen Sie die Beispielarchitektur.

Um die Beispielarchitektur zu testen, senden Sie Anfragen an die JobsAPI. Weitere Informationen finden Sie in der Postman-Dokumentation.

DevOps Ingenieur

Fehlerbehebung

ProblemLösung

Die Zerstörung und anschließende erneute Bereitstellung der Beispielarchitektur schlägt fehl, da die Amazon CloudWatch Logs-Protokollgruppe /aws/apigateway/JobsAPIAccessLogs bereits existiert.

  1. Exportieren Sie bei Bedarf Ihre Protokolldaten nach Amazon Simple Storage Service (Amazon S3).

  2. Löschen Sie die CloudWatch Protokollgruppe Logs/aws/apigateway/JobsAPIAccessLogs.

  3. Stellen Sie die Beispielarchitektur erneut bereit.

Zugehörige Ressourcen

DatenschutzNutzungsbedingungen für die WebsiteCookie-Einstellungen
© 2025, Amazon Web Services, Inc. oder Tochtergesellschaften. Alle Rechte vorbehalten.