

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, Amazon SQS und AWS Fargate verarbeiten
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed, Alessandro Trisolini und Michael Wallner, Amazon Web Services*

## Zusammenfassung
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ist ein vollständig verwalteter Service, den Entwickler nutzen können, um sie in jeder Größenordnung zu erstellen, zu veröffentlichen, zu verwalten, APIs zu überwachen und zu sichern. Er erledigt die Aufgaben, die mit der Annahme und Verarbeitung von bis zu Hunderttausenden von gleichzeitigen API-Aufrufen 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 die REST-API einen Fehler zurückgibt. Das feste Limit 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 Simple Queue Service (Amazon SQS) und. AWS Fargate Die Architektur unterstützt die Ausführung von Verarbeitungsaufträgen ohne zeitliche Einschränkungen und verwendet eine einfache REST-API als Schnittstelle.

[Projen](https://pypi.org/project/projen/) [wird verwendet, um die lokale Entwicklungsumgebung einzurichten und die Beispielarchitektur in Kombination mit [Docker](https://docs.docker.com/get-docker/) und Node.js [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)auf einem Ziel AWS-Konto bereitzustellen.](https://nodejs.org/en/download/) Projen richtet automatisch eine virtuelle [Python-Umgebung](https://www.python.org/downloads/) mit [Pre-Commit](https://pre-commit.com/) 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](#process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-tools).

## Voraussetzungen und Einschränkungen
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto
+ Die folgenden Tools sind auf Ihrer Workstation installiert:
  + [AWS Cloud Development Kit (AWS CDK) Toolkit-Version](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) 2.85.0 oder höher
  + [Docker-Version 20.10.21](https://docs.docker.com/get-docker/) oder höher
  + [Node.js Version 18](https://nodejs.org/en/download/) oder höher
  + [Projen](https://pypi.org/project/projen/) Version 0.71.111 oder höher
  + [Python-Version](https://www.python.org/downloads/) 3.9.16 oder höher

**Einschränkungen**
+ Gleichzeitige Jobs sind auf 500 Aufgaben pro Minute begrenzt. Dies ist die maximale Anzahl von Aufgaben, die Fargate bereitstellen kann.

## Architektur
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-architecture"></a>

Das folgende Diagramm zeigt die Interaktion der Jobs-API mit der `jobs` Amazon DynamoDB-Tabelle, dem Fargate-Dienst zur Ereignisverarbeitung und der Fehlerbehandlungsfunktion. AWS Lambda Ereignisse werden in einem EventBridge Amazon-Eventarchiv gespeichert.

![Architekturdiagramm mit einer Beschreibung, die dem Diagramm folgt.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/8a03149c-8f34-4593-84d5-accc1800a0a2/images/5e1071aa-4fbc-495c-bc22-8e62a32a136b.png)


Ein typischer Arbeitsablauf umfasst die folgenden Schritte:

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

1. Sie senden eine `POST` HTTP-Anfrage an den `/jobs` Jobs-API-Endpunkt und geben dabei die Jobparameter im Hauptteil der Anfrage an.

1. Die Jobs-API, bei der es sich um eine API-Gateway-REST-API handelt, gibt Ihnen eine HTTP-Antwort zurück, die die Job-ID enthält.

1. Die Jobs-API sendet eine Nachricht an die SQS-Warteschlange.

1. Fargate ruft die Nachricht aus der SQS-Warteschlange ab, verarbeitet das Ereignis und fügt dann die Auftragsergebnisse in die `jobs` DynamoDB-Tabelle ein.

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

1. Die Jobs-API fragt die `jobs` DynamoDB-Tabelle ab, um die Auftragsergebnisse abzurufen.

1. Die Jobs-API gibt eine HTTP-Antwort zurück, die die Auftragsergebnisse enthält.

1. Wenn die Ereignisverarbeitung fehlschlägt, sendet die SQS-Warteschlange das Ereignis an die Dead-Letter-Warteschlange (DLQ).

1. Ein EventBridge Ereignis initiiert die Fehlerbehandlungsfunktion.

1. Die Fehlerbehandlungsfunktion platziert die Jobparameter in der `jobs` DynamoDB-Tabelle.

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

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

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

## Tools
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-tools"></a>

**AWS-Services**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)ist ein Softwareentwicklungs-Framework, das Ihnen hilft, AWS Cloud Infrastruktur im Code zu definieren und bereitzustellen.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) ist ein vollständig verwalteter NoSQL-Datenbank-Service, der schnelle und planbare Leistung mit nahtloser Skalierbarkeit bereitstellt.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)hilft Ihnen dabei, Container auszuführen, ohne Server oder Amazon Elastic Compute Cloud (Amazon EC2) -Instances verwalten zu müssen. Es wird in Verbindung mit Amazon Elastic Container Service (Amazon ECS) verwendet.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) ist ein serverloser Event-Bus-Service, mit dem Sie Ihre Anwendungen mit Echtzeitdaten aus einer Vielzahl von Quellen verbinden können. Zum Beispiel Lambda-Funktionen, HTTP-Aufruf-Endpunkte, die API-Ziele verwenden, oder Event-Busse in anderen. AWS-Konten
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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 Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) bietet eine sichere, dauerhafte und verfügbare gehostete Warteschlange, mit der Sie verteilte Softwaresysteme und -komponenten integrieren und entkoppeln können.

**Andere Tools**
+ [autopep8](https://github.com/hhatto/autopep8) formatiert Python-Code automatisch auf der Grundlage des Python Enhancement Proposal (PEP) 8-Styleguides.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) scannt Python-Code, um häufig auftretende Sicherheitsprobleme zu finden.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) ist ein Git-Commit-Checker und -Generator. `CHANGELOG`
+ [cfn-lint ist ein Linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) ist ein statisches Code-Analyse-Tool, das Infrastructure as Code (IaC) auf Sicherheits- und Compliance-Fehlkonfigurationen überprüft.
+ [jq ist ein Befehlszeilentool](https://stedolan.github.io/jq/download/) zum Parsen von JSON.
+ [Postman](https://www.postman.com/) ist eine API-Plattform.
+ [pre-commit](https://pre-commit.com/) ist ein Git-Hooks-Manager.
+ [Projen](https://github.com/projen/projen) ist ein Projektgenerator.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) ist ein Python-Framework zum Schreiben kleiner, lesbarer Tests.

**Code-Repository**

Dieser Beispielarchitekturcode befindet sich im Repository GitHub [Asynchronous Processing with API Gateway und SQS.](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk)

## Best Practices
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-best-practices"></a>
+ Diese Beispielarchitektur beinhaltet keine Überwachung der bereitgestellten Infrastruktur. Wenn Ihr Anwendungsfall eine Überwachung erfordert, sollten Sie das Hinzufügen von [CDK Monitoring Constructs](https://constructs.dev/packages/cdk-monitoring-constructs) oder einer anderen Überwachungslösung in Betracht ziehen.
+ Diese Beispielarchitektur verwendet [IAM-Berechtigungen](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html), um den Zugriff auf die Jobs-API zu steuern. Jeder, der autorisiert ist, `JobsAPIInvokeRole` dies 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](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) testen.
+ Wenn ein Benutzer eine `POST` HTTP-Anfrage an den `/jobs` Jobs-API-Endpunkt sendet, werden die Eingabedaten auf zwei verschiedenen Ebenen validiert:
  + API Gateway ist für die erste [Anforderungsvalidierung](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html) verantwortlich.
  + Die Funktion zur Ereignisverarbeitung führt die zweite Anfrage aus.

    Es wird keine Überprüfung durchgeführt, wenn der Benutzer eine `GET` HTTP-Anfrage an den `/jobs/{jobId}` Jobs-API-Endpunkt sendet. Wenn Ihr Anwendungsfall eine zusätzliche Eingabevalidierung und ein erhöhtes Sicherheitsniveau erfordert, sollten Sie den [Einsatz AWS WAF zum Schutz Ihrer API in Betracht ziehen](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).

## Epen
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-epics"></a>

### Richte die Umgebung ein
<a name="set-up-the-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Repository | Führen Sie den folgenden Befehl aus, um das Repository lokal zu klonen:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk.git</pre> | 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](https://github.com/projen/projen) ein:<pre>cd asynchronous-event-processing-api-gateway-api-gateway-sqs-cdk<br />npx projen</pre> | DevOps Ingenieur | 
| Installieren Sie Pre-Commit-Hooks. | Gehen Sie wie folgt vor, um Pre-Commit-Hooks zu installieren:[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | DevOps Ingenieur | 

### Stellen Sie die Beispielarchitektur bereit
<a name="deploy-the-example-architecture"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Um [AWS CDK](https://aws.amazon.com/cdk/)in Ihrem zu booten AWS-Konto, führen Sie den folgenden Befehl aus:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Stellen Sie die Beispielarchitektur bereit. | Führen Sie den folgenden Befehl aus AWS-Konto, um die Beispielarchitektur in Ihrem bereitzustellen:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Testen Sie die Architektur
<a name="test-the-architecture"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Installieren Sie die Testvoraussetzungen. | Installieren Sie auf Ihrer Workstation the [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/) und [jq](https://jqlang.github.io/jq/).<br />Die Verwendung von [Postman](https://www.postman.com/downloads/) 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](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) unterstützt, und beziehen Sie sich auf die exponierten API-Endpunkte, die durch [den Export der REST-API](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html) überprüft werden können. | DevOps Ingenieur | 
| Gehen Sie von der aus`JobsAPIInvokeRole`. | [Gehen Sie davon aus](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html)`JobsAPIInvokeRole`, dass das als Ausgabe des `deploy` Befehls gedruckt wurde:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Postman konfigurieren. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | AWS DevOps | 
| Testen Sie die Beispielarchitektur. | Um die Beispielarchitektur zu testen, senden Sie Anfragen an die Jobs-API. Weitere Informationen finden Sie in der [Postman-Dokumentation](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps Ingenieur | 

## Fehlerbehebung
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Die Zerstörung und anschließende erneute Bereitstellung der Beispielarchitektur schlägt fehl, da die [Amazon CloudWatch Logs-Protokollgruppe](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) `/aws/apigateway/JobsAPIAccessLogs` bereits existiert. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 
| Die Zerstörung und anschließende erneute Bereitstellung der Beispielarchitektur schlägt fehl, da die [Protokollgruppe CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) `/aws/ecs/EventProcessingServiceLogs` bereits vorhanden ist. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 

## Zugehörige Ressourcen
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-resources"></a>
+ [API-Gateway-Zuordnungsvorlage und Referenz zur Zugriffsprotokollierungsvariablen](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Wie integriere ich eine API Gateway Gateway-REST-API in Amazon SQS und behebe häufig auftretende Fehler?](https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-rest-api-sqs-errors/)