

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.

# Serverless
<a name="serverless-pattern-list"></a>

**Topics**
+ [Erstellen Sie mithilfe von AWS Amplify eine serverlose mobile React Native-App](build-a-serverless-react-native-mobile-app-by-using-aws-amplify.md)
+ [Mandanten für mehrere SaaS-Produkte auf einer einzigen Steuerebene verwalten](manage-tenants-across-multiple-saas-products-on-a-single-control-plane.md)
+ [Konsolidieren Sie die vorsignierte URL-Generierung und das Herunterladen von Objekten in Amazon S3 mithilfe eines Endpunkts, der statischen IP-Adressen zugeordnet ist](consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.md)
+ [Erstellen Sie eine kontoübergreifende EventBridge Amazon-Verbindung in einer Organisation](create-cross-account-amazon-eventbridge-connection-organization.md)
+ [Stellen Sie DynamoDB-Datensätze mithilfe von Kinesis Data Streams und Firehose an Amazon S3 bereit mit AWS CDK](deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.md)
+ [Implementieren Sie die pfadbasierte API-Versionierung mithilfe benutzerdefinierter Domains in Amazon API Gateway](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Importieren Sie die psycopg2-Bibliothek, AWS Lambda um mit Ihrer PostgreSQL-Datenbank zu interagieren](import-psycopg2-library-lambda.md)
+ [Integrieren Sie Amazon API Gateway mit Amazon SQS, um asynchrones REST zu handhaben APIs](integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.md)
+ [Ereignisse asynchron mit Amazon API Gateway und AWS Lambda verarbeiten](process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.md)
+ [Ereignisse asynchron mit Amazon API Gateway und Amazon DynamoDB Streams verarbeiten](processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.md)
+ [Ereignisse asynchron mit Amazon API Gateway, Amazon SQS und AWS Fargate verarbeiten](process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.md)
+ [Führen Sie AWS Systems Manager Automation Automation-Aufgaben synchron über AWS Step Functions aus](run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.md)
+ [parallel Lesevorgänge von S3-Objekten mithilfe von Python in einer AWS Lambda Funktion ausführen](run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.md)
+ [Senden Sie Telemetriedaten von AWS Lambda zu OpenSearch für Analysen und Visualisierungen in Echtzeit](send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.md)
+ [Richten Sie einen serverlosen Mobilfunkrouter für eine zellenbasierte Architektur ein](serverless-cell-router-architecture.md)
+ [Richten Sie den privaten Zugriff auf einen Amazon S3 S3-Bucket über einen VPC-Endpunkt ein](set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.md)
+ [Fehlerbehebung bei Zuständen mithilfe AWS Step Functions von Amazon Bedrock](troubleshooting-states-in-aws-step-functions.md)
+ [Mehr Muster](serverless-more-patterns-pattern-list.md)

# Erstellen Sie mithilfe von AWS Amplify eine serverlose mobile React Native-App
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify"></a>

*Deekshitulu Pentakota, Amazon Web Services*

## Zusammenfassung
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-summary"></a>

Dieses Muster zeigt, wie Sie mithilfe von AWS Amplify und den folgenden AWS-Services ein serverloses Backend für eine mobile React Native-App erstellen:
+ AWS AppSync
+ Amazon Cognito
+ Amazon DynamoDB

Nachdem Sie das Backend der App mithilfe von Amplify konfiguriert und bereitgestellt haben, authentifiziert Amazon Cognito App-Benutzer und autorisiert sie für den Zugriff auf die App. AWS interagiert AppSync dann mit der Frontend-App und mit einer DynamoDB-Backend-Tabelle, um Daten zu erstellen und abzurufen.

**Anmerkung**  
Dieses Muster verwendet eine einfache "ToDoList" App als Beispiel, aber Sie können ein ähnliches Verfahren verwenden, um jede beliebige mobile React-Native-App zu erstellen.

## Voraussetzungen und Einschränkungen
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ [Amplify Command Line Interface (Amplify CLI)](https://docs.amplify.aws/cli/start/install/), installiert und konfiguriert
+ XCode (jede Version)
+ Microsoft Visual Studio (jede Version, jeder Code-Editor, jeder Texteditor)
+ Vertrautheit mit Amplify
+ Vertrautheit mit Amazon Cognito
+ Vertrautheit mit AWS AppSync
+ Vertrautheit mit DynamoDB
+ Vertrautheit mit Node.js
+ Vertrautheit mit npm
+ Vertrautheit mit React und React Native
+ Vertrautheit mit JavaScript und ECMAScript 6 () ES6
+ Vertrautheit mit GraphQL

## Architektur
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-architecture"></a>

Das folgende Diagramm zeigt eine Beispielarchitektur für die Ausführung des Backends einer mobilen React Native-App in der AWS-Cloud:

![\[Workflow für die Ausführung einer mobilen React-Native-App mit AWS-Services.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/c95e0150-5762-4c90-946c-efa3a22913e4/images/5beff5f9-9d14-49dc-a046-b74e5bfbd13f.png)


Das Diagramm zeigt die folgende Architektur:

1. Amazon Cognito authentifiziert App-Benutzer und autorisiert sie, auf die App zuzugreifen.

1. Um Daten zu erstellen und abzurufen, AppSync verwendet AWS eine GraphQL-API, um mit der Frontend-App und einer Backend-DynamoDB-Tabelle zu interagieren.

## Tools
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-tools"></a>

**AWS-Services**
+ [AWS Amplify](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html) ist eine Reihe von speziell entwickelten Tools und Funktionen, mit denen Frontend-Web- und Mobilentwickler schnell Full-Stack-Anwendungen auf AWS erstellen können.
+ [AWS AppSync](https://docs.aws.amazon.com/appsync/latest/devguide/what-is-appsync.html) bietet eine skalierbare GraphQL-Schnittstelle, mit der Anwendungsentwickler Daten aus mehreren Quellen kombinieren können, darunter Amazon DynamoDB, AWS Lambda und HTTP. APIs
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) bietet Authentifizierung, Autorisierung und Benutzerverwaltung für Web- und mobile Apps.
+ [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.

**Code**

Der Code für die Beispielanwendung, die in diesem Muster verwendet wird, ist im ios-todo-app Repository GitHub [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app) verfügbar. Um die Beispieldateien zu verwenden, folgen Sie den Anweisungen im Abschnitt **Epics** dieses Musters.

## Epen
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-epics"></a>

### Erstelle deine React Native-App und führe sie aus
<a name="create-and-run-your-react-native-app"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie eine React Native-Entwicklungsumgebung ein.  | Anweisungen finden Sie unter [Einrichten der Entwicklungsumgebung](https://reactnative.dev/docs/next/environment-setup) in der React Native-Dokumentation. | App-Developer | 
| Erstellen Sie die mobile ToDoList React Native-App und führen Sie sie im iOS-Simulator aus. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | App-Developer | 

### Initialisieren Sie eine neue Backend-Umgebung für die App
<a name="initialize-a-new-backend-environment-for-the-app"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die Backend-Dienste, die zur Unterstützung der App in Amplify erforderlich sind.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Wenden Sie für das in diesem Muster verwendete ToDoList App-Setup die folgende Beispielkonfiguration an.**Beispiel für die Konfiguration der React Native Amplify App**<pre>? Name: ToDoListAmplify<br /><br />? Environment: dev<br /><br />? Default editor: Visual Studio Code<br /><br />? App type: javascript<br /><br />? Javascript framework: react-native<br /><br />? Source Directory Path: src<br /><br />? Distribution Directory Path: /<br /><br />? Build Command: npm run-script build<br /><br />? Start Command: npm run-script start<br /><br />? Select the authentication method you want to use: AWS profile<br /><br />? Please choose the profile you want to use: default</pre>Weitere Informationen finden Sie unter [Erstellen eines neuen Amplify-Backends in der Amplify](https://docs.amplify.aws/lib/project-setup/create-application/q/platform/js/#create-a-new-amplify-backend) Dev Center-Dokumentation.Der `amplify init` Befehl stellt mithilfe von [AWS die folgenden Ressourcen bereit CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | App-Developer | 

### Fügen Sie Ihrer Amplify React Native-App die Amazon Cognito Cognito-Authentifizierung hinzu
<a name="add-amazon-cognito-authentication-to-your-amplify-react-native-app"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen Amazon Cognito Cognito-Authentifizierungsservice. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Wenden Sie für das in diesem Muster verwendete ToDoList App-Setup die folgende Beispielkonfiguration an.**Beispiel für Konfigurationseinstellungen für den Authentifizierungsdienst**<pre>? Do you want to use the default authentication and security configuration? \ <br />Default configuration<br /> <br />? How do you want users to be able to sign in? \ <br />Username <br /><br />? Do you want to configure advanced settings? \ <br />No, I am done</pre>Der `amplify add auth` Befehl erstellt die erforderlichen Ordner, Dateien und Abhängigkeitsdateien in einem lokalen Ordner (**Amplify**) im Stammverzeichnis des Projekts. Für das in diesem Muster verwendete ToDoList App-Setup wird die **Datei aws-exports.js** zu diesem Zweck erstellt. | App-Developer | 
| Stellen Sie den Amazon Cognito-Service in der AWS-Cloud bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Um die in Ihrem Projekt bereitgestellten Dienste zu sehen, rufen Sie die Amplify-Konsole auf, indem Sie den folgenden Befehl ausführen:`amplify console` | App-Developer | 
| Installieren Sie die erforderlichen Amplify-Bibliotheken für React Native und die CocoaPods Abhängigkeiten für iOS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | App-Developer | 
| Importieren und konfigurieren Sie den Amplify-Dienst. | Importieren und laden Sie in der Einstiegspunktdatei der App (z. B. **App.js**) die Konfigurationsdatei des Amplify-Dienstes, indem Sie die folgenden Codezeilen eingeben:<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)</pre>Wenn Sie nach dem Import des Amplify-Dienstes in die Einstiegspunktdatei der App eine Fehlermeldung erhalten, beenden Sie die App. Öffnen XCode Sie dann die **ToDoListAmplifyDatei .xcworkspace** aus dem iOS-Ordner des Projekts, wählen Sie sie aus und führen Sie die App aus. | App-Developer | 
| Aktualisieren Sie die Einstiegspunktdatei Ihrer App, um die WithAuthenticator-Komponente höherer Ordnung (HOC) zu verwenden. | Der `withAuthenticator` HOC bietet Workflows zum Anmelden, Registrieren und Vergessen von Passwörtern in Ihrer App, wobei nur wenige Codezeilen verwendet werden. Weitere Informationen finden Sie unter [Option 1: Verwenden Sie vorgefertigte UI-Komponenten](https://docs.amplify.aws/lib/auth/getting-started/q/platform/js/#option-1-use-pre-built-ui-components) im Amplify Dev Center. Außerdem [Komponenten höherer Ordnung](https://reactjs.org/docs/higher-order-components.html) in der React-Dokumentation.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)**Beispiel für den WITHAuthenticator HOC-Code**<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)<br />import { withAuthenticator } from 'aws-amplify-react-native';<br /><br /><br />const App = () => {<br />  return null;<br />};<br /><br /><br />export default withAuthenticator(App);</pre>Im iOS-Simulator zeigt die App den Anmeldebildschirm an, der vom Amazon Cognito-Service bereitgestellt wird. | App-Developer | 
| Testen Sie die Einrichtung des Authentifizierungsdienstes. | Gehen Sie im iOS-Simulator wie folgt vor:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Sie können auch die [Amazon Cognito Cognito-Konsole](https://console.aws.amazon.com/cognito/) öffnen und überprüfen, ob ein neuer Benutzer im **Identity Pool** erstellt wurde oder nicht. | App-Developer | 

### Eine AppSync AWS-API und eine DynamoDB-Datenbank mit der App Connect
<a name="connect-an-aws-appsync-api-and-dynamodb-database-to-the-app"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine AppSync AWS-API und eine DynamoDB-Datenbank. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Wenden Sie für das in diesem Muster verwendete ToDoList App-Setup die folgende Beispielkonfiguration an.**Beispiel für API- und Datenbankkonfigurationseinstellungen**<pre>? Please select from one of the below mentioned services: \ <br />GraphQL <br /><br />? Provide API name: todolistamplify<br /><br />? Choose the default authorization type for the API \ <br />Amazon Cognito User Pool<br /><br />Do you want to use the default authentication and security configuration<br /><br />? Default configuration How do you want users to be able to sign in? \ <br />Username<br /><br />Do you want to configure advanced settings? \ <br />No, I am done.<br /><br />? Do you want to configure advanced settings for the GraphQL API \ <br />No, I am done.<br /><br />? Do you have an annotated GraphQL schema? \ <br />No<br /><br />? Choose a schema template: \ <br />Single object with fields (e.g., "Todo" with ID, name, description)<br /><br />? Do you want to edit the schema now? \ <br />Yes</pre>**Beispiel für ein GraphQL-Schema**<pre> type Todo @model {<br />   id: ID!<br />   name: String!<br />   description: String<br />}</pre> | App-Developer | 
| Stellen Sie die AppSync AWS-API bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Wenden Sie für das in diesem Muster verwendete ToDoList App-Setup die folgende Beispielkonfiguration an.**Beispiel für AppSync AWS-API-Konfigurationseinstellungen**Die folgende Konfiguration erstellt die GraphQL-API in AWS AppSync und eine **Todo-Tabelle** in Dynamo DB.<pre> ? Are you sure you want to continue? Yes<br />? Do you want to generate code for your newly created GraphQL API Yes<br />? Choose the code generation language target javascript<br />? Enter the file name pattern of graphql queries, mutations and subscriptions src/graphql/**/*.js<br />? Do you want to generate/update all possible GraphQL operations - \ <br />queries, mutations and subscriptions Yes<br />? Enter maximum statement depth \<br />[increase from default if your schema is deeply nested] 2</pre> | App-Developer | 
| Connect das Frontend der App mit der AppSync AWS-API. | Um die in diesem Muster bereitgestellte ToDoList Beispiel-App zu verwenden, kopieren Sie den Code aus der Datei **App.js** im ios-todo-app GitHub Repository [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app). Integrieren Sie dann den Beispielcode in Ihre lokale Umgebung.Der in der Datei **App.js** des Repositorys enthaltene Beispielcode bewirkt Folgendes:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | App-Developer | 

## Zugehörige Ressourcen
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-resources"></a>
+ [AWS Amplify](https://aws.amazon.com/amplify/)
+ [Amazon Cognito](https://aws.amazon.com/cognito/)
+ [AWS AppSync](https://aws.amazon.com/appsync/)
+ [Amazon-DynamoDB](https://aws.amazon.com/dynamodb/)
+ [React (React-Dokumentation](https://reactjs.org/)) 

# Mandanten für mehrere SaaS-Produkte auf einer einzigen Steuerebene verwalten
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane"></a>

*Ramanna Avancha, Kishan Kavala, Anusha Mandava und Jenifer Pascal, Amazon Web Services*

## Zusammenfassung
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-summary"></a>

Dieses Muster zeigt, wie Mandantenlebenszyklen für mehrere SaaS-Produkte (Software as a Service) auf einer einzigen Steuerungsebene in der AWS-Cloud verwaltet werden. Die bereitgestellte Referenzarchitektur kann Unternehmen dabei helfen, die Implementierung redundanter, gemeinsam genutzter Funktionen in ihren einzelnen SaaS-Produkten zu reduzieren und die Governance-Effizienz in großem Umfang zu steigern.

Große Unternehmen können mehrere SaaS-Produkte in verschiedenen Geschäftsbereichen anbieten. Diese Produkte müssen häufig für die Nutzung durch externe Mandanten mit unterschiedlichen Abonnementstufen bereitgestellt werden. Ohne eine gemeinsame Mandantenlösung müssen IT-Administratoren Zeit damit verbringen, undifferenzierte Funktionen über mehrere SaaS hinweg zu verwalten APIs, anstatt sich auf die Entwicklung der Kernproduktfunktionen zu konzentrieren.

Die in diesem Muster bereitgestellte Common-Tenant-Lösung kann dazu beitragen, die Verwaltung vieler gemeinsam genutzter SaaS-Produktfunktionen eines Unternehmens zu zentralisieren, darunter die folgenden:
+ Sicherheit
+ Bereitstellung von Mandanten
+ Speicherung von Mieterdaten
+ Kommunikation mit Mietern
+ Produktmanagement
+ Protokollierung und Überwachung von Metriken

## Voraussetzungen und Einschränkungen
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ Kenntnisse über Amazon Cognito oder einen externen Identitätsanbieter (IdP)
+ Kenntnisse über Amazon API Gateway
+ Kenntnisse über AWS Lambda
+ Kenntnisse über Amazon DynamoDB
+ Kenntnisse in AWS Identity and Access Management (IAM)
+ Kenntnis von AWS Step Functions
+ Kenntnisse von AWS CloudTrail und Amazon CloudWatch
+ Kenntnisse von Python-Bibliotheken und Code
+ Kenntnisse über SaaS APIs, einschließlich der verschiedenen Benutzertypen (Organisationen, Mandanten, Administratoren und Anwendungsbenutzer), Abonnementmodelle und Modelle zur Mandantenisolierung
+ Kenntnis der SaaS-Anforderungen Ihres Unternehmens für mehrere Produkte und Mehrmandantenabonnements

**Einschränkungen**
+ Integrationen zwischen der Common-Tenant-Lösung und einzelnen SaaS-Produkten werden in diesem Muster nicht behandelt.
+ Dieses Muster stellt den Amazon Cognito-Service nur in einer einzigen AWS-Region bereit.

## Architektur
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-architecture"></a>

**Zieltechnologie-Stack**
+ Amazon API Gateway
+ Amazon Cognito
+ AWS CloudTrail
+ Amazon CloudWatch
+ Amazon DynamoDB
+ IAM
+ AWS Lambda
+ Amazon Simple Storage Service (Amazon-S3)
+ Amazon-Simple-Notification-Service (Amazon-SNS)
+ Funktionen von AWS Step

**Zielarchitektur**

Das folgende Diagramm zeigt einen Beispiel-Workflow für die Verwaltung von Mandantenlebenszyklen für mehrere SaaS-Produkte auf einer einzigen Steuerungsebene in der AWS-Cloud.

![\[Workflow für die Verwaltung der Lebenszyklen von Mandanten auf einer einzigen Kontrollebene.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/4306bc76-22a7-45ca-a107-43df6c6f7ac8/images/700faf4d-c28f-4814-96aa-2d895cdcb518.png)


 Das Diagramm zeigt den folgenden Workflow:

1. Ein AWS-Benutzer initiiert die Mandantenbereitstellung, Produktbereitstellung oder verwaltungsbezogene Aktionen, indem er einen API-Gateway-Endpunkt aufruft.

1. Der Benutzer wird durch ein Zugriffstoken authentifiziert, das aus einem Amazon Cognito Cognito-Benutzerpool oder einem anderen IdP abgerufen wird.

1. Einzelne Bereitstellungs- oder Verwaltungsaufgaben werden von Lambda-Funktionen ausgeführt, die in API Gateway API-Endpunkte integriert sind.

1.  APIs Bei der Verwaltung der gemeinsamen Mandantenlösung (für Mandanten, Produkte und Benutzer) werden alle erforderlichen Eingabeparameter, Header und Token erfasst. Dann APIs ruft die Administration die zugehörigen Lambda-Funktionen auf.

1. IAM-Berechtigungen sowohl für die Administration APIs als auch für die Lambda-Funktionen werden vom IAM-Dienst validiert.

1. Lambda-Funktionen speichern und rufen Daten aus den Katalogen (für Mandanten, Produkte und Benutzer) in DynamoDB und Amazon S3 ab.

1. Nachdem die Berechtigungen validiert wurden, wird ein AWS Step Functions Functions-Workflow aufgerufen, um eine bestimmte Aufgabe auszuführen. Das Beispiel im Diagramm zeigt einen Workflow zur Mandantenbereitstellung.

1. Einzelne AWS Step Functions Functions-Workflow-Aufgaben werden in einem vordefinierten Workflow (State Machine) ausgeführt.

1. Alle wichtigen Daten, die für die Ausführung der Lambda-Funktion benötigt werden, die jeder Workflow-Aufgabe zugeordnet ist, werden entweder von DynamoDB oder Amazon S3 abgerufen. Andere AWS-Ressourcen müssen möglicherweise mithilfe einer CloudFormation AWS-Vorlage bereitgestellt werden.

1. Bei Bedarf sendet der Workflow eine Anfrage zur Bereitstellung zusätzlicher AWS-Ressourcen für ein bestimmtes SaaS-Produkt an das AWS-Konto dieses Produkts.

1. Wenn die Anfrage erfolgreich ist oder fehlschlägt, veröffentlicht der Workflow die Statusaktualisierung als Nachricht zu einem Amazon SNS SNS-Thema.

1. Amazon SNS hat das Amazon SNS-Thema des Step Functions Functions-Workflows abonniert.

1. Amazon SNS sendet dann die Workflow-Status-Aktualisierung zurück an den AWS-Benutzer.

1. Protokolle der Aktionen der einzelnen AWS, einschließlich eines Prüfprotokolls mit API-Aufrufen, werden an gesendet CloudWatch. CloudWatch Für jeden Anwendungsfall können spezifische Regeln und Alarme konfiguriert werden.

1. Protokolle werden zu Prüfungszwecken in Amazon S3 S3-Buckets archiviert.

**Automatisierung und Skalierung**

Dieses Muster verwendet eine CloudFormation Vorlage, um die Bereitstellung der Common-Tenant-Lösung zu automatisieren. Die Vorlage kann Ihnen auch dabei helfen, die zugehörigen Ressourcen schnell nach oben oder unten zu skalieren.

Weitere Informationen finden Sie unter [Arbeiten mit CloudFormation AWS-Vorlagen](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) im * CloudFormation AWS-Benutzerhandbuch*.

## Tools
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-tools"></a>

**AWS-Services**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) unterstützt Sie bei der Erstellung, Veröffentlichung, Wartung, Überwachung und Sicherung von REST, HTTP und WebSocket APIs in jeder Größenordnung.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) bietet Authentifizierung, Autorisierung und Benutzerverwaltung für Web- und mobile Apps.
+ [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) unterstützt Sie bei der Prüfung der Unternehmensführung, der Einhaltung von Vorschriften und des Betriebsrisikos Ihres AWS-Kontos.
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) hilft Ihnen dabei, die Metriken Ihrer AWS-Ressourcen und der Anwendungen, die Sie auf AWS ausführen, in Echtzeit zu überwachen.
+ [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 Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS-Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) ist ein Rechenservice, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) unterstützt Sie bei der Koordination und Verwaltung des Nachrichtenaustauschs zwischen Herausgebern und Kunden, einschließlich Webservern und E-Mail-Adressen.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) ist ein serverloser Orchestrierungsservice, mit dem Sie AWS Lambda Lambda-Funktionen und andere AWS-Services kombinieren können, um geschäftskritische Anwendungen zu erstellen.

## Best Practices
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-best-practices"></a>

Die Lösung in diesem Muster verwendet eine einzige Steuerungsebene, um das Onboarding mehrerer Mandanten zu verwalten und den Zugriff auf mehrere SaaS-Produkte bereitzustellen. Die Steuerungsebene hilft administrativen Benutzern bei der Verwaltung von vier weiteren, funktionsspezifischen Ebenen:
+ Sicherheitsebene
+ Workflow-Ebene
+ Kommunikationsebene
+ Protokollierungs- und Überwachungsebene

## Epen
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-epics"></a>

### Konfigurieren Sie die Sicherheitsebene
<a name="configure-the-security-plane"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Legen Sie die Anforderungen für Ihre Multi-Tenant-SaaS-Plattform fest. | Legen Sie detaillierte Anforderungen für Folgendes fest:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Cloud-Architekt, AWS-Systemadministrator | 
| Richten Sie den Amazon Cognito-Service ein. | Folgen Sie den Anweisungen unter [Erste Schritte mit Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-getting-started.html) im *Amazon Cognito Developer Guide*. | Cloud-Architekt | 
| Konfigurieren Sie die erforderlichen IAM-Richtlinien. | Erstellen Sie die erforderlichen IAM-Richtlinien für Ihren Anwendungsfall. Ordnen Sie dann die Richtlinien den IAM-Rollen in Amazon Cognito zu.Weitere Informationen finden Sie unter [Verwaltung des Zugriffs mithilfe von Richtlinien](https://docs.aws.amazon.com/cognito/latest/developerguide/security-iam.html#security_iam_access-manage) und [rollenbasierter Zugriffskontrolle](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html) im *Amazon Cognito* Developer Guide. | Cloud-Administrator, Cloud-Architekt, AWS IAM-Sicherheit | 
| Konfigurieren Sie die erforderlichen API-Berechtigungen.  | Richten Sie API-Gateway-Zugriffsberechtigungen mithilfe von IAM-Rollen und -Richtlinien sowie Lambda-Autorisierern ein.Anweisungen finden Sie in den folgenden Abschnitten des *Amazon API Gateway Developer Guide*:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Cloud-Administrator, Cloud-Architekt | 

### Konfigurieren Sie die Datenebene
<a name="configure-the-data-plane"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die erforderlichen Datenkataloge. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Weitere Informationen finden Sie unter [Setting up DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SettingUp.html) im *Amazon DynamoDB Developer Guide*. | DBA | 

### Konfigurieren Sie die Steuerungsebene
<a name="configure-the-control-plane"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie Lambda-Funktionen und API Gateway APIs , um die erforderlichen Aufgaben auf der Steuerungsebene auszuführen. | Erstellen Sie separate Lambda-Funktionen und API Gateway, APIs um Folgendes hinzuzufügen, zu löschen und zu verwalten:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Weitere Informationen finden Sie unter [Using AWS Lambda with Amazon API Gateway](https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html) im *AWS Lambda Developer Guide*. | App-Developer | 

### Konfigurieren Sie die Workflow-Ebene
<a name="configure-the-workflow-plane"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Identifizieren Sie die Aufgaben, die AWS Step Functions Functions-Workflows ausführen müssen. | Identifizieren und dokumentieren Sie die detaillierten AWS Step Functions Functions-Workflow-Anforderungen für Folgendes:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Stellen Sie sicher, dass die wichtigsten Beteiligten die Anforderungen genehmigen. | Besitzer der App | 
| Erstellen Sie die erforderlichen AWS Step Functions Functions-Workflows. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | App-Entwickler, Lead aufbauen | 

### Konfigurieren Sie die Kommunikationsebene
<a name="configure-the-communication-plane"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie Amazon SNS SNS-Themen. | Erstellen Sie Amazon SNS SNS-Themen, um Benachrichtigungen zu folgenden Themen zu erhalten:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Weitere Informationen finden Sie unter dem [Thema Creating an SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html) im *Amazon SNS Developer Guide*. | App-Besitzer, Cloud-Architekt | 
| Abonnieren Sie Endpunkte für jedes Amazon SNS SNS-Thema. | Um Nachrichten zu erhalten, die zu einem Amazon SNS SNS-Thema veröffentlicht wurden, müssen Sie für jedes Thema einen Endpunkt abonnieren.Weitere Informationen finden Sie unter Amazon SNS [SNS-Abonnement im Amazon SNS *SNS-Entwicklerhandbuch*](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html). | App-Entwickler, Cloud-Architekt | 

### Konfigurieren Sie die Protokollierungs- und Überwachungsebene
<a name="configure-the-logging-and-monitoring-plane"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Aktivieren Sie die Protokollierung für jede Komponente der Common-Tenant-Lösung. | Aktivieren Sie die Protokollierung auf Komponentenebene für jede Ressource in der Common Tenant-Lösung, die Sie erstellt haben.Detaillierte Informationen finden Sie hier:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Mithilfe von IAM-Richtlinien können Sie Protokolle für jede Ressource in einem zentralen Protokollierungskonto konsolidieren. Weitere Informationen finden Sie unter [Zentralisierte Protokollierung und Sicherheitsvorkehrungen für mehrere Konten.](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/centralized-logging-and-multiple-account-security-guardrails.html) | App-Entwickler, AWS-Systemadministrator, Cloud-Administrator | 

### Bereitstellung und Bereitstellung der Common-Tenant-Lösung
<a name="provision-and-deploy-the-common-tenant-solution"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
|  CloudFormation Vorlagen erstellen. | Automatisieren Sie mithilfe von CloudFormation Vorlagen die Bereitstellung und Wartung der vollständigen Common-Tenant-Lösung und all ihrer Komponenten.Weitere Informationen finden Sie im [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html). | App-Entwickler, DevOps Ingenieur, CloudFormation Entwickler | 

## Zugehörige Ressourcen
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-resources"></a>
+ [Steuern Sie den Zugriff auf eine REST-API mithilfe von Amazon Cognito Cognito-Benutzerpools als Autorisierer](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) (*Amazon API Gateway Developer Guide*)
+ [Verwenden Sie API Gateway Lambda-Autorisierer](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (*Amazon API Gateway* Developer Guide)
+ [Amazon Cognito Cognito-Benutzerpools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) (*Amazon Cognito Cognito-Entwicklerhandbuch*)
+ [Kontoübergreifende, regionsübergreifende CloudWatch Konsole](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Cross-Account-Cross-Region.html) (* CloudWatch Amazon-Benutzerhandbuch*)

# Konsolidieren Sie die vorsignierte URL-Generierung und das Herunterladen von Objekten in Amazon S3 mithilfe eines Endpunkts, der statischen IP-Adressen zugeordnet ist
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses"></a>

*Song Jin, Eunhye Jo und Jun Soung Lee, Amazon Web Services*

## Zusammenfassung
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-summary"></a>

Dieses Muster vereinfacht den Zugriff auf Amazon Simple Storage Service (Amazon S3), indem sichere, benutzerdefinierte Vorlagen URLs für Objektdownloads erstellt werden. Die Lösung bietet einen einzigen Endpunkt mit einer eindeutigen Domain und statischen IP-Adressen. Es ist auf Kunden zugeschnitten, die eine Konsolidierung von API- und Amazon S3 S3-Endpunkten unter einer einheitlichen Domain mit statischen IP-Adressen benötigen. Bei diesem Anwendungsfall befolgen Benutzer eine Firewall-Richtlinie für IP-Adressen und Domain-Zulassungslisten, wodurch der API-Zugriff auf bestimmte Domänen und IP-Adressen beschränkt wird. 

Die Architektur verwendet Schlüssel AWS-Services wie AWS Global Accelerator Amazon API Gateway AWS Lambda, Application Load Balancer und Amazon S3. AWS PrivateLink Dieses Design zentralisiert die API für die Generierung vorsignierter Endgeräte URLs und des Amazon S3 S3-Endpunkts unter einer einzigen Domain, die mit einem Accelerator mit zwei statischen IP-Adressen verknüpft ist. Folglich können Benutzer mühelos vorsignierte Amazon S3 S3-Objekte über einen einheitlichen Domain-Endpunkt mit statischen IP-Adressen anfordern URLs und herunterladen. 

Diese Architektur ist besonders vorteilhaft für Kunden mit strengen Richtlinien oder Compliance-Anforderungen, z. B. im öffentlichen Sektor, im medizinischen Bereich und im Finanzsektor.

## Voraussetzungen und Einschränkungen
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto
+ Eine öffentlich gehostete Zone für Ihren benutzerdefinierten Domainnamen
+ Eine in AWS Certificate Manager (ACM) importierte Domain in AWS-Region der Ihrer Wahl

**Einschränkungen**
+ Der Amazon S3 S3-Bucket-Name muss mit dem Domainnamen des Endpunkts übereinstimmen. Diese Anforderung soll sicherstellen, dass der Amazon S3 S3-Endpunkt über den einzigen API-Endpunkt bedient werden kann.
+ Der in API Gateway verwendete benutzerdefinierte Domainname sollte mit dem Domainnamen des einzelnen API-Endpunkts übereinstimmen.
+ Einige AWS-Services sind nicht in allen verfügbar AWS-Regionen. Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie unter [AWS Dienste nach Regionen](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Informationen zu bestimmten Endpunkten finden Sie unter [Dienstendpunkte und Kontingente](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html). Wählen Sie dort den Link für den Dienst aus.

## Architektur
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-architecture"></a>

Das folgende Diagramm zeigt die Zielarchitektur und den Arbeitsablauf für dieses Muster.

![\[Komponenten und Arbeitsablauf für die Generierung vorab signierter URLs und das Herunterladen von Objekten.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/e19ebcb5-2138-481e-952e-3cfee9ad9e97/images/effd197c-d4d7-4990-8b66-3eb1c64aab4c.png)


Das Diagramm veranschaulicht das folgende Konzept und den folgenden Arbeitsablauf:

1. Ein Benutzer initiiert eine Anforderung zur Generierung einer vorsignierten URL mithilfe des benutzerdefinierten Endpunkts AWS Global Accelerator, über den der benutzerdefinierte Domänenname und die zugehörigen IP-Adressen bereitgestellt wird.

1. Eine Lambda-Funktion generiert die vorsignierte URL, die auf den benutzerdefinierten Endpunkt verweist. Sie antwortet mit einer 301-Weiterleitung, die die generierte vorsignierte URL enthält. Über die umgeleitete vorsignierte URL lädt der Benutzer das Objekt automatisch herunter, indem er den benutzerdefinierten Endpunkt verwendet, der über Global Accelerator bereitgestellt wird.

Die Gesamtarchitektur für die Generierung vorsignierter URLs und den Workflow zum Herunterladen von Objekten besteht aus folgenden Komponenten:
+ Bereitstellung statischer IP-Adressen durch Global Accelerator.
+ Registrierung des Alias des Accelerators als A-Eintrag in der öffentlich gehosteten Zone von Amazon Route 53 mit dem benutzerdefinierten Domainnamen.
+ Erstellung eines Amazon S3 S3-Buckets mit einem Bucket-Namen, der dem registrierten benutzerdefinierten Domainnamen entspricht.
+ Erstellung von VPC-Endpunkten für API Gateway und den Amazon S3 S3-Service.
+ Konfiguration eines intern gerichteten Application Load Balancer für die Verbindung mit Global Accelerator.
+ Zuweisung eines benutzerdefinierten Domainnamens für API Gateway mit angehängtem ACM-Zertifikat.
+ Bereitstellung eines privaten API Gateway, das in eine Lambda-Funktion integriert ist.
+ Die Lambda-Funktion ist mit einer angehängten AWS Identity and Access Management (IAM-) Rolle (mit [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)Berechtigungen) ausgestattet.

## Tools
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-tools"></a>

**AWS-Services**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) unterstützt Sie bei der Erstellung, Veröffentlichung, Wartung, Überwachung und Sicherung von REST, HTTP und WebSocket APIs in jeder Größenordnung.
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) verteilen den eingehenden Anwendungsdatenverkehr auf mehrere Ziele, z. B. Amazon Elastic Compute Cloud (Amazon EC2) -Instances, in mehreren Availability Zones.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) unterstützt Sie bei der Erstellung, Speicherung und Erneuerung öffentlicher und privater SSL/TLS X.509-Zertifikate und -Schlüssel, die Ihre AWS Websites und Anwendungen schützen.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)ist ein Softwareentwicklungs-Framework, das Ihnen hilft, AWS Cloud Infrastruktur im Code zu definieren und bereitzustellen.
+ [AWS Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html)ist ein globaler Dienst, der mehrere AWS-Regionen Endpunkte unterstützt. Sie können Beschleuniger erstellen, die den Datenverkehr über das globale Netzwerk an optimale Endpunkte weiterleiten. AWS Dies verbessert die Verfügbarkeit und Leistung Ihrer Internetanwendungen, die von einer globalen Zielgruppe verwendet werden.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [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.
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)hilft Ihnen dabei, unidirektionale, private Verbindungen von Ihren virtuellen privaten Clouds (VPCs) zu Diensten außerhalb der VPC herzustellen.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) ist ein hochverfügbarer und skalierbarer DNS-Web-Service.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.

**Andere Tools**
+ [Terraform](https://www.terraform.io/) ist ein IaC-Tool (Infrastructure as Code) HashiCorp , mit dem Sie Cloud- und lokale Ressourcen erstellen und verwalten können.

**Code-Repository**

Sie können dieses Muster je nach Wunsch entweder mit AWS CDK oder mit Terraform bereitstellen. Der Abschnitt [Epics](#consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics) enthält Anweisungen für beide Bereitstellungsmethoden. Der Code für dieses Muster ist in den folgenden GitHub Repositorys verfügbar:
+ **AWS CDK**— [s3- -cdk presignedurl-staticips-endpoint-with](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk)
+ **[Terraform — s3- -Terraform presignedurl-staticips-endpoint-with](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform)**

## Best Practices
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-best-practices"></a>
+ Um die Sicherheit in der Produktionsumgebung zu erhöhen, ist es wichtig, Autorisierungsmechanismen wie [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) zu implementieren, um den Zugriff auf die `PresignedUrl` Generierungs-API einzuschränken.
+ Folgen Sie dem Prinzip der geringsten Rechte und gewähren Sie die für die Ausführung einer Aufgabe erforderlichen Mindestberechtigungen. Weitere Informationen finden Sie in der IAM-Dokumentation unter [Gewährung der geringsten Rechte](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) und [bewährte Methoden zur Sicherheit](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html).

## Epen
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics"></a>

### Bereite die Umgebung vor
<a name="prepare-the-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Entscheiden Sie sich für einen Domainnamen. | Entscheiden Sie sich für einen öffentlichen Domainnamen für den einheitlichen Amazon S3 S3-Endpunkt. Der Domainname wird auch als Amazon S3 S3-Bucket-Name verwendet. | AWS-Administrator, Netzwerkadministrator | 
| Erstellen Sie eine öffentliche gehostete Zone. | [Erstellen Sie eine öffentlich gehostete Zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) in Amazon Route 53. Sein Domainname muss mit dem Domainnamen übereinstimmen, der in API Gateway verwendet wird. | AWS-Administrator, Netzwerkadministrator | 
| Bereiten Sie ein SSL-Zertifikat vor. | Verwenden Sie AWS Certificate Manager (ACM), um ein SSL-Zertifikat für Ihre Webanwendungsdomäne [anzufordern](https://docs.aws.amazon.com/acm/latest/userguide/acm-public-certificates.html) oder zu [importieren](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html). | AWS-Administrator, Netzwerkadministrator | 

### Stellen Sie das Muster mit Terraform bereit
<a name="deploy-the-pattern-with-terraform"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie die Terraform-Entwicklungsumgebung ein. | Gehen Sie wie folgt vor, um die Entwicklungsumgebung einzurichten:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | AWS-Administrator, Cloud-Administrator | 
| Ändern Sie die **`provider.tf`**Dateien `.tfvars` und. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html)**Beachten Sie Folgendes:**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | AWS-Administrator, Cloud-Administrator | 
| Stellen Sie Netzwerkressourcen bereit. | Führen Sie die folgenden Befehle aus, um Netzwerkressourcen bereitzustellen:<pre>cd ./2.vpc_alb_ga<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre>Geben Sie bei der Ausführung des `apply ` Befehls **yes** ein, wenn Sie dazu aufgefordert werden. | AWS-Administrator, Cloud-Administrator | 
| Stellen Sie API Gateway, Amazon S3 und Lambda bereit. | Verwenden Sie die folgenden Befehle, um Netzwerkressourcen bereitzustellen:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre> | AWS-Administrator, Cloud-Administrator | 

### Stellen Sie das Muster bereit mit AWS CDK
<a name="deploy-the-pattern-with-cdk"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie die AWS CDK Entwicklungsumgebung ein. | Gehen Sie wie folgt vor, um die Entwicklungsumgebung einzurichten:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | AWS-Administrator, Cloud-Administrator | 
| Konfigurieren Sie die Domain-Einstellungen in der `config/index.ts` Datei. | Verwenden Sie die folgenden Befehle, um die Optionen der konstanten Variablen zu bearbeiten:<pre>export const options = {<br />    certificateArn: '{arn of the acm which created before}',<br />    dnsAttr: {<br />        zoneName: '{public hosted zone name}',<br />        hostedZoneId: 'hosted zone Id',<br />    },<br />    domainNamePrefix: '{Prefix for the domain}',<br />    presignPath: 'presign',<br />    objectsPath: 'objects',<br />};</pre>Ersetzen Sie in den Befehlen jeden Platzhalter durch Ihre eigenen Informationen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | AWS-Administrator, Cloud-Administrator | 
| Stellen Sie die Stacks bereit. | Verwenden Sie den folgenden Befehl, um zwei Stacks bereitzustellen, einen für die Virtual Private Cloud (VPC) und einen weiteren für die Anwendung:<pre>$ npm install <br />$ cdk synth <br />$ cdk deploy --all</pre> | AWS-Administrator, Cloud-Administrator | 

### Testen Sie das Muster
<a name="test-the-pattern"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Überprüfen Sie die IP-Adressen des Endpunkts. | Verwenden Sie den folgenden Befehl, um zu überprüfen, ob die Domäne für dieses Muster statische IP-Adressen hat:<pre>nslookup ${s3-bucket-prefix}.${domain}</pre> | Netzwerkadministrator | 
| Laden Sie eine Testdatei hoch, die Sie später herunterladen können. | Laden Sie die Testdatei in den `'/objects'` Ordner im Amazon S3 S3-Bucket hoch. | AWS-Administrator, Cloud-Administrator | 
| Rufen Sie die API auf, um eine vorsignierte URL zu generieren. | Um eine vorsignierte URL zu generieren, rufen Sie die URL in einem Browser oder API-Client (z. B. [Postman](https://www.postman.com/product/what-is-postman/)) im folgenden Format auf:<pre>https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}</pre>Ersetzen Sie die Platzhalterwerte in `${s3-bucket-prefix}` und `${domain}` durch die Werte, die Sie in den vorherigen Schritten festgelegt haben. | Besitzer der App | 
| Überprüfe das Ergebnis. | Das erwartete Ergebnis ist, dass Sie einen Statuscode für die Weiterleitung 301 (dauerhaft verschoben) erhalten sollten. Diese Antwort enthält die vorsignierte URL, die den Download Ihrer Testdatei automatisch initiieren sollte. | Testingenieur | 

### Mit Terraform aufräumen
<a name="clean-up-with-terraform"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Zerstören Sie API Gateway-, Amazon S3- und Lambda-Ressourcen. | Verwenden Sie die folgenden Befehle, um Ressourcen zu löschen:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | AWS-Administrator, Cloud-Administrator | 
| Zerstören Sie Netzwerkressourcen. | Verwenden Sie die folgenden Befehle, um Netzwerkressourcen zu löschen:<pre>cd ./1.vpc_alb_ga<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | AWS-Administrator, Cloud-Administrator | 

### Aufräumen mit AWS CDK
<a name="clean-up-with-cdk"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Zerstöre die Stapel. | Verwenden Sie den folgenden Befehl, um sowohl den VPC- als auch den Anwendungsstapel zu löschen:<pre>$ cdk destroy --all</pre> | AWS-Administrator, Cloud-Administrator | 
| Leeren und löschen Sie die Amazon S3 S3-Buckets. | [Leeren](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) und [löschen Sie](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) das Objekt Amazon S3 S3-Bucket und den Amazon S3 S3-Logs-Bucket, die nicht standardmäßig gelöscht werden.Die Amazon S3 S3-Bucket-Namen lauten `${s3-bucket-prefix}.${domain}` und`${s3-bucket-prefix}.${domain}-logs`.Wenn Sie es vorziehen, das [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) zum Löschen der Buckets zu verwenden, verwenden Sie die folgenden Befehle:<pre>$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force<br />$ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force</pre>Ersetzen Sie `${s3-bucket-prefix}` und `${domain}` durch die Werte, die Sie in den vorherigen Schritten festgelegt haben. , /p> | AWS-Administrator, Cloud-Administrator | 

## Zugehörige Ressourcen
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-resources"></a>

**AWS Blogs**
+ [Zugriff auf ein Amazon API Gateway über statische IP-Adressen, bereitgestellt von AWS Global Accelerator](https://aws.amazon.com/blogs/networking-and-content-delivery/accessing-an-aws-api-gateway-via-static-ip-addresses-provided-by-aws-global-accelerator/) 
+ [Generieren Sie eine vorsignierte URL in modularer Form AWS CDK JavaScript](https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/) 
+ [Hosten interner statischer HTTPS-Websites mit ALB, S3 und PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) 

# Erstellen Sie eine kontoübergreifende EventBridge Amazon-Verbindung in einer Organisation
<a name="create-cross-account-amazon-eventbridge-connection-organization"></a>

*Sam Wilson und Robert Stone, Amazon Web Services*

## Zusammenfassung
<a name="create-cross-account-amazon-eventbridge-connection-organization-summary"></a>

Große verteilte Systeme verwenden Amazon EventBridge , um Statusänderungen zwischen verschiedenen Amazon Web Services (AWS) -Konten in einer AWS Organizations Organisation zu kommunizieren. EventBridge Ist jedoch in der Regel in der Lage, nur Endgeräte oder Verbraucher in derselben AWS-Konto Umgebung anzusprechen. Die Ausnahme ist ein Event-Bus in einem anderen Konto. Dieser Event-Bus ist ein gültiges Ziel. Um Ereignisse aus einem Event-Bus in einem anderen Konto zu verarbeiten, müssen die Ereignisse vom Event-Bus des Quellkontos in den Event-Bus des Zielkontos übertragen werden. Verwenden Sie den in diesem Muster beschriebenen empfohlenen Ansatz AWS-Konten, um Probleme bei der Verwaltung kritischer Ereignisse zwischen Anwendungen innerhalb verschiedener Anwendungen zu vermeiden.

Dieses Muster veranschaulicht, wie eine ereignisgesteuerte Architektur implementiert wird EventBridge , an der mehrere Personen AWS-Konten in einer AWS Organizations Organisation beteiligt sind. Das Muster verwendet AWS Cloud Development Kit (AWS CDK) Toolkit und. AWS CloudFormation

EventBridge bietet einen serverlosen Event-Bus, der Sie beim Empfangen, Filtern, Transformieren, Weiterleiten und Bereitstellen von Ereignissen unterstützt. Als wichtige Komponente ereignisgesteuerter Architekturen EventBridge unterstützt es die Trennung zwischen Nachrichtenproduzenten und Empfängern dieser Nachrichten. In einem einzigen Konto ist das ganz einfach. Bei einer Struktur mit mehreren Konten sind zusätzliche Überlegungen erforderlich, damit Ereignisse auf dem Event-Bus in einem Konto auf andere Konten innerhalb derselben Organisation übertragen werden können.

Informationen zu kontospezifischen Überlegungen für Produzenten und Verbraucher finden Sie im Abschnitt [Zusätzliche](#create-cross-account-amazon-eventbridge-connection-organization-additional) Informationen.

## Voraussetzungen und Einschränkungen
<a name="create-cross-account-amazon-eventbridge-connection-organization-prereqs"></a>

**Voraussetzungen**
+ Eine AWS Organizations Organisation, der mindestens zwei Personen angehören AWS-Konten
+ Eine AWS Identity and Access Management (IAM-) Rolle in beiden AWS-Konten , mit der Sie die Infrastruktur in beiden bereitstellen können, AWS-Konten indem Sie AWS CloudFormation
+ Git [lokal installiert](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ AWS Command Line Interface (AWS CLI) [lokal installiert](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ AWS CDK [lokal installiert](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) und in [beiden Bootstrapping](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-howto) AWS-Konten

**Produktversionen**

Dieses Muster wurde mit den folgenden Tools und Versionen erstellt und getestet:
+ AWS CDK Toolkit 2.126.0
+ Node.js 18.19.0
+ npm 10.2.3
+ Python 3.12

Dieses Muster sollte mit jeder Version von AWS CDK v2 oder npm funktionieren. Die Versionen 13.0.0 bis 13.6.0 von Node.js sind nicht kompatibel mit. AWS CDK

## Architektur
<a name="create-cross-account-amazon-eventbridge-connection-organization-architecture"></a>

**Zielarchitektur**

Das folgende Diagramm zeigt den Architektur-Workflow für die Übertragung eines Ereignisses von einem Konto aus und dessen Verarbeitung in einem anderen Konto.

![\[Der dreistufige Prozess zum Verbinden des Quell-Produzentenkontos und des Ziel-Verbraucherkontos.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/34a5f3ae-511d-4636-999f-c73396770117/images/ccc4878a-6281-4a77-a483-4e6f299d7807.png)


Der Workflow umfasst die folgenden Schritte:

1. Die AWS Lambda Producer-Funktion im Quellkonto platziert ein Ereignis auf dem EventBridge Event-Bus des Kontos.

1. Die kontenübergreifende EventBridge Regel leitet das Ereignis an einen EventBridge Event-Bus im Zielkonto weiter.

1. Der EventBridge Eventbus im Zielkonto hat eine Lambda-Zielregel, die die Consumer-Lambda-Funktion aufruft.

Eine bewährte Methode ist die Verwendung einer [Dead Letter Queue (DLQ)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) für die Behandlung fehlgeschlagener Aufrufe der Consumer-Lambda-Funktion. Aus Gründen der Übersichtlichkeit wurde die DLQ in dieser Lösung jedoch weggelassen. Weitere Informationen darüber, wie Sie eine DLQ in Ihren Workflows implementieren und die Fähigkeit Ihrer Workflows zur Wiederherstellung nach Fehlern verbessern können, finden Sie im Blogbeitrag [Implementieren von AWS Lambda Fehlerbehandlungsmustern](https://aws.amazon.com/blogs/compute/implementing-aws-lambda-error-handling-patterns/).

**Automatisierung und Skalierung**

AWS CDK stellt automatisch die erforderliche Architektur bereit. EventBridge kann je nach auf Tausende von Datensätzen pro Sekunde skaliert AWS-Region werden. Weitere Informationen finden Sie in der [Dokumentation zu EventBridge Amazon-Kontingenten](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html).

## Tools
<a name="create-cross-account-amazon-eventbridge-connection-organization-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 Sie bei der Definition und Bereitstellung von AWS Cloud Infrastruktur im Code unterstützt. Dieses Muster verwendet das [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html), ein Cloud-Entwicklungskit für die Befehlszeile, mit dem Sie mit Ihrer AWS CDK App interagieren können.
+ [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 AWS 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.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)ist ein Kontoverwaltungsservice, mit dem Sie mehrere Konten zu einer Organisation AWS-Konten zusammenfassen können, die Sie erstellen und zentral verwalten.

**Andere Tools**
+ [Node.js](https://nodejs.org/en/docs/) ist eine ereignisgesteuerte JavaScript Laufzeitumgebung, die für die Erstellung skalierbarer Netzwerkanwendungen entwickelt wurde.
+ [npm](https://docs.npmjs.com/about-npm) ist eine Softwareregistrierung, die in einer Node.js -Umgebung ausgeführt wird und verwendet wird, um Pakete gemeinsam zu nutzen oder auszuleihen und die Bereitstellung von privaten Paketen zu verwalten.
+ [Python](https://www.python.org/) ist eine Allzweck-Computerprogrammiersprache.

**Code-Repository**

Der Code für dieses Muster ist im Repository GitHub [cross-account-eventbridge-in-organization](https://github.com/aws-samples/aws-cdk-examples/tree/main/python/cross-account-eventbridge-in-organization) verfügbar.

## Best Practices
<a name="create-cross-account-amazon-eventbridge-connection-organization-best-practices"></a>

Bewährte Methoden für die Arbeit mit EventBridge finden Sie in den folgenden Ressourcen:
+ [Bewährte Methoden für EventBridge Amazon-Event-Muster](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-patterns-best-practices.html)
+ [Bewährte Methoden bei der Definition von Regeln in Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules-best-practices.html)

## Epen
<a name="create-cross-account-amazon-eventbridge-connection-organization-epics"></a>

### Bereiten Sie Ihre lokale AWS CDK Bereitstellungsumgebung vor
<a name="prepare-your-local-cdk-deployment-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Konfigurieren Sie lokale Anmeldeinformationen für das Quellkonto und das Zielkonto. | Lesen Sie [unter Neue Konfiguration und neue Anmeldeinformationen einrichten](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new) und verwenden Sie die Authentifizierungs- und Anmeldemethode, die für Ihre Umgebung am sinnvollsten ist.Stellen Sie sicher, dass Sie die Authentifizierung sowohl AWS CLI für das Quellkonto als auch für das Zielkonto konfigurieren.Bei diesen Anweisungen wird davon ausgegangen, dass Sie zwei AWS-Profile lokal konfiguriert haben: `sourceAccount` und`destinationAccount`. | App-Developer | 
| Bootstrap für beide AWS-Konten. | Führen Sie die folgenden Befehle aus, um die Konten zu booten:<pre>cdk bootstrap --profile sourceAccount<br />cdk bootstrap --profile destinationAccount</pre> | App-Developer | 
| Klonen Sie den Mustercode. | Führen Sie den folgenden Befehl aus, um das Repository zu klonen:<pre>git clone git@github.com:aws-samples/aws-cdk-examples.git</pre>Ändern Sie dann das Verzeichnis in den neu geklonten Projektordner:<pre>cd aws-cdk-examples/python/cross-account-eventbridge-in-organization</pre> | App-Developer | 

### Auf ProducerStack das Quellkonto bereitstellen
<a name="deploy-producerstack-to-the-source-account"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Ändern Sie `cdk.json` mit Ihren Daten AWS Organizations und Ihren Kontodaten. | Nehmen Sie im Stammordner des Projekts die folgenden Änderungen vor`cdk.json`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | App-Developer | 
| Stellen Sie die ProducerStack Ressourcen bereit. | Führen Sie den folgenden Befehl im Stammverzeichnis des Projekts aus:<pre>cdk deploy ProducerStack --profile sourceAccount</pre>Wenn Sie dazu aufgefordert werden, akzeptieren Sie die neuen IAM-Rollen und andere sicherheitsrelevante Berechtigungen, die durch erstellt wurden. AWS CloudFormation | App-Developer | 
| Stellen Sie sicher, dass die ProducerStack Ressourcen bereitgestellt wurden. | Gehen Sie wie folgt vor, um die Ressourcen zu überprüfen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | App-Developer | 

### Auf ConsumerStack dem Zielkonto bereitstellen
<a name="deploy-consumerstack-to-the-destination-account"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie die ConsumerStack Ressourcen bereit. | Führen Sie den folgenden Befehl im Stammverzeichnis des Projekts aus:<pre>cdk deploy ConsumerStack --profile destinationAccount</pre>Wenn Sie dazu aufgefordert werden, akzeptieren Sie die neuen IAM-Rollen und andere sicherheitsrelevante Berechtigungen, die durch erstellt wurden. CloudFormation | App-Developer | 
| Stellen Sie sicher, dass die Ressourcen bereitgestellt wurden ConsumerStack  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | App-Developer | 

### Ereignisse produzieren und nutzen
<a name="produce-and-consume-events"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Rufen Sie die Producer Lambda-Funktion auf. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | App-Developer | 
| Stellen Sie sicher, dass das Ereignis empfangen wurde. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | App-Developer | 

### Bereinigen
<a name="cleanup"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Zerstöre die ConsumerStack Ressourcen. | Wenn Sie dieses Muster als Test verwenden, bereinigen Sie die bereitgestellten Ressourcen, um zusätzliche Kosten zu vermeiden.Führen Sie den folgenden Befehl im Stammverzeichnis des Projekts aus:<pre>cdk destroy ConsumerStack --profile destinationAccount</pre>Sie werden aufgefordert, das Löschen des Stacks zu bestätigen. | App-Developer | 
| Zerstöre die ProducerStack Ressourcen. | Führen Sie den folgenden Befehl im Stammverzeichnis des Projekts aus:<pre>cdk destroy ProducerStack --profile sourceAccount</pre>Sie werden aufgefordert, das Löschen des Stacks zu bestätigen. | App-Developer | 

## Fehlerbehebung
<a name="create-cross-account-amazon-eventbridge-connection-organization-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Im Zielkonto wurde kein Ereignis empfangen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | 
| Beim Aufrufen einer Lambda-Funktion von der Konsole aus wird der folgende Fehler zurückgegeben: `User: arn:aws:iam::123456789012:user/XXXXX is not authorized to perform: lambda:Invoke` | Wenden Sie sich an Ihren AWS-Konto Administrator, um die entsprechenden `lambda:Invoke` Aktionsberechtigungen für die `ProducerStack-ProducerLambdaXXXX` Lambda-Funktion zu erhalten. | 

## Zugehörige Ressourcen
<a name="create-cross-account-amazon-eventbridge-connection-organization-resources"></a>

**Referenzen**
+ [AWS Organizations Benutzerhandbuch](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)
+ [ EventBridge Amazon-Ereignismuster](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Regeln bei Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)

**Tutorials und Videos**
+ [Tutorial: Organisation erstellen und konfigurieren](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html)
+ [AWS re:Invent 2023 — Fortgeschrittene ereignisgesteuerte Muster mit Amazon (01-R) EventBridge COM3](https://www.youtube.com/watch?v=6X4lSPkn4ps)

## Zusätzliche Informationen
<a name="create-cross-account-amazon-eventbridge-connection-organization-additional"></a>

**Regel des Produzenten**

Im Quellkonto wird ein EventBridge Event-Bus erstellt, der Nachrichten von Produzenten akzeptiert (wie im Abschnitt *Architektur* gezeigt). Für diesen Eventbus wird eine Regel mit zugehörigen IAM-Berechtigungen erstellt. Die Regeln zielen auf den EventBridge Event-Bus im Zielkonto ab und basieren auf der folgenden `cdk.json` Struktur:

```
"rules": [
  {
    "id": "CrossAccount",
    "sources": ["Producer"],
    "detail_types": ["TestType"],
    "targets": [
      {
        "id": "ConsumerEventBus",
        "arn": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount"
      }
    ]
  }
]
```

Für jeden konsumierenden Event-Bus müssen das Ereignismuster und der Ziel-Event-Bus angegeben werden.

*Ereignismuster*

Mit [Ereignismustern](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) wird gefiltert, für welche Ereignisse diese Regel gilt. Für dieses Beispiel geben die Ereignisquellen und der Datensatz an, `detail_types` welche Ereignisse vom Ereignisbus des Quellkontos an den Ereignisbus des Zielkontos übertragen werden sollen.

*Ziel-Event-Bus*

Diese Regel zielt auf einen Eventbus ab, der in einem anderen Konto vorhanden ist. Der vollständige Name `arn` (Amazon-Ressourcenname) wird benötigt, um den Ziel-Event-Bus eindeutig zu identifizieren, und das `id` ist die [logische ID](https://docs.aws.amazon.com/cdk/v2/guide/identifiers.html#identifiers_logical_ids), die von verwendet wird AWS CloudFormation. Der Ziel-Event-Bus muss zum Zeitpunkt der Erstellung der Zielregel noch nicht vorhanden sein.

**Spezifische Überlegungen zum Zielkonto**

Im Zielkonto wird ein EventBridge Ereignisbus erstellt, um Nachrichten vom Ereignisbus des Quellkontos zu empfangen. Damit Ereignisse vom Quellkonto aus veröffentlicht werden können, müssen Sie eine [ressourcenbasierte](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html) Richtlinie erstellen:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
    "Sid": "AllowOrgToPutEvents",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "events:PutEvents",
    "Resource": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount",
    "Condition": {
      "StringEquals": {
        "aws:PrincipalOrgID": "o-XXXXXXXXX"
      }
    }
  }]
}
```

Es ist besonders wichtig, die `events:PutEvents` Erlaubnis zu erteilen, die es jedem anderen Konto in derselben Organisation ermöglicht, Ereignisse in diesem Event-Bus zu veröffentlichen. Wenn Sie `aws:PrincipalOrgId` die Organisations-ID angeben, werden die erforderlichen Berechtigungen gewährt.

**Muster des Ereignisses**

Sie können das enthaltene Ereignismuster an Ihren Anwendungsfall anpassen:

```
rule = events.Rule(
    self,
    self.id + 'Rule' + rule_definition['id'],
    event_bus=event_bus,
    event_pattern=events.EventPattern(
        source=rule_definition['sources'],
        detail_type=rule_definition['detail_types'],
    )
)
```

Um unnötige Verarbeitung zu vermeiden, sollte im Ereignismuster festgelegt werden, dass nur Ereignisse, die vom Zielkonto verarbeitet werden sollen, an den Ereignisbus des Zielkontos übertragen werden.

*Ressourcenbasierte Richtlinie*

In diesem Beispiel wird anhand der Organisations-ID gesteuert, welche Konten Ereignisse auf den Event-Bus des Zielkontos übertragen dürfen. Erwägen Sie, eine restriktivere Richtlinie zu verwenden, z. B. die Angabe des Quellkontos.

*EventBridge Kontingente*

Beachten Sie die folgenden [Kontingente](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html):
+ 300 Regeln pro Event-Bus sind das Standardkontingent. Dies kann bei Bedarf erweitert werden, sollte aber für die meisten Anwendungsfälle geeignet sein.
+ Fünf Ziele pro Regel sind das zulässige Maximum. Wir empfehlen Anwendungsarchitekten, für jedes Zielkonto eine eigene Regel zu verwenden, um eine genaue Steuerung des Ereignismusters zu ermöglichen.

# Stellen Sie DynamoDB-Datensätze mithilfe von Kinesis Data Streams und Firehose an Amazon S3 bereit mit AWS CDK
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk"></a>

*Shashank Shrivastava und Daniel Matuki da Cunha, Amazon Web Services*

## Zusammenfassung
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-summary"></a>

Dieses Muster enthält Beispielcode und eine Anwendung für die Übermittlung von Datensätzen von Amazon DynamoDB an Amazon Simple Storage Service (Amazon S3) mithilfe von Amazon Kinesis Data Streams und Amazon Data Firehose. Der Ansatz des Musters verwendet [AWS Cloud Development Kit (AWS CDK) L3-Konstrukte](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) und beinhaltet ein Beispiel dafür, wie eine Datentransformation durchgeführt wird, AWS Lambda bevor Daten an den Ziel-S3-Bucket in der Amazon Web Services (AWS) Cloud geliefert werden.

Kinesis Data Streams zeichnet Änderungen auf Elementebene in DynamoDB-Tabellen auf und repliziert sie in den erforderlichen Kinesis-Datenstrom. Ihre Anwendungen können auf den Kinesis Data Stream zugreifen und die Änderungen auf Elementebene nahezu in Echtzeit anzeigen. Kinesis Data Streams bietet auch Zugriff auf andere Amazon Kinesis Kinesis-Services wie Firehose und Amazon Managed Service für Apache Flink. Das bedeutet, dass Sie Anwendungen entwickeln können, die Echtzeit-Dashboards bereitstellen, Warnmeldungen generieren, dynamische Preisgestaltung und Werbung implementieren und anspruchsvolle Datenanalysen durchführen.

Sie können dieses Muster für Ihre Anwendungsfälle zur Datenintegration verwenden. Beispielsweise können Transportfahrzeuge oder Industrieanlagen große Datenmengen an eine DynamoDB-Tabelle senden. Diese Daten können dann transformiert und in einem in Amazon S3 gehosteten Data Lake gespeichert werden. Anschließend können Sie die Daten abfragen und verarbeiten und potenzielle Fehler vorhersagen, indem Sie serverlose Dienste wie Amazon Athena, Amazon Redshift Spectrum, Amazon Rekognition und verwenden. AWS Glue

## Voraussetzungen und Einschränkungen
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-prereqs"></a>

*Voraussetzungen*
+ Ein aktiver. AWS-Konto
+ AWS Command Line Interface (AWS CLI), installiert und konfiguriert. Weitere Informationen finden Sie AWS CLI in [der AWS CLI Dokumentation unter Erste Schritte mit](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) dem.
+ Node.js (18.x\$1) und npm, installiert und konfiguriert. Weitere Informationen finden Sie in der Dokumentation unter [Node.js und npm herunterladen und installieren](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm). `npm`
+ aws-cdk (2.x\$1), installiert und konfiguriert. Weitere Informationen finden Sie in der Dokumentation unter [Erste Schritte mit dem](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). AWS CDK AWS CDK 
+ Das GitHub [aws-dynamodb-kinesisfirehose-s3-Ingestion-Repository](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/), geklont und auf Ihrem lokalen Computer konfiguriert.
+ Bestehende Beispieldaten für die DynamoDB-Tabelle. Die Daten müssen das folgende Format haben: `{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}`

## Architektur
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-architecture"></a>

Das folgende Diagramm zeigt einen Beispiel-Workflow für die Übermittlung von Datensätzen von DynamoDB an Amazon S3 mithilfe von Kinesis Data Streams und Firehose.

![\[Ein Beispiel-Workflow für die Übermittlung von Datensätzen von DynamoDB an Amazon S3 mithilfe von Kinesis Data Streams und Firehose.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/e2a9c412-312e-4900-9774-19a281c578e4/images/6e6df998-e6c2-4eaf-b263-ace752194689.png)


Das Diagramm zeigt den folgenden Workflow:

1. Daten werden mit Amazon API Gateway als Proxy für DynamoDB aufgenommen. Sie können auch jede andere Quelle verwenden, um Daten in DynamoDB aufzunehmen. 

1. Änderungen auf Artikelebene werden nahezu in Echtzeit in Kinesis Data Streams generiert und an Amazon S3 übermittelt.

1. Kinesis Data Streams sendet die Datensätze zur Transformation und Bereitstellung an Firehose. 

1. Eine Lambda-Funktion konvertiert die Datensätze von einem DynamoDB-Datensatzformat in das JSON-Format, das nur die Namen und Werte der Datensatzelementattribute enthält.

## Tools
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-tools"></a>

*AWS-Services*
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)ist ein Softwareentwicklungs-Framework, das Sie bei der Definition und Bereitstellung der AWS-Cloud-Infrastruktur im Code unterstützt.
+ [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) ist ein Cloud-Entwicklungskit für die Befehlszeile, mit dem Sie mit Ihrer AWS CDK App interagieren können.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie AWS-Services über Befehle in Ihrer Befehlszeilen-Shell interagieren können.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)hilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus über und zu verwalten. AWS-Konten AWS-Regionen

*Code-Repository*

Der Code für dieses Muster ist im GitHub [aws-dynamodb-kinesisfirehose-s3-Ingestion-Repository verfügbar.](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/)

## Epen
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-epics"></a>

### Richten Sie den Beispielcode ein und konfigurieren Sie ihn
<a name="set-up-and-configure-the-sample-code"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Installieren Sie die Abhängigkeiten. | Installieren Sie auf Ihrem lokalen Computer die Abhängigkeiten aus den `package.json` Dateien in den `sample-application` Verzeichnissen `pattern/aws-dynamodb-kinesisstreams-s3` und, indem Sie die folgenden Befehle ausführen:<pre>cd <project_root>/pattern/aws-dynamodb-kinesisstreams-s3 </pre><pre>npm install && npm run build</pre><pre>cd <project_root>/sample-application/</pre><pre>npm install && npm run build</pre>  | App-Entwickler, General AWS | 
| Generieren Sie die CloudFormation Vorlage. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | App-Entwickler, General AWS, AWS DevOps | 

### Stellen Sie die Ressourcen bereit
<a name="deploy-the-resources"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Überprüfen und implementieren Sie die Ressourcen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | App-Entwickler, General AWS, AWS DevOps | 

### Daten in die DynamoDB-Tabelle aufnehmen, um die Lösung zu testen
<a name="ingest-data-into-the-dynamodb-table-to-test-the-solution"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Nehmen Sie Ihre Beispieldaten in die DynamoDB-Tabelle auf. | Senden Sie eine Anfrage an Ihre DynamoDB-Tabelle, indem Sie den folgenden Befehl in ausführen: AWS CLI`aws dynamodb put-item --table-name <your_table_name> --item '{"<table_partition_key>": {"S": "<partition_key_ID>"},"MessageData":{"S": "<data>"}}'`Beispiel:`aws dynamodb put-item --table-name SourceData_table --item '{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}'`Standardmäßig `put-item` gibt der keinen Wert als Ausgabe zurück, wenn der Vorgang erfolgreich ist. Wenn der Vorgang fehlschlägt, wird ein Fehler zurückgegeben. Die Daten werden in DynamoDB gespeichert und dann an Kinesis Data Streams und Firehose gesendet. Sie verwenden unterschiedliche Methoden, um Daten zu einer DynamoDB-Tabelle hinzuzufügen. Weitere Informationen finden Sie unter [Daten in Tabellen laden in](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.LoadData.html) der DynamoDB-Dokumentation. | App-Developer | 
| Stellen Sie sicher, dass ein neues Objekt im S3-Bucket erstellt wurde. | Melden Sie sich beim S3-Bucket an AWS-Managementkonsole und überwachen Sie den S3-Bucket, um sicherzustellen, dass mit den von Ihnen gesendeten Daten ein neues Objekt erstellt wurde. Weitere Informationen finden Sie [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)in der Amazon S3 S3-Dokumentation. | App-Entwickler, General AWS | 

### Bereinigen von Ressourcen
<a name="clean-up-resources"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bereinigen Sie die Ressourcen.  | Führen Sie den `cdk destroy` Befehl aus, um alle von diesem Muster verwendeten Ressourcen zu löschen. | App-Entwickler, General AWS | 

## Zugehörige Ressourcen
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-resources"></a>
+ [static-site-stacks3-.ts](https://github.com/awslabs/aws-solutions-constructs/blob/main/source/use_cases/aws-s3-static-website/lib/s3-static-site-stack.ts#L25) (GitHub Repository)
+ [aws-apigateway-dynamodb Modul](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-apigateway-dynamodb) (GitHub Repositorium)
+ [aws-kinesisstreams-kinesisfirehose-s3-Modul](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-kinesisstreams-kinesisfirehose-s3) (GitHub Repositorium)
+ [Erfassung von Änderungsdaten für DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html) (DynamoDB-Dokumentation)
+ [Verwenden von Kinesis Data Streams zur Erfassung von Änderungen an DynamoDB (DynamoDB-Dokumentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html))

# Implementieren Sie die pfadbasierte API-Versionierung mithilfe benutzerdefinierter Domains in Amazon API Gateway
<a name="implement-path-based-api-versioning-by-using-custom-domains"></a>

*Corey Schnedl, Marcelo Barbosa, Mario Lopez Martinez, Anbazhagan Ponnuswamy, Gaurav Samudra und Abhilash Vinod, Amazon Web Services*

## Zusammenfassung
<a name="implement-path-based-api-versioning-by-using-custom-domains-summary"></a>

Dieses Muster zeigt, wie Sie die [API-Zuordnungsfunktion](https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-mappings.html) von [benutzerdefinierten Domains](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) verwenden können, um eine pfadbasierte API-Versionierungslösung für Amazon API Gateway zu implementieren.

Amazon API Gateway ist ein vollständig verwalteter Service, mit dem Sie in jeder Größenordnung etwas erstellen, veröffentlichen, verwalten, überwachen und sichern APIs können. Mithilfe der Funktion für benutzerdefinierte Domains des Services können Sie benutzerdefinierte Domainnamen erstellen, die einfacher und intuitiver URLs sind und Ihren API-Benutzern zur Verfügung stellen können. Sie können API-Zuordnungen verwenden, um API-Stufen mit einem benutzerdefinierten Domainnamen zu verbinden. Nachdem Sie einen Domainnamen erstellt und DNS-Einträge konfiguriert haben, verwenden Sie API-Zuordnungen, um Traffic APIs über Ihren benutzerdefinierten Domainnamen an Sie zu senden.

Sobald eine API öffentlich verfügbar ist, wird sie von Verbrauchern verwendet. Mit der Weiterentwicklung einer öffentlichen API wird auch ihr Servicevertrag weiterentwickelt, um neuen Funktionen und Fähigkeiten Rechnung zu tragen. Es ist jedoch unklug, bestehende Funktionen zu ändern oder zu entfernen. Alle grundlegenden Änderungen können sich auf die Anwendungen des Verbrauchers auswirken und diese zur Laufzeit beschädigen. Die API-Versionierung ist wichtig, um zu verhindern, dass die Abwärtskompatibilität beeinträchtigt wird und ein Vertrag verletzt wird.

Sie benötigen eine klare Strategie für die API-Versionierung, um den Verbrauchern zu helfen, sie zu übernehmen. Die pfadbasierte Versionierung APIs URLs ist der einfachste und am häufigsten verwendete Ansatz. Bei dieser Art der Versionierung werden Versionen explizit als Teil der API definiert. URIs Das folgende Beispiel URLs zeigt, wie ein Verbraucher den URI verwenden kann, um eine API-Version für seine Anfrage anzugeben:

`https://api.example.com/api/v1/orders `

`https://api.example.com/api/v2/orders `

`https://api.example.com/api/vX/orders`

Dieses Muster verwendet die, AWS Cloud Development Kit (AWS CDK) um eine Beispielimplementierung einer skalierbaren pfadbasierten Versionierungslösung für Ihre API zu erstellen, bereitzustellen und zu testen. AWS CDK ist ein Open-Source-Framework für die Softwareentwicklung, mit dem Sie Ihre Cloud-Anwendungsressourcen mithilfe vertrauter Programmiersprachen modellieren und bereitstellen können.

## Voraussetzungen und Einschränkungen
<a name="implement-path-based-api-versioning-by-using-custom-domains-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto.
+ Der Besitz einer Domain ist erforderlich, um das Beispiel-Repository dieses Musters und die benutzerdefinierte Domain-Funktionalität von Amazon API Gateway verwenden zu können. Sie können Amazon Route 53 verwenden, um Ihre Domains für Ihre Organisation zu erstellen und zu verwalten. Informationen zur Registrierung oder Übertragung einer Domain bei Route 53 finden Sie unter [Neue Domains registrieren](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register-update.html) in der Route 53-Dokumentation.
+ Bevor Sie einen benutzerdefinierten Domainnamen für eine API einrichten können, müssen Sie über ein [SSL/TLS-Zertifikat](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-specify-certificate-for-custom-domain-name.html) verfügen. AWS Certificate Manager
+ Sie müssen den Ressourceneintrag Ihres DNS-Anbieters erstellen oder aktualisieren, bevor Sie ihn dem API-Endpunkt zuweisen können. Ohne eine solche Zuordnung können API-Anfragen, die für den benutzerdefinierten Domainnamen gebunden sind, API Gateway nicht erreichen.

**Einschränkungen**
+ Ein benutzerdefinierter Domainname muss innerhalb eines Bereichs AWS-Region eindeutig sein AWS-Konten.
+ Sie müssen einen regionalen benutzerdefinierten Domainnamen verwenden und die Sicherheitsrichtlinie TLS 1.2 anwenden, um API-Zuweisungen mit mehreren Ebenen zu konfigurieren.
+ Bei einer API-Zuordnung APIs müssen der benutzerdefinierte Domainname und der zugeordnete Domainname identisch AWS-Konto sein.
+ API-Zuordnungen dürfen nur Buchstaben, Zahlen und die folgenden Zeichen enthalten: `$-_.+!*'()/`
+ Die maximale Länge für den Pfad in einer API-Zuweisung beträgt 300 Zeichen.
+ Es können 200 API-Zuweisungen mit mehreren Ebenen für jeden Domainnamen vorhanden sein.
+ Mit der Sicherheitsrichtlinie TLS 1.2 können Sie HTTP APIs nur einem regionalen benutzerdefinierten Domainnamen zuordnen.
+ Sie können nicht demselben benutzerdefinierten Domainnamen wie eine HTTP-API oder REST-API zuordnen. WebSocket APIs 
+ Einige AWS-Services sind nicht in allen verfügbar AWS-Regionen. Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie unter [AWS Dienste nach Regionen](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Informationen zu bestimmten Endpunkten finden Sie unter [Dienstendpunkte und Kontingente](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html). Wählen Sie dort den Link für den Dienst aus.

**Produktversionen**
+ Diese Beispielimplementierung verwendet [AWS CDK in TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) Version 2.149.0.

## Architektur
<a name="implement-path-based-api-versioning-by-using-custom-domains-architecture"></a>

Das folgende Diagramm zeigt den Architektur-Workflow.

![\[Workflow mit API-Zuordnungen und benutzerdefinierten Domänen zur Implementierung einer pfadbasierten API-Versionierungslösung.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/e1b32d2b-410f-4ace-967e-f0b8aaf0304c/images/fa9f04f1-efa6-4fb1-a541-ae3da4076b00.png)


Das Diagramm veranschaulicht folgende Vorgänge:

1. Der API-Benutzer sendet eine Anfrage mit einem benutzerdefinierten Domainnamen an Amazon API Gateway.

1. API Gateway leitet die Anfrage des Benutzers dynamisch an eine entsprechende Instanz und Phase von API Gateway weiter, basierend auf dem in der URL der Anfrage angegebenen Pfad. Die folgende Tabelle zeigt ein Beispiel dafür, wie die verschiedenen URL-basierten Pfade an bestimmte Stufen für verschiedene Instanzen von API Gateway weitergeleitet werden können.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/implement-path-based-api-versioning-by-using-custom-domains.html)

1. Die API-Gateway-Zielinstanz verarbeitet die Anfrage und gibt das Ergebnis an den Benutzer zurück.

**Automatisierung und Skalierung**

Wir empfehlen, dass Sie für jede Version Ihrer API separate AWS CloudFormation Stacks verwenden. Mit diesem Ansatz können Sie eine vollständige Isolierung zwischen den Backends erreichen, zu APIs denen die benutzerdefinierte Domain-API-Zuordnungsfunktion weitergeleitet werden kann. Ein Vorteil dieses Ansatzes besteht darin, dass verschiedene Versionen Ihrer API unabhängig voneinander bereitgestellt oder entfernt werden können, ohne dass das Risiko besteht, dass eine andere API geändert wird. Dieser Ansatz erhöht die Widerstandsfähigkeit durch die Isolierung von CloudFormation Stacks. Außerdem bietet es Ihnen verschiedene Back-End-Optionen für Ihre API wie AWS Lambda, AWS Fargate, HTTP-Endpunkte und Aktionen von. AWS-Services

Du kannst Git-Branching-Strategien wie [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/gitflow-branching-strategy.html) in Kombination mit isolierten CloudFormation Stacks verwenden, um den Quellcode zu verwalten, der in verschiedenen Versionen der API bereitgestellt wird. Mit dieser Option können Sie verschiedene Versionen Ihrer API verwalten, ohne den Quellcode für neue Versionen duplizieren zu müssen. Mit Gitflow kannst du Tags zu Commits in deinem Git-Repository hinzufügen, wenn Releases veröffentlicht werden. Als Ergebnis hast du einen vollständigen Überblick über den Quellcode, der sich auf eine bestimmte Version bezieht. Wenn Aktualisierungen durchgeführt werden müssen, können Sie den Code aus einer bestimmten Version auschecken, Aktualisierungen vornehmen und dann den aktualisierten Quellcode auf dem CloudFormation Stack bereitstellen, der der entsprechenden Hauptversion entspricht. Dieser Ansatz reduziert das Risiko, dass eine andere API-Version beschädigt wird, da jede Version der API über isolierten Quellcode verfügt und in separaten CloudFormation Stacks bereitgestellt wird.

## Tools
<a name="implement-path-based-api-versioning-by-using-custom-domains-tools"></a>

**AWS-Services**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) unterstützt Sie bei der Erstellung, Veröffentlichung, Wartung, Überwachung und Sicherung von REST, HTTP und WebSocket APIs in jeder Größenordnung.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) unterstützt Sie bei der Erstellung, Speicherung und Erneuerung öffentlicher und privater SSL/TLS X.509-Zertifikate und -Schlüssel, die Ihre AWS Websites und Anwendungen schützen.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)ist ein Open-Source-Framework für die Softwareentwicklung, mit dem Sie Ihre Cloud-Infrastruktur im Code definieren und bereitstellen können. CloudFormation[Die Beispielimplementierung dieses Musters verwendet das in AWS CDK . TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) Bei der Arbeit mit dem AWS CDK In werden vertraute Tools TypeScript verwendet, darunter der TypeScript Microsoft-Compiler (`tsc`), [Node.js](https://nodejs.org/) und der Node-Paketmanager (`npm`). Wenn Sie möchten, können Sie [Yarn](https://yarnpkg.com/) verwenden, obwohl die Beispiele in diesem Muster dies tun. `npm` Die Module, aus denen die [AWS Construct-Bibliothek](https://docs.aws.amazon.com/cdk/v2/guide/libraries.html#libraries-construct) besteht, werden über das `npm ` Repository [npmjs.org](https://docs.npmjs.com/) verteilt.
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)hilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus über und zu verwalten. AWS-Konten AWS-Regionen
+ [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 Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) ist ein hochverfügbarer und skalierbarer DNS-Web-Service.
+ [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html)ist eine Firewall für Webanwendungen, mit der Sie HTTP- und HTTPS-Anfragen überwachen können, die an Ihre geschützten Webanwendungsressourcen weitergeleitet werden.

**Andere Tools**
+ [Bruno](https://www.usebruno.com/) ist ein Git-freundlicher Open-Source-API-Testclient.
+ [cdk-nag](https://github.com/cdklabs/cdk-nag) ist ein Open-Source-Hilfsprogramm, das AWS CDK Anwendungen mithilfe von Regelpaketen auf bewährte Verfahren überprüft.

**Code-Repository**

Der Code für dieses Muster ist im Repository GitHub [path-based-versioning-with-api-gateway](https://github.com/aws-samples/path-based-versioning-with-api-gateway) verfügbar.

## Best Practices
<a name="implement-path-based-api-versioning-by-using-custom-domains-best-practices"></a>
+ Verwenden Sie eine robuste CI/CD-Pipeline (Continuous Integration and Continuous Delivery), um das Testen und Bereitstellen Ihrer CloudFormation Stacks zu automatisieren, die mit dem erstellt wurden. AWS CDK Weitere Informationen zu dieser Empfehlung finden Sie in den [AWS Well-Architected Guidance DevOps ](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html).
+ AWS WAF ist eine verwaltete Firewall, die sich problemlos in Dienste wie Amazon API Gateway integrieren lässt. Es AWS WAF ist zwar keine notwendige Komponente, damit dieses Versionierungsmuster funktioniert, wir empfehlen jedoch aus Sicherheitsgründen, es in API Gateway AWS WAF zu integrieren.
+ Ermutigen Sie API-Nutzer, regelmäßig auf die neueste Version Ihrer API zu aktualisieren, damit ältere Versionen Ihrer API als veraltet gelten und effizient entfernt werden können.
+ Bevor Sie diesen Ansatz in einer Produktionsumgebung verwenden, implementieren Sie eine Firewall- und Autorisierungsstrategie für Ihre API.
+ Implementieren Sie den Zugriff auf die Verwaltung Ihrer AWS Ressourcen, AWS-Konto indem Sie das [Zugriffsmodell mit den geringsten Rechten](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) verwenden.
+ [Um bewährte Verfahren und Sicherheitsempfehlungen für Anwendungen durchzusetzen AWS CDK, die mit dem erstellt wurden, empfehlen wir die Verwendung des Dienstprogramms cdk-nag.](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/check-aws-cdk-applications-or-cloudformation-templates-for-best-practices-by-using-cdk-nag-rule-packs.html) 

## Epen
<a name="implement-path-based-api-versioning-by-using-custom-domains-epics"></a>

### Bereite deine lokale Umgebung vor
<a name="prepare-your-local-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Repository | Führen Sie den folgenden Befehl aus, um das Beispielanwendungs-Repository zu klonen:<pre>git clone https://github.com/aws-samples/path-based-versioning-with-api-gateway</pre> | App-Developer | 
| Navigieren Sie zum geklonten Repository. | Führen Sie den folgenden Befehl aus, um zum Speicherort des geklonten Repository-Ordners zu navigieren: <pre>cd api-gateway-custom-domain-versioning</pre> | App-Developer | 
| Installieren Sie die erforderlichen Abhängigkeiten. | Führen Sie den folgenden Befehl aus, um die erforderlichen Abhängigkeiten zu installieren:<pre>npm install </pre> | App-Developer | 

### Stellen Sie den CloudFormation Routing-Stack bereit
<a name="deploy-the-cfnshort-routing-stack"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Initiieren Sie die Bereitstellung des Routing-Stacks. | Um die Bereitstellung des CloudFormation Routing-Stacks zu initiieren`CustomDomainRouterStack`, führen Sie den folgenden Befehl aus und `example.com` ersetzen Sie ihn durch den Namen der Domain, der Sie gehören:<pre>npx cdk deploy CustomDomainRouterStack --parameters PrerequisiteDomainName=example.com</pre>Die Stack-Bereitstellung ist erst erfolgreich, wenn die folgende Domain-DNS-Validierungsaufgabe erfolgreich ausgeführt wurde. | App-Developer | 

### Überprüfen des Domäneneigentümers
<a name="verify-domain-ownership"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bestätigen Sie die Inhaberschaft Ihrer Domain. | Das Zertifikat verbleibt im Status **Ausstehende Validierung**, bis Sie nachweisen, dass Sie Eigentümer der zugehörigen Domain sind. Um die Inhaberschaft nachzuweisen, fügen Sie CNAME-Einträge zur Hosting-Zone hinzu, die der Domain zugeordnet ist. Weitere Informationen finden Sie in der AWS Certificate Manager Dokumentation unter [DNS-Validierung](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html). Durch das Hinzufügen der entsprechenden Datensätze kann die `CustomDomainRouterStack` Bereitstellung erfolgreich abgeschlossen werden. | App-Entwickler, AWS-Systemadministrator, Netzwerkadministrator | 
| Erstellen Sie einen Aliaseintrag, der auf Ihre benutzerdefinierte API Gateway Gateway-Domain verweist. | Nachdem das Zertifikat erfolgreich ausgestellt und validiert wurde, [erstellen Sie einen DNS-Eintrag](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-create.html#apigateway-regional-api-custom-domain-dns-record), der auf Ihre benutzerdefinierte Amazon API Gateway Gateway-Domain-URL verweist. Die benutzerdefinierte Domain-URL wird durch die Bereitstellung der benutzerdefinierten Domain eindeutig generiert und als CloudFormation Ausgabeparameter angegeben. Es folgt ein [Beispiel für den Datensatz](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-basic.html): **Routing-Richtlinie**: Einfaches Routing**Name des Datensatzes**: `demo.api-gateway-custom-domain-versioning.example.com`**Alias**: Ja**Eintragstyp**: Ein DNS-Eintrag vom Typ „A“, der auf eine AWS Ressource verweist**Value (Wert)**: `d-xxxxxxxxxx.execute-api.xx-xxxx-x.amazonaws.com`**TTL (Sekunden)**: 300 | App-Entwickler, AWS-Systemadministrator, Netzwerkadministrator | 

### Stellen Sie CloudFormation Stacks bereit und rufen Sie die API auf
<a name="deploy-cfnshort-stacks-and-invoke-the-api"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie den `ApiStackV1` Stack bereit. | Verwenden Sie den folgenden Befehl, um den `ApiStackV1` Stack bereitzustellen:<pre>npm run deploy-v1</pre>Der folgende CDK-Code fügt die API-Zuordnung hinzu:<pre>var apiMapping = new CfnApiMapping(this, "ApiMapping", {<br />      apiId: this.lambdaRestApi.restApiId,<br />      domainName: props.customDomainName.domainName,<br />      stage: "api",<br />      apiMappingKey: "api/v1",<br />    });</pre> | App-Developer | 
| Stellen Sie den `ApiStackV2` Stack bereit. | Verwenden Sie den folgenden Befehl, um den `ApiStackV2` Stack bereitzustellen:<pre>npm run deploy-v2</pre> | App-Developer | 
| Rufen Sie die API auf. | [Informationen zum Aufrufen der API und zum Testen der API-Endpunkte mithilfe von Bruno finden Sie in den Anweisungen unter Zusätzliche Informationen.](#implement-path-based-api-versioning-by-using-custom-domains-additional) | App-Developer | 

### Bereinigen von Ressourcen
<a name="clean-up-resources"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bereinigen Sie die Ressourcen. | Verwenden Sie den folgenden Befehl, um die mit dieser Beispielanwendung verknüpften Ressourcen zu löschen:<pre>npx cdk destroy --all</pre>Stellen Sie sicher, dass Sie alle Route 53-DNS-Einträge bereinigen, die manuell für die Überprüfung des Domainbesitzes hinzugefügt wurden. | App-Developer | 

## Fehlerbehebung
<a name="implement-path-based-api-versioning-by-using-custom-domains-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Bei der Bereitstellung von `CustomDomainRouterStack` Zeitüberschreitungen tritt ein Timeout auf, da das Zertifikat nicht validiert werden kann. | Stellen Sie sicher, dass Sie die richtigen CNAME-Einträge für die DNS-Validierung hinzugefügt haben, wie in der vorherigen Aufgabe beschrieben. Ihr neues Zertifikat zeigt nach dem Hinzufügen der **DNS-Validierungseinträge möglicherweise noch bis zu 30 Minuten den Status Ausstehende** Validierung an. Weitere Informationen finden Sie in der AWS Certificate Manager Dokumentation unter [DNS-Validierung](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html). | 

## Zugehörige Ressourcen
<a name="implement-path-based-api-versioning-by-using-custom-domains-resources"></a>
+ [Implementierung der Header-basierten API-Gateway-Versionierung mit Amazon CloudFront](https://aws.amazon.com/blogs/compute/implementing-header-based-api-gateway-versioning-with-amazon-cloudfront/) — Dieser AWS Compute-Blogbeitrag bietet eine Header-basierte Versionierungsstrategie als Alternative zu der in diesem Muster beschriebenen pfadbasierten Versionierungsstrategie.
+ [AWS CDK Workshop](https://cdkworkshop.com/20-typescript.html) — Dieser Einführungsworkshop konzentriert sich auf das Erstellen und Bereitstellen von Anwendungen mithilfe von. AWS AWS Cloud Development Kit (AWS CDK) Dieser Workshop unterstützt Go, Python und TypeScript. 

## Zusätzliche Informationen
<a name="implement-path-based-api-versioning-by-using-custom-domains-additional"></a>

**Testen Sie Ihre API mit Bruno**

Wir empfehlen Ihnen, [Bruno](https://www.usebruno.com/), ein Open-Source-API-Testtool, zu verwenden, um zu überprüfen, ob das pfadbasierte Routing für die Beispielanwendung ordnungsgemäß funktioniert. Dieses Muster bietet eine Beispielsammlung, um das Testen Ihrer Beispiel-API zu erleichtern.

Gehen Sie wie folgt vor, um Ihre API aufzurufen und zu testen:

1. [Installiere Bruno.](https://www.usebruno.com/downloads)

1. Öffne Bruno.

1. Wählen Sie im [Code-Repository](https://github.com/aws-samples/path-based-versioning-with-api-gateway) dieses Musters **Bruno/Sample-API- Gateway-Custom-Domain-Versioning ** aus und öffnen Sie die Sammlung.

1. Um das Drop-down-Menü **Umgebungen** oben rechts auf der Benutzeroberfläche (UI) zu sehen, wählen Sie eine beliebige Anfrage in der Sammlung aus.

1. **Wählen Sie im Drop-down-Menü **Umgebungen** die Option Konfigurieren aus.**

1. Ersetzen Sie den `REPLACE_ME_WITH_YOUR_DOMAIN` Wert durch Ihre benutzerdefinierte Domain.

1. Wählen Sie **Speichern** und schließen Sie dann den Abschnitt **Konfiguration**.

1. ****Vergewissern Sie sich, dass für **Sandbox Environment** die Option **Aktiv** ausgewählt ist.

1. Rufen Sie Ihre API auf, indem Sie die Schaltfläche **->** für die ausgewählte Anfrage verwenden.

1. Beachten Sie, wie die Validierung (Weitergabe von Werten, die keine Zahlen sind) in V1 im Vergleich zu V2 gehandhabt wird.

Screenshots eines Beispiel-API-Aufrufs und eines Vergleichs der V1- und V2-Validierung finden Sie unter **Testen Ihrer Beispiel-API** in der `README.md` Datei im [Code-Repository](https://github.com/aws-samples/path-based-versioning-with-api-gateway) dieses Musters.

# Importieren Sie die psycopg2-Bibliothek, AWS Lambda um mit Ihrer PostgreSQL-Datenbank zu interagieren
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

## Zusammenfassung
<a name="import-psycopg2-library-lambda-summary"></a>

[Psycopg](https://www.psycopg.org/docs/) ist ein PostgresSQL-Datenbankadapter für Python. Entwickler verwenden die `psycopg2` Bibliothek, um Python-Anwendungen zu schreiben, die mit PostgreSQL-Datenbanken interagieren.

Auf Amazon Web Services (AWS) verwenden Entwickler auch, [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)um Code für Anwendungen oder Backend-Services auszuführen. Lambda ist ein serverloser, ereignisgesteuerter Rechendienst, der Code ausführt, ohne dass Server bereitgestellt oder verwaltet werden müssen.

Wenn Sie eine neue Funktion erstellen, die eine von Lambda [unterstützte Python-Laufzeit verwendet, wird die Lambda-Laufzeitumgebung](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) standardmäßig aus einem [Basis-Image für Lambda](https://github.com/aws/aws-lambda-base-images) erstellt, das von bereitgestellt wird. AWS Bibliotheken wie `pandas` oder `psycopg2` sind nicht im Basis-Image enthalten. Um eine Bibliothek zu verwenden, müssen Sie sie in einem benutzerdefinierten Paket bündeln und an Lambda anhängen.

Es gibt mehrere Möglichkeiten, eine Bibliothek zu bündeln und anzuhängen, darunter die folgenden:
+ Stellen Sie Ihre Lambda-Funktion aus einem [ZIP-Dateiarchiv](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html) bereit.
+ Stellen Sie Ihre Lambda-Funktion von einem benutzerdefinierten Container-Image aus bereit.
+ Erstellen Sie eine [Lambda-Schicht](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions) und fügen Sie sie Ihrer Lambda-Funktion hinzu.

Dieses Muster demonstriert die ersten beiden Optionen.

Mit einem ZIP-Bereitstellungspaket ist das Hinzufügen der `pandas` Bibliothek zu Ihrer Lambda-Funktion relativ einfach. Erstellen Sie einen Ordner auf Ihrem Linux-Computer, fügen Sie das Lambda-Skript zusammen mit der `pandas` Bibliothek und den Abhängigkeiten der Bibliothek zum Ordner hinzu, komprimieren Sie den Ordner und stellen Sie ihn als Quelle für Ihre Lambda-Funktion bereit.

Obwohl die Verwendung eines ZIP-Bereitstellungspakets eine gängige Praxis ist, funktioniert dieser Ansatz für die Bibliothek nicht. `psycopg2` Dieses Muster zeigt zunächst den Fehler, den Sie erhalten, wenn Sie ein ZIP-Bereitstellungspaket verwenden, um die `psycopg2` Bibliothek zu Ihrer Lambda-Funktion hinzuzufügen. Das Muster zeigt dann, wie Lambda aus einem Dockerfile bereitgestellt und das Lambda-Image bearbeitet wird, damit die Bibliothek funktioniert. `psycopg2`

[Informationen zu den drei Ressourcen, die das Muster bereitstellt, finden Sie im Abschnitt Zusätzliche Informationen.](#import-psycopg2-library-lambda-additional)

## Voraussetzungen und Einschränkungen
<a name="import-psycopg2-library-lambda-prereqs"></a>

**Voraussetzungen**
+ Ein Aktiv AWS-Konto mit ausreichenden Berechtigungen, um die von diesem Muster verwendeten AWS Ressourcen bereitzustellen
+ AWS Cloud Development Kit (AWS CDK) wird global installiert, indem Folgendes ausgeführt wird `npm install -g aws-cdk`
+ Ein Git-Client
+ Python
+ Docker

**Einschränkungen**
+ Einige AWS-Services sind nicht in allen verfügbar AWS-Regionen. Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie [AWS-Services unter Nach Regionen](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Informationen zu bestimmten Endpunkten finden Sie auf der Seite [Dienstendpunkte und Kontingente](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html). Wählen Sie dort den Link für den Dienst aus.

**Produktversionen**
+ Python-Laufzeitversion, die [von Lambda unterstützt wird](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Psycopg2 Version 2.9.3
+ Pandas versie 1.5.2

## Architektur
<a name="import-psycopg2-library-lambda-architecture"></a>

**Überblick über die Lösung**

Um die Herausforderungen zu veranschaulichen, denen Sie bei der Verwendung der `psycopg2` Bibliothek in Lambda begegnen könnten, stellt das Muster zwei Lambda-Funktionen bereit:
+ Eine Lambda-Funktion mit der Python-Runtime, die aus einer ZIP-Datei erstellt wurde. [Die `pandas` Bibliotheken `psycopg2` und werden in diesem .zip-Bereitstellungspaket mithilfe von pip installiert.](https://pypi.org/project/pip/)
+ Eine Lambda-Funktion mit der Python-Laufzeit, die aus einem Dockerfile erstellt wurde. Das Dockerfile installiert die `pandas` Bibliotheken `psycopg2` und im Lambda-Container-Image.

Die erste Lambda-Funktion installiert die `pandas` Bibliothek und ihre Abhängigkeiten in einer ZIP-Datei, und Lambda kann diese Bibliothek verwenden.

Die zweite Lambda-Funktion zeigt, dass Sie die `psycopg2` Bibliotheken `pandas` und in Lambda ausführen können, indem Sie ein Container-Image für Ihre Lambda-Funktion erstellen.

## Tools
<a name="import-psycopg2-library-lambda-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 Sie bei der Definition und Bereitstellung der AWS-Cloud-Infrastruktur im Code unterstützt.
+ [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.

**Andere Tools**
+ [Docker](https://www.docker.com/) ist eine Reihe von Platform-as-a-Service (PaaS) -Produkten, die Virtualisierung auf Betriebssystemebene nutzen, um Software in Containern bereitzustellen.
+ [pandas](https://pandas.pydata.org/) ist ein Python-basiertes Open-Source-Tool zur Datenanalyse und -manipulation.
+ [Psycopg](https://www.psycopg.org/docs/) ist ein PostgreSQL-Datenbankadapter für die Sprache Python, der für Multithread-Anwendungen entwickelt wurde. Dieses Muster verwendet Psycopg 2.
+ [Python](https://www.python.org/) ist eine Allzweck-Computerprogrammiersprache.

**Code-Repository**

Der Code für dieses Muster ist im [import-psycopg2- in-lambda-to-interact -Repository](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) unter verfügbar. with-postgres-database GitHub

## Best Practices
<a name="import-psycopg2-library-lambda-best-practices"></a>

Dieses Muster bietet Ihnen ein funktionierendes Beispiel für die Erstellung einer Lambda-Funktion aus einem Dockerfile. AWS CDK Wenn Sie diesen Code in Ihrer Anwendung wiederverwenden, stellen Sie sicher, dass die bereitgestellten Ressourcen alle Sicherheitsanforderungen erfüllen. Verwenden Sie Tools wie [Checkov](https://www.checkov.io/), das Cloud-Infrastrukturkonfigurationen scannt, um Fehlkonfigurationen zu finden, bevor die Infrastruktur bereitgestellt wird.

## Epen
<a name="import-psycopg2-library-lambda-epics"></a>

### Klonen Sie das Repository und konfigurieren Sie die Bereitstellung
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Repository | Führen Sie die folgenden Befehle aus, um das GitHub Repository auf Ihrem lokalen Computer zu klonen:<pre>git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git<br />cd AWS-lambda-psycopg2</pre> | Allgemeines AWS | 
| Konfigurieren Sie Ihre Bereitstellung. | Bearbeiten Sie die `app.py` Datei mit Informationen zu Ihren AWS-Konto:<pre>aws_acccount = "AWS_ACCOUNT_ID"<br />region = "AWS_REGION"<br /># Select the CPU architecture you are using to build the image (ARM or X86)<br />architecture = "ARM"</pre> | Allgemeines AWS | 

### Starten Sie Ihr AWS-Konto und stellen Sie die Anwendung bereit
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bootstrap dein AWS-Konto. | Wenn Sie [Ihre AWS-Umgebung noch nicht gebootet](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) haben, führen Sie die folgenden Befehle mit den AWS Anmeldeinformationen Ihres AWS Kontos aus:<pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | Allgemeines AWS | 
| Stellen Sie den Code bereit. | Führen Sie den folgenden Befehl aus, um die AWS CDK Anwendung bereitzustellen:<pre>cdk deploy AWSLambdaPyscopg2</pre> | Allgemeines AWS | 

### Testen Sie die Lambda-Funktionen von der AWS-Managementkonsole aus
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Testen Sie die Lambda-Funktion, die aus der ZIP-Datei erstellt wurde. | Gehen Sie wie folgt vor, um die Lambda-Funktion zu testen, die aus der ZIP-Datei erstellt wurde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Da Lambda die erforderlichen PostgreSQL-Bibliotheken im Standard-Image nicht findet, kann es die Bibliothek nicht verwenden. `psycopg2` | Allgemeines AWS | 
| Testen Sie die Lambda-Funktion, die aus dem Dockerfile erstellt wurde. | Um die `psycopg2` Bibliothek in Ihrer Lambda-Funktion zu verwenden, müssen Sie das Lambda Amazon Machine Image (AMI) bearbeiten.Gehen Sie wie folgt vor, um die Lambda-Funktion zu testen, die aus dem Dockerfile erstellt wurde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Der folgende Code zeigt das Dockerfile, das die AWS CDK Vorlage erstellt:<pre># Start from lambda Python3.13 image<br />FROM public.ecr.aws/lambda/python:3.13<br /><br /># Copy the lambda code, together with its requirements<br />COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT}<br />COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT}<br /><br /># Install postgresql-devel in your image<br />RUN yum install -y gcc postgresql-devel<br /><br /># install the requirements for the Lambda code<br />RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"<br /><br /># Command can be overwritten by providing a different command in the template directly.<br />CMD ["lambda_code.handler"]</pre>Das Dockerfile verwendet das AWS bereitgestellte Lambda-Image für die Python-Laufzeit und installiert [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/postgresql-devel/), das die Bibliotheken enthält, die zum Kompilieren von Anwendungen benötigt werden, die direkt mit dem PostgreSQL-Managementserver interagieren. Das Dockerfile installiert auch die Bibliotheken und, die in der Datei angegeben sind. `pandas` `psycopg2` `requirements.txt` | Allgemeines AWS | 

## Zugehörige Ressourcen
<a name="import-psycopg2-library-lambda-resources"></a>
+ [AWS CDK Dokumentation](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
+ [AWS Lambda Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

## Zusätzliche Informationen
<a name="import-psycopg2-library-lambda-additional"></a>

In diesem Muster stellt die AWS CDK Vorlage einen AWS Stapel mit drei Ressourcen bereit:
+ Eine [AWS Identity and Access Management (IAM-) Rolle](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) für die Lambda-Funktionen.
+ Eine Lambda-Funktion mit einer Python-Laufzeit. Die Funktion wird aus dem `Constructs/lambda/lambda_deploy.zip` Bereitstellungspaket bereitgestellt.
+ Eine Lambda-Funktion mit einer Python-Laufzeit. Die Funktion wird über das Dockerfile unter dem Ordner bereitgestellt `Constructs`

Das Skript für beide Lambda-Funktionen prüft, ob die `psycopg2` Bibliotheken `pandas` und erfolgreich importiert wurden:

```
import pandas
print("pandas successfully imported")

import psycopg2
print("psycopg2 successfully imported")

def handler(event, context):
    """Function that checks whether psycopg2  and pandas are successfully imported or not"""
    return {"Status": "psycopg2 and pandas successfully imported"}
```

Das `lambda_deploy.zip` Bereitstellungspaket wird mit dem `Constructs/lambda/build.sh` Bash-Skript erstellt. Dieses Skript erstellt einen Ordner, kopiert das Lambda-Skript, installiert die `psycopg2` Bibliotheken `pandas` und und generiert die ZIP-Datei. Um die .zip-Datei selbst zu generieren, führen Sie dieses Bash-Skript aus und stellen Sie den Stack erneut bereit. AWS CDK 

Das Dockerfile beginnt mit dem AWS bereitgestellten Basis-Image für Lambda mit einer Python-Laufzeit. Das Dockerfile installiert die `psycopg2` Bibliotheken `pandas` und über dem Standard-Image.

# Integrieren Sie Amazon API Gateway mit Amazon SQS, um asynchrones REST zu handhaben APIs
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis"></a>

*Natalia Colantonio Favero und Gustavo Martim, Amazon Web Services*

## Zusammenfassung
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-summary"></a>

Wenn Sie REST bereitstellen APIs, müssen Sie manchmal eine Nachrichtenwarteschlange bereitstellen, die Client-Anwendungen veröffentlichen können. Möglicherweise haben Sie Probleme mit der Latenz von Drittanbietern APIs und Verzögerungen bei den Antworten, oder Sie möchten die Antwortzeit von Datenbankabfragen vermeiden oder vermeiden, den Server zu skalieren, wenn eine große Anzahl gleichzeitiger APIs Server vorhanden ist. In diesen Szenarien müssen die Client-Anwendungen, die in der Warteschlange veröffentlichen, nur wissen, dass die API die Daten empfangen hat — nicht, was nach dem Empfang der Daten passiert.

Dieses Muster erstellt einen REST-API-Endpunkt, indem [Amazon API Gateway](https://aws.amazon.com/api-gateway/) verwendet wird, um eine Nachricht an [Amazon Simple Queue Service (Amazon SQS)](https://aws.amazon.com/sqs/) zu senden. Es schafft eine easy-to-implement Integration zwischen den beiden Diensten, wodurch ein direkter Zugriff auf die SQS-Warteschlange vermieden wird.

## Voraussetzungen und Einschränkungen
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-prereqs"></a>
+ Ein [aktives Konto AWS](https://portal.aws.amazon.com/billing/signup/iam)

## Architektur
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-architecture"></a>

![\[Architektur für die Integration von API Gateway mit Amazon SQS\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/70984dee-e49f-4446-9d52-49ce826c3909/images/737ba0b2-da8f-4478-8c54-0a4835fd69f9.png)


Das Diagramm veranschaulicht diese Schritte:

1. Fordern Sie einen POST-REST-API-Endpunkt an, indem Sie ein Tool wie Postman, eine andere API oder andere Technologien verwenden.

1. API Gateway stellt eine Nachricht, die im Hauptteil der Anfrage empfangen wird, in die Warteschlange.

1. Amazon SQS empfängt die Nachricht und sendet eine Antwort mit einem Erfolgs- oder Fehlercode an API Gateway.

## Tools
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-tools"></a>
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) unterstützt Sie bei der Erstellung, Veröffentlichung, Wartung, Überwachung und Sicherung von REST, HTTP und WebSocket APIs in jeder Größenordnung.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [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.   

## Epen
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-epics"></a>

### Erstellen Sie eine SQS-Warteschlange
<a name="create-an-sqs-queue"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Warteschlange. | So erstellen Sie eine SQS-Warteschlange, die die Nachrichten von der REST-API empfängt:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | App-Developer | 

### Zugriff auf Amazon SQS bereitstellen
<a name="provide-access-to-sqs"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine IAM-Rolle. | Diese IAM-Rolle gewährt API Gateway Gateway-Ressourcen vollen Zugriff auf Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | App-Entwickler, AWS-Administrator | 

### Erstellen Sie eine REST-API
<a name="create-a-rest-api"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine REST-API. | Dies ist die REST-API, an die HTTP-Anfragen gesendet werden.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | App-Developer | 
| Connect API Gateway mit Amazon SQS. | Dieser Schritt ermöglicht es, dass die Nachricht aus dem Hauptteil der HTTP-Anfrage an Amazon SQS weitergeleitet wird.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | App-Developer | 

### Testen Sie die REST-API
<a name="test-the-rest-api"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Testen Sie die REST-API. | Führen Sie einen Test durch, um zu überprüfen, ob die Konfiguration fehlt:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | App-Developer | 
| Ändern Sie die API-Integration, um die Anfrage ordnungsgemäß an Amazon SQS weiterzuleiten. | Vervollständigen Sie die Konfiguration, um den Integrationsfehler zu beheben:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | App-Developer | 
| Testen und validieren Sie die Nachricht in Amazon SQS. | Führen Sie einen Test durch, um zu bestätigen, dass der Test erfolgreich abgeschlossen wurde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | App-Developer | 
| Testen Sie API Gateway mit einem Sonderzeichen. | Führen Sie einen Test aus, der Sonderzeichen (wie &) enthält, die in einer Nachricht nicht zulässig sind:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)Das liegt daran, dass Sonderzeichen im Nachrichtentext standardmäßig nicht unterstützt werden. Im nächsten Schritt konfigurieren Sie API Gateway so, dass es Sonderzeichen unterstützt. Weitere Informationen zu Inhaltstypkonvertierungen finden Sie in der [API Gateway Gateway-Dokumentation](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html). | App-Developer | 
| Ändern Sie die API-Konfiguration, sodass Sonderzeichen unterstützt werden. | Passen Sie die Konfiguration so an, dass Sonderzeichen in der Nachricht akzeptiert werden:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)Die neue Nachricht sollte das Sonderzeichen enthalten. | App-Developer | 

### Stellen Sie die REST-API bereit
<a name="deploy-the-rest-api"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie die API bereit. |  So stellen Sie die REST-API bereit:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | App-Developer | 
| Testen Sie mit einem externen Tool. | Führen Sie einen Test mit einem externen Tool durch, um zu bestätigen, dass die Nachricht erfolgreich empfangen wurde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | App-Developer | 

### Bereinigen
<a name="clean-up"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Löschen Sie die API. | Wählen Sie in der [API Gateway Gateway-Konsole](https://console.aws.amazon.com/apigateway/) die API aus, die Sie erstellt haben, und klicken Sie dann auf **Löschen**. | App-Developer | 
| Löschen Sie die IAM-Rolle. | **Wählen Sie in der [IAM-Konsole](https://console.aws.amazon.com/iam/) im Bereich **Rollen** die Option **AWSGatewayRoleForSQS** und dann Löschen aus.** | App-Developer | 
| Löschen Sie die SQS-Warteschlange. | **Wählen Sie auf der [Amazon SQS SQS-Konsole](https://console.aws.amazon.com/sqs/) im Bereich **Warteschlangen** die SQS-Warteschlange aus, die Sie erstellt haben, und klicken Sie dann auf Löschen.** | App-Developer | 

## Zugehörige Ressourcen
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-resources"></a>
+ [SQS- SendMessage](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html#SQS-SendMessage) (API Gateway Gateway-Dokumentation)
+ [Inhaltstypkonvertierungen in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html) (API Gateway Gateway-Dokumentation)
+ [\$1util-Variablen](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#util-template-reference) (API Gateway Gateway-Dokumentation)
+ [Wie integriere ich eine API Gateway Gateway-REST-API in Amazon SQS und behebe häufig auftretende Fehler?](https://repost.aws/knowledge-center/api-gateway-rest-api-sqs-errors) (AWS Re:POST-Artikel)

# Ereignisse asynchron mit Amazon API Gateway und AWS Lambda verarbeiten
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda"></a>

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

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

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ist ein vollständig verwalteter Service, mit dem Entwickler in jeder Größenordnung erstellen, veröffentlichen, warten, überwachen und sichern APIs können. 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 und AWS Lambda. Die Architektur unterstützt die Ausführung von Verarbeitungsaufträgen mit einer Dauer von bis zu 15 Minuten 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 dem [AWS Cloud Development Kit (AWS CDK) Toolkit AWS-Konto](https://docs.aws.amazon.com/cdk/v2/guide/cli.html), [Docker](https://docs.docker.com/get-docker/) und Node.js auf einem Ziel 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-and-aws-lambda-tools).

## Voraussetzungen und Einschränkungen
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-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
  + [Docker-Version 20.10.21](https://docs.docker.com/get-docker/)
  + [Node.js, Version 18.13.0](https://nodejs.org/en/download/)
  + Bewährte [Version 0.71.111](https://pypi.org/project/projen/)
  + [Python-Version](https://www.python.org/downloads/) 3.9.16

**Einschränkungen**
+ 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-Funktion begrenzt.

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

Das folgende Diagramm zeigt die Interaktion der Jobs-API mit den Lambda-Funktionen zur Ereignisverarbeitung und Fehlerbehandlung, wobei Ereignisse in einem Amazon-Ereignisarchiv gespeichert werden. EventBridge 

![\[AWS Cloud architecture showing user interaction with jobs API, Lambda functions, and EventBridge.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/e027130c-44c1-41ab-bbe9-f196a49bd9ac/images/3c437b65-48e3-477d-aeea-6ff938cc3285.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 ruft asynchron die Lambda-Funktion zur Ereignisverarbeitung auf.

1. Die Funktion zur Ereignisverarbeitung verarbeitet das Ereignis und fügt dann die Auftragsergebnisse in die Amazon DynamoDB-Tabelle der Jobs 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 Ereignisverarbeitungsfunktion das Ereignis an 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}` Jobs-API-Endpunkt senden.

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

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

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

**AWS-Services**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)ist ein Softwareentwicklungs-Framework, das Ihnen hilft, AWS Cloud Infrastruktur im Code zu definieren und bereitzustellen.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.
+ [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.
+ [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.

**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 Event Processing with API Gateway and Lambda](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk).

## Best Practices
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-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:
  + Amazon 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 durch.

    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 höheres Maß an Sicherheit erfordert, sollten Sie die [Verwendung von AWS WAF zum Schutz Ihrer API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) in Betracht ziehen.

## Epen
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-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-lambda-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-lambda-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-and-aws-lambda.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 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/).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 Befehls deploy 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-and-aws-lambda.html) | AWS DevOps | 
| Testen Sie die Beispielarchitektur. | Um die Beispielarchitektur zu testen, [senden Sie Anfragen an](https://learning.postman.com/docs/sending-requests/requests/#next-steps) 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-and-aws-lambda-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-and-aws-lambda.html) | 

## Zugehörige Ressourcen
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-resources"></a>
+ [API-Gateway-Zuordnungsvorlage und Referenz zur Zugriffsprotokollierungsvariablen](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Richten Sie den asynchronen Aufruf der Backend-Lambda-Funktion ein](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-integration-async.html)

# Ereignisse asynchron mit Amazon API Gateway und Amazon DynamoDB Streams verarbeiten
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams"></a>

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

## Zusammenfassung
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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 DynamoDB Streams und. AWS Lambda Die Architektur unterstützt die Ausführung von Parallelverarbeitungsjobs mit denselben Eingabeparametern und verwendet eine grundlegende 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](https://pypi.org/project/projen/) [wird verwendet, um die lokale Entwicklungsumgebung einzurichten und die Beispielarchitektur in Kombination mit dem [AWS Cloud Development Kit (AWS CDK) Toolkit AWS-Konto](https://docs.aws.amazon.com/cdk/v2/guide/cli.html), [Docker](https://docs.docker.com/get-docker/) und Node.js auf einem Ziel 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](#processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-tools).

## Voraussetzungen und Einschränkungen
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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**
+ 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
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-architecture"></a>

**Architektur**

Das folgende Diagramm zeigt die Interaktion der Jobs-API mit DynamoDB Streams und den 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.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/68a46501-16e5-48e4-99c6-fc67a8b4133a/images/29fe6982-ad81-4099-9c65-08b17c96e78f.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 gibt Ihnen eine HTTP-Antwort zurück, die die Job-ID enthält.

1. Die Job-API platziert die Job-Parameter in der `jobs_table` Amazon DynamoDB-Tabelle.

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

1. 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.](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html)

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_table` 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 Quellenzuordnung der Ereignisverarbeitungsfunktion das Ereignis an das Thema Amazon Simple Notification Service (Amazon SNS) zur Fehlerbehandlung.

1. Das SNS-Thema zur Fehlerbehandlung überträgt das Ereignis asynchron an die Fehlerbehandlungsfunktion.

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

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

1. 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
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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 Sie bei der Definition und Bereitstellung der AWS-Cloud-Infrastruktur im Code unterstützt.
+ [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.
+ [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 AWS-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 Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) unterstützt Sie bei der Koordination und Verwaltung des Nachrichtenaustauschs zwischen Herausgebern und Kunden, einschließlich Webservern und E-Mail-Adressen.

**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 DynamoDB Streams](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk).

## Best Practices
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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).
+ Um eine Drosselung zu vermeiden, rät die [DynamoDB Streams-Dokumentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Processing) 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](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html).
+ In diesem Beispiel wurde [optimistisches Sperren](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html) 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
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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-dynamodb-streams-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-dynamodb-streams-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/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.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/).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 [AWS Signature Version 4-Authentifizierung](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) unterstützt, und verweisen Sie auf die exponierten API-Endpunkte, die durch [Exportieren 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/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.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="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | 

## Zugehörige Ressourcen
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-resources"></a>
+ [API-Gateway-Zuordnungsvorlage und Referenz zur Zugriffsprotokollierungsvariablen](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Erfassung von Änderungsdaten für DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)
+ [Optimistisches Sperren mit Versionsnummer](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html)
+ [Verwenden von Kinesis Data Streams zur Erfassung von Änderungen an DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html)

# 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/).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/)

# Führen Sie AWS Systems Manager Automation Automation-Aufgaben synchron über AWS Step Functions aus
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions"></a>

*Elie El Khoury, Amazon Web Services*

## Zusammenfassung
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-summary"></a>

Dieses Muster erklärt, wie die Integration AWS Step Functions mit erfolgt. AWS Systems Manager Es verwendet AWS SDK-Dienstintegrationen, um die Systems Manager **startAutomationExecution**Manager-API mit einem Task-Token aus einem State-Machine-Workflow aufzurufen, und pausiert, bis das Token mit einem erfolgreichen oder fehlerhaften Aufruf zurückkehrt. Um die Integration zu demonstrieren, implementiert dieses Muster einen Wrapper für Automatisierungsdokumente (Runbook) um das `AWS-RunPowerShellScript` OR-Dokument und wird verwendet`.waitForTaskToken`, um `AWS-RunShellScript` oder synchron aufzurufen. `AWS-RunShellScript` `AWS-RunPowerShellScript` Weitere Informationen zu AWS SDK-Dienstintegrationen in Step Functions finden Sie im [AWS Step Functions Entwicklerhandbuch](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html).

Step Functions**** ist ein visueller Workflow-Dienst mit geringem Programmieraufwand, mit dem Sie mithilfe von Diensten verteilte Anwendungen erstellen, IT- und Geschäftsprozesse automatisieren und Daten- und Machine-Learning-Pipelines erstellen können. AWS Workflows verwalten Fehler, Wiederholungen, Parallelisierung, Serviceintegrationen und Beobachtbarkeit, sodass Sie sich auf die wertvollere Geschäftslogik konzentrieren können.

Automatisierung, eine Funktion von AWS Systems Manager, vereinfacht allgemeine Wartungs-, Bereitstellungs- und Problembehebungsaufgaben für AWS-Services Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS), Amazon Redshift und Amazon Simple Storage Service (Amazon S3). Durch die Automatisierung haben Sie eine detaillierte Kontrolle über die Parallelität Ihrer Automatisierungen. Sie können beispielsweise angeben, auf wie viele Ressourcen gleichzeitig zugegriffen werden soll und wie viele Fehler auftreten können, bevor eine Automatisierung gestoppt wird.

Einzelheiten zur Implementierung, einschließlich Runbook-Schritten, Parametern und Beispielen, finden Sie im Abschnitt [Zusätzliche Informationen](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).

## Voraussetzungen und Einschränkungen
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-prereqs"></a>

**Voraussetzungen**
+ Ein aktives Konto AWS 
+ AWS Identity and Access Management (IAM) -Berechtigungen für den Zugriff auf Step Functions und Systems Manager
+ Eine EC2 Instanz, auf der Systems Manager Agent (SSM Agent) [installiert](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html) ist
+ [Ein IAM-Instanzprofil für Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html), das an die Instance angehängt ist, auf der Sie das Runbook ausführen möchten
+ Eine Step Functions Functions-Rolle mit den folgenden IAM-Berechtigungen (die dem Prinzip der geringsten Rechte folgen):

```
{
             "Effect": "Allow",
             "Action": "ssm:StartAutomationExecution",
             "Resource": "*"
 }
```

**Produktversionen**
+ SSM-Dokumentschema Version 0.3 oder höher
+ SSM Agent Version 2.3.672.0 oder höher

## Architektur
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-architecture"></a>

**Zieltechnologie-Stack**
+ AWS Step Functions
+ AWS Systems Manager -Automatisierung

**Zielarchitektur**

![\[Architektur für die synchrone Ausführung von Systems Manager Manager-Automatisierungsaufgaben über Step Functions\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/47c19e4f-d68d-4f91-bb68-202098757529/images/2d248aae-d858-4565-8af2-593cde0da780.png)


**Automatisierung und Skalierung**
+ Dieses Muster bietet eine AWS CloudFormation Vorlage, mit der Sie die Runbooks auf mehreren Instanzen bereitstellen können. (Weitere Informationen finden Sie im [Implementierungs-Repository von GitHub Step Functions und Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken).)

## Tools
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-tools"></a>

**AWS-Services**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)hilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus regionsübergreifend AWS-Konten zu verwalten.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, sie zu verwenden.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)ist ein serverloser Orchestrierungsservice, mit dem Sie AWS Lambda Funktionen und andere Funktionen kombinieren können, um geschäftskritische Anwendungen AWS-Services zu erstellen.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)hilft Ihnen bei der Verwaltung Ihrer Anwendungen und Infrastruktur, die in der ausgeführt werden. AWS Cloud Es vereinfacht das Anwendungs- und Ressourcenmanagement, verkürzt die Zeit für die Erkennung und Lösung betrieblicher Probleme und hilft Ihnen, Ihre AWS Ressourcen sicher und in großem Umfang zu verwalten.

**Code**

Der Code für dieses Muster ist im [Implementierungs-Repository von GitHub Step Functions und Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken) verfügbar. 

## Epen
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-epics"></a>

### Runbooks erstellen
<a name="create-runbooks"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Laden Sie die CloudFormation Vorlage herunter. | Laden Sie die `ssm-automation-documents.cfn.json` Vorlage aus dem `cloudformation ` Ordner des GitHub Repositorys herunter. | AWS DevOps | 
| Runbooks erstellen. | Melden Sie sich bei der an AWS-Managementkonsole, öffnen Sie die [CloudFormation Konsole](https://console.aws.amazon.com/cloudformation/) und stellen Sie die Vorlage bereit. Weitere Informationen zum Bereitstellen von CloudFormation Vorlagen finden Sie in der CloudFormation Dokumentation unter [Erstellen eines Stacks auf der CloudFormation Konsole](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html). Die CloudFormation Vorlage stellt drei Ressourcen bereit:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.html) | AWS DevOps | 

### Erstellen Sie eine Beispiel-Zustandsmaschine
<a name="create-a-sample-state-machine"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Teststatus-Maschine.  | Folgen Sie den Anweisungen im [AWS Step Functions Entwicklerhandbuch](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html), um eine Zustandsmaschine zu erstellen und auszuführen. Verwenden Sie für die Definition den folgenden Code. Achten Sie darauf, den `InstanceIds` Wert mit der ID einer gültigen Systems Manager-fähigen Instanz in Ihrem Konto zu aktualisieren.<pre>{<br />  "Comment": "A description of my state machine",<br />  "StartAt": "StartAutomationWaitForCallBack",<br />  "States": {<br />    "StartAutomationWaitForCallBack": {<br />      "Type": "Task",<br />      "Resource": "arn:aws:states:::aws-sdk:ssm:startAutomationExecution.waitForTaskToken",<br />      "Parameters": {<br />        "DocumentName": "SfnRunCommandByInstanceIds",<br />        "Parameters": {<br />          "InstanceIds": [<br />            "i-1234567890abcdef0"<br />          ],<br />          "taskToken.$": "States.Array($$.Task.Token)",<br />          "workingDirectory": [<br />            "/home/ssm-user/"<br />          ],<br />          "Commands": [<br />            "echo \"This is a test running automation waitForTaskToken\" >> automation.log",<br />            "sleep 100"<br />          ],<br />          "executionTimeout": [<br />              "10800"<br />          ],<br />          "deliveryTimeout": [<br />              "30"<br />          ],<br />          "shell": [<br />              "Shell"<br />          ]<br />            }<br />      },<br />      "End": true<br />    }<br />  }<br />}</pre>Dieser Code ruft das Runbook auf, um zwei Befehle auszuführen, die den `waitForTaskToken` Aufruf von Systems Manager Automation demonstrieren.Der `shell` Parameterwert (`Shell`oder`PowerShell`) bestimmt, ob das Automatisierungsdokument ausgeführt wird `AWS-RunShellScript` oder`AWS-RunPowerShellScript`.Die Aufgabe schreibt „Dies ist ein waitForTask Automatisierungstoken für die Testausführung“ in die `/home/ssm-user/automation.log` Datei und ruht dann 100 Sekunden lang, bevor sie mit dem Aufgabentoken antwortet und die nächste Aufgabe im Workflow freigibt.Wenn Sie stattdessen das `SfnRunCommandByTargets` Runbook aufrufen möchten, ersetzen Sie den `Parameters` Abschnitt des vorherigen Codes durch den folgenden:<pre>"Parameters": {<br />          "Targets": [<br />            {<br />              "Key": "InstanceIds",<br />              "Values": [<br />                "i-02573cafcfEXAMPLE",<br />                "i-0471e04240EXAMPLE"<br />              ]<br />            }<br />          ],</pre> | AWS DevOps | 
| Aktualisieren Sie die IAM-Rolle für den State Machine. | Im vorherigen Schritt wird automatisch eine dedizierte IAM-Rolle für den State Machine erstellt. Es gewährt jedoch keine Berechtigungen zum Aufrufen des Runbooks. Aktualisieren Sie die Rolle, indem Sie die folgenden Berechtigungen hinzufügen:<pre>{<br />      "Effect": "Allow",<br />      "Action": "ssm:StartAutomationExecution",<br />      "Resource": "*"<br /> }</pre> | AWS DevOps | 
| Validieren Sie die synchronen Aufrufe. | Führen Sie die Zustandsmaschine aus, um den synchronen Aufruf zwischen Step Functions und Systems Manager Automation zu validieren. Eine Beispielausgabe finden Sie im Abschnitt [Zusätzliche Informationen](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).  | AWS DevOps | 

## Zugehörige Ressourcen
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-resources"></a>
+ [Erste Schritte mit AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) (*AWS Step Functions Entwicklerhandbuch*)
+ [Warten Sie auf einen Rückruf mit dem Task-Token](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token) (*AWS Step Functions Developer Guide*, Service Integration Patterns)
+ [API-Aufrufe send\$1task\$1success und [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) (Boto3-Dokumentation) 
+ [AWS Systems Manager Automatisierung AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) *(Benutzerhandbuch*)

## Zusätzliche Informationen
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional"></a>

**Implementierungsinformationen**

Dieses Muster stellt eine CloudFormation Vorlage bereit, die zwei Systems Manager Manager-Runbooks bereitstellt:
+ `SfnRunCommandByInstanceIds`führt den `AWS-RunPowerShellScript` Befehl `AWS-RunShellScript` or mithilfe einer Instanz aus. IDs
+ `SfnRunCommandByTargets`führt den `AWS-RunPowerShellScript` Befehl `AWS-RunShellScript` or mithilfe von Zielen aus.

Jedes Runbook implementiert vier Schritte, um einen synchronen Aufruf zu erreichen, wenn die `.waitForTaskToken` Option in Step Functions verwendet wird.


| 
| 
| Schritt | Action | Description | 
| --- |--- |--- |
| **1** | `Branch` | Prüft den `shell` Parameterwert (`Shell`oder`PowerShell`), um zu entscheiden, ob die Ausführung `AWS-RunShellScript` für Linux oder `AWS-RunPowerShellScript` für Windows erfolgen soll. | 
| **2** | `RunCommand_Shell` oder `RunCommand_PowerShell` | Nimmt mehrere Eingaben entgegen und führt den `RunPowerShellScript` Befehl `RunShellScript` oder aus. Weitere Informationen finden Sie auf der Registerkarte **Details** für das Dokument `RunCommand_Shell` oder `RunCommand_PowerShell` Automation in der Systems Manager Manager-Konsole. | 
| **3** | `SendTaskFailure` | Wird ausgeführt, wenn Schritt 2 abgebrochen oder abgebrochen wird. Es ruft die Step Functions [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) API auf, die drei Parameter als Eingabe akzeptiert: das von der Zustandsmaschine übergebene Token, den Fehlerfehler und eine Beschreibung der Fehlerursache. | 
| **4** | `SendTaskSuccess` | Wird ausgeführt, wenn Schritt 2 erfolgreich ist. Es ruft die Step Functions [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) API auf, die das von der Zustandsmaschine übergebene Token als Eingabe akzeptiert. | 

**Runbook-Parameter**

`SfnRunCommandByInstanceIds`Runbook:


| 
| 
| Parametername | Typ | Optional oder erforderlich | Description | 
| --- |--- |--- |--- |
| `shell` | Zeichenfolge | Erforderlich | Die Instanz-Shell, um zu entscheiden, ob sie `AWS-RunShellScript` für Linux oder `AWS-RunPowerShellScript` für Windows ausgeführt werden sollen. | 
| `deliveryTimeout` | Ganzzahl | Optional | Die Wartezeit in Sekunden, bis ein Befehl an den SSM-Agenten auf einer Instance übermittelt wird. Dieser Parameter hat einen Mindestwert von 30 (0,5 Minuten) und einen Höchstwert von 2592000 (720 Stunden). | 
| `executionTimeout` | Zeichenfolge | Optional | Die Zeit in Sekunden, die ein Befehl bis zum Abschluss benötigt, bevor er als fehlgeschlagen betrachtet wird. Der Standardwert ist 3600 (1 Stunde). Der Höchstwert ist 172800 (48 Stunden). | 
| `workingDirectory` | Zeichenfolge | Optional | Der Pfad zum Arbeitsverzeichnis auf der Instance. | 
| `Commands` | StringList | Erforderlich | Das auszuführende Shell-Skript oder der auszuführende Befehl. | 
| `InstanceIds` | StringList | Erforderlich | Die IDs Instanzen, in denen Sie den Befehl ausführen möchten. | 
| `taskToken` | Zeichenfolge | Erforderlich | Das Task-Token, das für Rückrufantworten verwendet werden soll. | 

`SfnRunCommandByTargets`Runbook:


| 
| 
| Name | Typ | Optional oder erforderlich | Description | 
| --- |--- |--- |--- |
| `shell` | Zeichenfolge | Erforderlich | Die Instanz-Shell, um zu entscheiden, ob sie `AWS-RunShellScript` für Linux oder `AWS-RunPowerShellScript` für Windows ausgeführt werden sollen. | 
| `deliveryTimeout` | Ganzzahl | Optional | Die Wartezeit in Sekunden, bis ein Befehl an den SSM-Agenten auf einer Instance übermittelt wird. Dieser Parameter hat einen Mindestwert von 30 (0,5 Minuten) und einen Höchstwert von 2592000 (720 Stunden). | 
| `executionTimeout` | Ganzzahl | Optional | Die Zeit in Sekunden, die ein Befehl bis zum Abschluss benötigt, bevor er als fehlgeschlagen betrachtet wird. Der Standardwert ist 3600 (1 Stunde). Der Höchstwert ist 172800 (48 Stunden). | 
| `workingDirectory` | Zeichenfolge | Optional | Der Pfad zum Arbeitsverzeichnis auf der Instance. | 
| `Commands` | StringList | Erforderlich | Das auszuführende Shell-Skript oder der auszuführende Befehl. | 
| `Targets` | MapList | Erforderlich | Eine Reihe von Suchkriterien, die Instanzen anhand von Schlüssel-Wert-Paaren identifizieren, die Sie angeben. Beispiel: `[{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]` | 
| `taskToken` | Zeichenfolge | Erforderlich | Das Task-Token, das für Rückrufantworten verwendet werden soll. | 

**Beispielausgabe**

Die folgende Tabelle enthält ein Beispiel für die Ausgabe der Step-Funktion. Sie zeigt, dass die Gesamtlaufzeit zwischen Schritt 5 (`TaskSubmitted`) und Schritt 6 (`TaskSucceeded`) über 100 Sekunden beträgt. Dies zeigt, dass die Step-Funktion auf die Beendigung des `sleep 100` Befehls gewartet hat, bevor sie zur nächsten Aufgabe im Workflow überging.


| 
| 
| ID (ID) | Typ | Schritt | Ressource | Verstrichene Zeit (ms) | Zeitstempel | 
| --- |--- |--- |--- |--- |--- |
| **1** | `ExecutionStarted` |  | - | 0 | 11. März 2022 14:50:34.303 Uhr | 
| **2** | `TaskStateEntered` | `StartAutomationWaitForCallBack` | - | 40 | 11. März 2022 14:50:34,343 Uhr | 
| **3** | `TaskScheduled` | `StartAutomationWaitForCallBack` | - | 40 | 11. März 2022 14:50:34,343 Uhr | 
| **4** | `TaskStarted` | `StartAutomationWaitForCallBack` | - | 154 | 11. März 2022 14:50:34.457 Uhr | 
| **5** | `TaskSubmitted` | `StartAutomationWaitForCallBack` | - | 657 | 11. März 2022 14:50:34.960 Uhr | 
| **6** | `TaskSucceeded` | `StartAutomationWaitForCallBack` | - | 10:3835 | 11. März 2022 14:52:18.138 Uhr | 
| **7** | `TaskStateExited` | `StartAutomationWaitForCallBack` | - | 1038 60 | 11. März 2022 14:52:18.163 Uhr | 
| **8** | `ExecutionSucceeded` |  | - | 103 897 | 11. März 2022 14:52:18.200 Uhr | 

# parallel Lesevorgänge von S3-Objekten mithilfe von Python in einer AWS Lambda Funktion ausführen
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function"></a>

*Eduardo Bortoluzzi, Amazon Web Services*

## Zusammenfassung
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-summary"></a>

Sie können dieses Muster verwenden, um eine Liste von Dokumenten aus Amazon Simple Storage Service (Amazon S3) -Buckets in Echtzeit abzurufen und zusammenzufassen. Das Muster bietet Beispielcode zum parallel Lesen von Objekten aus S3-Buckets auf Amazon Web Services (AWS). Das Muster zeigt, wie I/O gebundene Aufgaben mit AWS Lambda Funktionen unter Verwendung von Python effizient ausgeführt werden können.

Ein Finanzunternehmen verwendete dieses Muster in einer interaktiven Lösung, um korrelierte Finanztransaktionen manuell in Echtzeit zu genehmigen oder abzulehnen. Die Dokumente zu Finanztransaktionen wurden in einem marktbezogenen S3-Bucket gespeichert. Ein Mitarbeiter wählte eine Liste von Dokumenten aus dem S3-Bucket aus, analysierte den Gesamtwert der Transaktionen, die die Lösung berechnete, und entschied, den ausgewählten Stapel zu genehmigen oder abzulehnen.

I/O-gebundene Aufgaben unterstützen mehrere Threads. In diesem Beispielcode die Datei [concurrent.futures. ThreadPoolExecutor](https://docs.python.org/3.13/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)wird mit maximal 30 Threads gleichzeitig verwendet, obwohl Lambda-Funktionen bis zu 1.024 Threads unterstützen (wobei einer dieser Threads Ihr Hauptprozess ist). Dieses Limit ist darauf zurückzuführen, dass zu viele Threads aufgrund von Kontextwechsel und Nutzung von Rechenressourcen zu Latenzproblemen führen. Sie müssen auch die maximale Anzahl an Poolverbindungen erhöhen, `botocore` damit alle Threads den S3-Objektdownload gleichzeitig durchführen können.

Der Beispielcode verwendet ein 8,3-KB-Objekt mit JSON-Daten in einem S3-Bucket. Das Objekt wird mehrfach gelesen. Nachdem die Lambda-Funktion das Objekt gelesen hat, werden die JSON-Daten in ein Python-Objekt dekodiert. Im Dezember 2024 wurden nach der Ausführung dieses Beispiels 1.000 Lesevorgänge in 2,3 Sekunden und 10.000 Lesevorgänge in 27 Sekunden mithilfe einer Lambda-Funktion, die mit 2.304 MB Speicher konfiguriert war, verarbeitet. AWS Lambda unterstützt Speicherkonfigurationen von 128 MB bis 10.240 MB (10 GB), obwohl eine Erhöhung des Lambda-Speichers über 2.304 MB nicht dazu beigetragen hat, die Zeit für die Ausführung dieser speziellen I/O-bezogenen Aufgabe zu verkürzen.

Das [AWS Lambda Power Tuning-Tool](https://github.com/alexcasalboni/aws-lambda-power-tuning) wurde verwendet, um verschiedene Lambda-Speicherkonfigurationen zu testen und das beste performance-to-cost Verhältnis für die Aufgabe zu überprüfen. Die Testergebnisse finden Sie im Abschnitt [Zusätzliche Informationen](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional).

## Voraussetzungen und Einschränkungen
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto
+ Kenntnisse in der Python-Entwicklung

**Einschränkungen**
+ Eine Lambda-Funktion kann maximal [1.024 Ausführungsprozesse oder](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution) Threads haben.
+ Neue AWS-Konten haben ein Lambda-Speicherlimit von 3.008 MB. Passen Sie das AWS Lambda Power Tuning Tool entsprechend an. Weitere Informationen finden Sie im Abschnitt [Problembehandlung](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting).
+ Amazon S3 hat ein Limit von [5.500 GET/HEAD Anfragen pro Sekunde pro partitioniertem](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html) Präfix.

**Produktversionen**
+ Python 3.9 oder höher
+ AWS Cloud Development Kit (AWS CDK) v2
+ AWS Command Line Interface (AWS CLI) Ausführung 2
+ AWS Lambda Power Tuning 4.3.6 (optional)

## Architektur
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-architecture"></a>

**Zieltechnologie-Stack**
+ AWS Lambda
+ Amazon S3
+ AWS Step Functions (wenn AWS Lambda Power Tuning eingesetzt wird)

**Zielarchitektur**

Das folgende Diagramm zeigt eine Lambda-Funktion, die Objekte parallel aus einem S3-Bucket liest. Das Diagramm enthält auch einen Step Functions Functions-Workflow für das AWS Lambda Power Tuning-Tool zur Feinabstimmung des Lambda-Funktionsspeichers. Diese Feinabstimmung trägt dazu bei, ein ausgewogenes Verhältnis zwischen Kosten und Leistung zu erreichen.

![\[Diagramm mit Lambda-Funktion, S3-Bucket und AWS Step Functions.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/828696e2-6df7-4536-9205-951c99449f4e.png)


**Automatisierung und Skalierung**

Die Lambda-Funktionen skalieren bei Bedarf schnell. Um 503 Slow-Down-Fehler von Amazon S3 bei hoher Nachfrage zu vermeiden, empfehlen wir, der Skalierung einige Grenzen zu setzen.

## Tools
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-tools"></a>

**AWS-Services**
+ [AWS Cloud Development Kit (AWS CDK) v2](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) ist ein Softwareentwicklungs-Framework, das Ihnen hilft, AWS Cloud Infrastruktur im Code zu definieren und bereitzustellen. Die Beispielinfrastruktur wurde für die Bereitstellung mit erstellt AWS CDK.
+ [AWS Command Line InterfaceAWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)ist ein Open-Source-Tool, mit dem Sie AWS-Services über Befehle in Ihrer Befehlszeilen-Shell interagieren können. In diesem Muster wird AWS CLI Version 2 verwendet, um eine JSON-Beispieldatei hochzuladen.
+ [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 Storage Service Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) ist ein cloudbasierter Objektspeicherservice, mit dem Sie beliebige Datenmengen speichern, schützen und abrufen können.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)ist ein serverloser Orchestrierungsservice, mit dem Sie AWS Lambda Funktionen und andere AWS-Services kombinieren können, um geschäftskritische Anwendungen zu erstellen.

**Andere Tools**
+ [Python](https://www.python.org/) ist eine Allzweck-Computerprogrammiersprache. Die [Wiederverwendung inaktiver Worker-Threads](https://docs.python.org/3.8/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor) wurde in Python-Version 3.8 eingeführt, und der Lambda-Funktionscode in diesem Muster wurde für Python-Version 3.9 und höher erstellt.

**Code-Repository**

Der Code für dieses Muster ist im [aws-lambda-parallel-download](https://github.com/aws-samples/aws-lambda-parallel-download) GitHub Repository verfügbar.

## Best Practices
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-best-practices"></a>
+ Dieses AWS CDK Konstrukt stützt sich auf Ihre AWS-Konto Benutzerberechtigungen zur Bereitstellung der Infrastruktur. [Wenn Sie AWS CDK Pipelines oder kontoübergreifende Bereitstellungen verwenden möchten, finden Sie weitere Informationen unter Stack-Synthesizer.](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-synthesizers)
+ Für diese Beispielanwendung sind die Zugriffsprotokolle im S3-Bucket nicht aktiviert. Es hat sich bewährt, Zugriffsprotokolle im Produktionscode zu aktivieren.

## Epen
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-epics"></a>

### Bereiten Sie die Entwicklungsumgebung vor
<a name="prepare-the-development-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Überprüfen Sie die installierte Python-Version. | Dieser Code wurde speziell auf Python 3.9 und Python 3.13 getestet und sollte auf allen Versionen zwischen diesen Versionen funktionieren. Um Ihre Python-Version zu überprüfen, führen Sie es `python3 -V` in Ihrem Terminal aus und installieren Sie bei Bedarf eine neuere Version.Führen Sie den Befehl aus, um zu überprüfen, ob die erforderlichen Module installiert sind`python3 -c "import pip, venv"`. Keine Fehlermeldung bedeutet, dass die Module ordnungsgemäß installiert sind und Sie bereit sind, dieses Beispiel auszuführen.  | Cloud-Architekt | 
| Installieren AWS CDK. | Um das zu installieren, AWS CDK falls es noch nicht installiert ist, folgen Sie den Anweisungen unter [Erste Schritte mit dem AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). Um zu überprüfen, ob es sich bei der installierten AWS CDK Version um Version 2.0 oder höher handelt, führen Sie den Befehl aus`cdk –version`. | Cloud-Architekt | 
| Bootstrap für Ihre Umgebung. | Um Ihre Umgebung zu booten, folgen Sie, falls dies noch nicht geschehen ist, den Anweisungen unter [Bootstrapping Ihrer Umgebung zur Verwendung](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping-env.html) mit dem. AWS CDK | Cloud-Architekt | 

### Klonen Sie das Beispiel-Repository
<a name="clone-the-example-repository"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Repository | Führen Sie den folgenden Befehl aus, um die neueste Version des Repositorys zu klonen:<pre>git clone --depth 1 --branch v1.2.0 \<br />git@github.com:aws-samples/aws-lambda-parallel-download.git</pre> | Cloud-Architekt | 
| Ändern Sie das Arbeitsverzeichnis in das geklonte Repository. | Führen Sie den folgenden Befehl aus:<pre>cd aws-lambda-parallel-download</pre> | Cloud-Architekt | 
| Erstellen Sie die virtuelle Python-Umgebung. | Führen Sie den folgenden Befehl aus, um eine virtuelle Python-Umgebung zu erstellen:<pre>python3 -m venv .venv</pre> | Cloud-Architekt | 
| Aktivieren Sie die virtuelle Umgebung. | Führen Sie den folgenden Befehl aus, um die virtuelle Umgebung zu aktivieren:<pre>source .venv/bin/activate</pre> | Cloud-Architekt | 
| Installieren Sie die Abhängigkeiten. | Führen Sie den `pip` folgenden Befehl aus, um die Python-Abhängigkeiten zu installieren:<pre>pip install -r requirements.txt</pre> | Cloud-Architekt | 
| Durchsuchen Sie den Code. | (Optional) Der Beispielcode, der ein Objekt aus dem S3-Bucket herunterlädt, befindet sich unter`resources/parallel.py`.Der Infrastrukturcode befindet sich im `parallel_download` Ordner. | Cloud-Architekt | 

### Stellen Sie die App bereit und testen Sie sie
<a name="deploy-and-test-the-app"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie die Anwendung bereit. | Führen Sie `cdk deploy`.Schreiben Sie die AWS CDK Ergebnisse auf:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Cloud-Architekt | 
| Laden Sie eine JSON-Beispieldatei hoch. | Das Repository enthält eine JSON-Beispieldatei mit einer Größe von etwa 9 KB. Führen Sie den folgenden Befehl aus, um die Datei in den S3-Bucket des erstellten Stacks hochzuladen:<pre>aws s3 cp sample.json s3://<ParallelDownloadStack.SampleS3BucketName></pre>`<ParallelDownloadStack.SampleS3BucketName>`Ersetzen Sie durch den entsprechenden Wert aus der AWS CDK Ausgabe. | Cloud-Architekt | 
| Führen Sie die App aus. | Gehen Sie wie folgt vor, um die App auszuführen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Cloud-Architekt | 
| Fügen Sie die Anzahl der Downloads hinzu. | (Optional) Um 1.500 Get-Object-Aufrufe auszuführen, verwenden Sie den folgenden JSON-Code im **Event-JSON** des `Test` Parameters:<pre>{"repeat": 1500, "objectKey": "sample.json"}</pre> | Cloud-Architekt | 

### Optional: Führen Sie AWS Lambda Power Tuning aus
<a name="optional-run-lamlong-power-tuning"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Führen Sie das AWS Lambda Power Tuning-Tool aus. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html)Am Ende des Laufs wird das Ergebnis auf der Registerkarte **Eingabe und Ausgabe der Ausführung** angezeigt. | Cloud-Architekt | 
| Sehen Sie sich die AWS Lambda Power Tuning-Ergebnisse in einem Diagramm an. | Kopieren Sie auf der Registerkarte **Eingabe und Ausgabe der Ausführung** den `visualization` Eigenschaftenlink und fügen Sie ihn in eine neue Browser-Registerkarte ein. | Cloud-Architekt | 

### Bereinigen
<a name="clean-up"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Entfernen Sie die Objekte aus dem S3-Bucket. | Bevor Sie die bereitgestellten Ressourcen zerstören, entfernen Sie alle Objekte aus dem S3-Bucket:<pre>aws s3 rm s3://<ParallelDownloadStack.SampleS3BucketName> \<br />--recursive</pre>Denken Sie daran, `<ParallelDownloadStack.SampleS3BucketName>` durch den Wert aus den AWS CDK Ausgaben zu ersetzen. | Cloud-Architekt | 
| Zerstöre die Ressourcen. | Führen Sie den folgenden Befehl aus, um alle Ressourcen zu löschen, die für dieses Pilotprojekt erstellt wurden:<pre>cdk destroy</pre> | Cloud-Architekt | 

## Fehlerbehebung
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| `'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008` | Für neue Konten können Sie möglicherweise nicht mehr als 3.008 MB in Ihren Lambda-Funktionen konfigurieren. Um mit AWS Lambda Power Tuning zu testen, fügen Sie der Eingabe-JSON die folgende Eigenschaft hinzu, wenn Sie die Ausführung von Step Functions starten:<pre>"powerValues": [<br />    512,<br />    1024,<br />    1536,<br />    2048,<br />    2560,<br />    3008<br />  ]</pre> | 

## Zugehörige Ressourcen
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-resources"></a>
+ [Python — konkurrierende.Futures. ThreadPoolExecutor](https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)
+ [Lambda-Kontingente — Konfiguration, Bereitstellung und Ausführung von Funktionen](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution)
+ [Arbeiten mit dem AWS CDK in Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Profilierungsfunktionen mit AWS Lambda Power Tuning](https://docs.aws.amazon.com/lambda/latest/operatorguide/profile-functions.html)

## Zusätzliche Informationen
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional"></a>

**Code**

Der folgende Codeausschnitt führt die I/O Parallelverarbeitung durch:

```
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
  for result in executor.map(a_function, (the_arguments)):
    ...
```

Der `ThreadPoolExecutor` verwendet die Threads wieder, sobald sie verfügbar sind.

**Tests und Ergebnisse**

Diese Tests wurden im Dezember 2024 durchgeführt.

Beim ersten Test wurden 2.500 Objektlesevorgänge verarbeitet, mit dem folgenden Ergebnis.

![\[Mit steigendem Arbeitsspeicher sinken die Aufrufzeit und die Aufrufkosten steigen.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f6743412-1e52-4c4c-a51c-ac0f75b3b998.png)


Ab 3.009 MB blieb die Verarbeitungszeit bei jeder Speichererweiterung fast gleich, aber die Kosten stiegen mit zunehmender Speichergröße.

In einem weiteren Test wurde der Bereich zwischen 1.536 MB und 3.072 MB Arbeitsspeicher untersucht, wobei Werte verwendet wurden, die ein Vielfaches von 256 MB waren, und es wurden 10.000 Objektlesevorgänge verarbeitet. Dabei wurden die folgenden Ergebnisse erzielt.

![\[Der Unterschied zwischen sinkender Aufrufzeit und steigenden Aufrufkosten wurde verringert.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/c75d4443-74d8-4b93-9b4d-b2640869381e.png)


Das beste performance-to-cost Verhältnis wurde mit der Lambda-Konfiguration mit 2.304 MB Speicher erzielt.

Zum Vergleich: Ein sequentieller Prozess mit 2.500 Objektlesevorgängen dauerte 47 Sekunden. Der parallel Vorgang mit der Lambda-Konfiguration mit 2.304 MB dauerte 7 Sekunden, was 85 Prozent weniger ist.

![\[Diagramm, das die Verkürzung der Zeit beim Wechsel von sequentieller zur parallel Verarbeitung zeigt.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f3dcc44d-ac20-4b75-897d-1d71f0d59781.png)


# Senden Sie Telemetriedaten von AWS Lambda zu OpenSearch für Analysen und Visualisierungen in Echtzeit
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization"></a>

*Tabby Ward, Guy Bachar und David Kilzer, Amazon Web Services*

## Zusammenfassung
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-summary"></a>

Moderne Anwendungen werden zunehmend verteilt und ereignisgesteuert, was die Notwendigkeit von Überwachung und Beobachtbarkeit in Echtzeit verstärkt. AWS Lambda ist ein serverloser Computerdienst, der eine entscheidende Rolle beim Aufbau skalierbarer und ereignisgesteuerter Architekturen spielt. Die Überwachung und Fehlerbehebung von Lambda-Funktionen kann jedoch schwierig sein, wenn Sie sich ausschließlich auf Amazon CloudWatch Logs verlassen, was zu Latenz und begrenzten Aufbewahrungsfristen führen kann.

Um dieser Herausforderung zu begegnen, AWS wurde die Lambda Telemetry API eingeführt, die es Lambda-Funktionen ermöglicht, Telemetriedaten direkt an Überwachungs- und Beobachtungstools von Drittanbietern zu senden. Diese API unterstützt das Echtzeit-Streaming von Protokollen, Metriken und Traces und bietet einen umfassenden und zeitnahen Überblick über die Leistung und den Zustand Ihrer Lambda-Funktionen.

Dieses Muster erklärt, wie die Lambda-Telemetrie-API [OpenSearch](https://opensearch.org/docs/latest/), eine verteilte Open-Source-Such- und Analyse-Engine, integriert werden kann. OpenSearch bietet eine leistungsstarke und skalierbare Plattform für die Aufnahme, Speicherung und Analyse großer Datenmengen und ist damit die ideale Wahl für Lambda-Telemetriedaten. Insbesondere zeigt dieses Muster, wie Logs von einer in Python geschriebenen Lambda-Funktion direkt an einen OpenSearch Cluster gesendet werden, indem eine Lambda-Erweiterung verwendet wird, die von bereitgestellt wird. AWS Diese Lösung ist flexibel und anpassbar, sodass Sie Ihre eigene Lambda-Erweiterung erstellen oder den Beispielquellcode ändern können, um das Ausgabeformat nach Wunsch zu ändern.

Das Muster erklärt, wie die Lambda-Telemetrie-API-Integration eingerichtet und konfiguriert wird OpenSearch, und enthält bewährte Methoden für Sicherheit, Kostenoptimierung und Skalierbarkeit. Ziel ist es, Ihnen zu helfen, tiefere Einblicke in Ihre Lambda-Funktionen zu gewinnen und die allgemeine Beobachtbarkeit Ihrer serverlosen Anwendungen zu verbessern.


| 
| 
| Hinweis: Dieses Muster konzentriert sich auf die Integration der Lambda-Telemetrie-API mit Managed. OpenSearch Die besprochenen Prinzipien und Techniken gelten jedoch auch für Self-Managed OpenSearch und Elasticsearch. | 
| --- |

## Voraussetzungen und Einschränkungen
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-prereqs"></a>

Bevor Sie mit dem Integrationsprozess beginnen, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen:

**AWS-Konto**: Eine aktive AWS-Konto Person mit den entsprechenden Berechtigungen zum Erstellen und Verwalten der folgenden AWS Ressourcen:
+ AWS Lambda
+ AWS Identity and Access Management (ICH BIN)
+ Amazon OpenSearch Service (wenn Sie einen verwalteten OpenSearch Cluster verwenden)

**OpenSearch Cluster**:
+ Sie können einen vorhandenen selbstverwalteten OpenSearch Cluster oder einen verwalteten Dienst wie OpenSearch Service verwenden.
+ Wenn Sie OpenSearch Service verwenden, richten Sie Ihren OpenSearch Cluster ein, indem Sie den Anweisungen unter [Erste Schritte mit Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/gsg.html) in der OpenSearch Service-Dokumentation folgen.
+ Stellen Sie sicher, dass der OpenSearch Cluster über Ihre Lambda-Funktion zugänglich ist und dass er mit den erforderlichen Sicherheitseinstellungen wie Zugriffsrichtlinien, Verschlüsselung und Authentifizierung konfiguriert ist.
+ Konfigurieren Sie den OpenSearch Cluster mit den erforderlichen Indexzuordnungen und Einstellungen, um die Lambda-Telemetriedaten aufzunehmen. Weitere Informationen finden Sie in der Servicedokumentation unter [Laden von Streaming-Daten in Amazon OpenSearch OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/integrations.html).

**Netzwerkkonnektivität**:
+ Stellen Sie sicher, dass Ihre Lambda-Funktion über die erforderliche Netzwerkkonnektivität für den Zugriff auf den OpenSearch Cluster verfügt. Anleitungen zur Konfiguration der Virtual Private Cloud (VPC) -Einstellungen finden Sie in der Servicedokumentation unter [Starten Ihrer Amazon OpenSearch Service-Domains innerhalb einer VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html). OpenSearch 

**IAM-Rollen** und -Richtlinien:
+ Erstellen Sie eine IAM-Rolle mit den erforderlichen Berechtigungen für Ihre Lambda-Funktion, um auf den OpenSearch Cluster und auf Ihre darin gespeicherten Anmeldeinformationen zuzugreifen. AWS Secrets Manager
+ Fügen Sie der Rolle die entsprechenden IAM-Richtlinien hinzu, z. B. die `AWSLambdaBasicExecutionRole` Richtlinie und alle zusätzlichen Berechtigungen, die für die Interaktion erforderlich sind. OpenSearch
+ Stellen Sie sicher, dass die Ihrer Lambda-Funktion erteilten IAM-Berechtigungen das Schreiben von Daten in den OpenSearch Cluster ermöglichen. Informationen zur Verwaltung von IAM-Berechtigungen finden Sie unter [Definieren von Lambda-Funktionsberechtigungen mit einer Ausführungsrolle](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) in der Lambda-Dokumentation.

Kenntnisse in **Programmiersprachen**:
+ Sie benötigen Grundkenntnisse in Python (oder der Programmiersprache Ihrer Wahl), um den Beispielcode für die Lambda-Funktion und die Lambda-Erweiterung zu verstehen und zu ändern.

**Entwicklungsumgebung**:
+ Richten Sie eine lokale Entwicklungsumgebung mit den erforderlichen Tools und Abhängigkeiten für die Erstellung und Bereitstellung von Lambda-Funktionen und -Erweiterungen ein. 

**AWS CLI oder AWS-Managementkonsole**:
+ Installieren und konfigurieren Sie das [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) oder verwenden Sie das AWS-Managementkonsole mit den entsprechenden Anmeldeinformationen, um mit den erforderlichen zu interagieren AWS-Services.

**Überwachung und Protokollierung**:
+ Machen Sie sich mit bewährten Methoden zur Überwachung und Protokollierung vertraut AWS, einschließlich Diensten wie Amazon CloudWatch und AWS CloudTrail zu Überwachungs- und Prüfungszwecken.
+ Überprüfen Sie die CloudWatch Logs für Ihre Lambda-Funktion, um Fehler oder Ausnahmen im Zusammenhang mit der Lambda-Telemetrie-API-Integration zu identifizieren. Anleitungen zur Fehlerbehebung finden Sie in der [Lambda Telemetry API-Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html).

## Architektur
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-architecture"></a>

Dieses Muster verwendet OpenSearch Service, um Protokolle und Telemetriedaten zu speichern, die von Lambda-Funktionen generiert werden. Mit diesem Ansatz können Sie Protokolle schnell direkt in Ihren OpenSearch Cluster streamen, wodurch die Latenz und die Kosten reduziert werden, die mit der Verwendung von CloudWatch Logs als Vermittler verbunden sind.


| 
| 
| Ihr Lambda-Erweiterungscode kann Telemetrie entweder direkt über die OpenSearch API oder über eine [OpenSearch Clientbibliothek](https://opensearch.org/docs/latest/clients/index/) an den OpenSearch Service weiterleiten. Die Lambda-Erweiterung kann die von der OpenSearch API unterstützten Massenoperationen verwenden, um Telemetrieereignisse zu bündeln und sie in einer einzigen Anfrage an den OpenSearch Service zu senden. | 
| --- |

Das folgende Workflow-Diagramm veranschaulicht den Log-Workflow für Lambda-Funktionen, wenn Sie einen OpenSearch Cluster als Endpunkt verwenden.

![\[Workflow zum Senden von Telemetriedaten an einen OpenSearch Cluster.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/57fe8796-9f36-46cf-8304-f506242b9f04/images/283ccdcd-a0e1-40a2-a95a-3bd046bfa8ca.png)


Die Architektur umfasst die folgenden Komponenten:
+ Lambda-Funktion: Die serverlose Funktion, die während der Ausführung Protokolle und Telemetriedaten generiert.
+ Lambda-Erweiterung: Eine Python-basierte Erweiterung, die die Lambda-Telemetrie-API verwendet, um direkt in den Cluster zu integrieren. OpenSearch Diese Erweiterung läuft zusammen mit der Lambda-Funktion in derselben Ausführungsumgebung.
+ Lambda-Telemetrie-API: Die API, die es Lambda-Erweiterungen ermöglicht, Telemetriedaten, einschließlich Logs, Metriken und Traces, direkt an Überwachungs- und Beobachtungstools von Drittanbietern zu senden.
+ Amazon OpenSearch Service-Cluster: Ein verwalteter OpenSearch Cluster, der auf gehostet wird AWS. Dieser Cluster ist für die Aufnahme, Speicherung und Indizierung der Protokolldaten verantwortlich, die von der Lambda-Funktion über die Lambda-Erweiterung gestreamt werden.

Der Workflow besteht aus den folgenden Schritten:

1. Die Lambda-Funktion wird aufgerufen und generiert während ihrer Ausführung Protokolle und Telemetriedaten.

1. Die Lambda-Erweiterung wird zusammen mit der Funktion zur Erfassung der Protokolle und Telemetriedaten mithilfe der Lambda-Telemetrie-API ausgeführt.

1. Die Lambda-Erweiterung stellt eine sichere Verbindung mit dem OpenSearch Service-Cluster her und streamt die Protokolldaten in Echtzeit.

1. Der OpenSearch Service-Cluster erfasst, indexiert und speichert die Protokolldaten, um sie mithilfe von Tools wie Kibana oder anderen kompatiblen Anwendungen für die Suche, Analyse und Visualisierung verfügbar zu machen.

Durch die Umgehung von CloudWatch Logs und das direkte Senden von Protokolldaten an den OpenSearch Cluster bietet diese Lösung mehrere Vorteile:
+ Protokollstreaming und -analyse in Echtzeit ermöglichen eine schnellere Fehlerbehebung und verbesserte Beobachtbarkeit.
+ Geringere Latenz und potenzielle Aufbewahrungsbeschränkungen im Zusammenhang mit CloudWatch Protokollen.
+ Flexibilität, um die Lambda-Erweiterung anzupassen oder Ihre eigene Erweiterung für bestimmte Ausgabeformate oder zusätzliche Verarbeitung zu erstellen.
+ Integration mit den Such-, Analyse- und Visualisierungsfunktionen von OpenSearch Service für die Protokollanalyse und -überwachung.

Der Abschnitt [Epics](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics) enthält step-by-step Anweisungen zur Einrichtung der Lambda-Erweiterung, zur Konfiguration der Lambda-Funktion und zur Integration in den OpenSearch Service-Cluster. [Sicherheitsüberlegungen, Strategien zur Kostenoptimierung und Tipps zur Überwachung und Fehlerbehebung der Lösung finden Sie im Abschnitt Bewährte Methoden.](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices)

## Tools
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-tools"></a>

**AWS-Services**
+ [AWS Lambda](https://aws.amazon.com/lambda/) ist ein Datenverarbeitungsservice, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Lambda führt Ihren Code nur bei Bedarf aus und skaliert automatisch – von einigen Anforderungen pro Tag bis zu Tausenden pro Sekunde.
+ [Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/) ist ein vollständig verwalteter Service von AWS , der die Bereitstellung, den Betrieb und die Skalierung von OpenSearch Clustern in der Cloud vereinfacht.
+ [Lambda-Erweiterungen](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html) erweitern die Funktionalität Ihrer Lambda-Funktionen, indem sie zusätzlich benutzerdefinierten Code ausführen. Sie können Lambda-Erweiterungen verwenden, um Lambda in verschiedene Überwachungs-, Beobachtungs-, Sicherheits- und Governance-Tools zu integrieren.
+ AWS Lambda Mit der [Telemetrie-API](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) können Sie Erweiterungen verwenden, um erweiterte Überwachungs- und Beobachtbarkeitsdaten direkt von Lambda zu erfassen und an ein Ziel Ihrer Wahl zu senden.
+ [CloudFormation](https://aws.amazon.com/cloudformation/)hilft Ihnen dabei, Ihre AWS Ressourcen zu modellieren und einzurichten, sodass Sie weniger Zeit mit der Verwaltung dieser Ressourcen verbringen und sich mehr auf Ihre Anwendungen konzentrieren können.

**Code-Repositorien**
+ [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions) umfasst Demos und Beispielprojekte von AWS und AWS Partnern, die Ihnen den Einstieg in die Erstellung Ihrer eigenen Erweiterungen erleichtern.
+ Example [Lambda Telemetry Integrations for OpenSearch bietet ein Beispiel für](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) eine Lambda-Erweiterung, die zeigt, wie Logs von einer Lambda-Funktion an einen Cluster gesendet werden. OpenSearch 

**Andere Tools**
+ [OpenSearch](https://opensearch.org/faq/)ist eine verteilte Open-Source-Such- und Analysemaschine, die eine leistungsstarke Plattform für die Erfassung, Speicherung und Analyse großer Datenmengen bietet.
+ Kibana ist ein Open-Source-Tool zur Datenvisualisierung und -erkundung, das Sie mit verwenden können. OpenSearch Beachten Sie, dass die Implementierung von Visualisierung und Analyse den Rahmen dieses Musters sprengen würde. Weitere Informationen finden Sie in der [Kibana-Dokumentation](https://www.elastic.co/guide/en/kibana/current/index.html) und in anderen Ressourcen.

## Best Practices
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices"></a>

Beachten Sie bei der Integration der Lambda-Telemetrie-API die folgenden bewährten Methoden. OpenSearch

**Sicherheit und Zugriffskontrolle**
+ **Sichere Kommunikation**: Verschlüsseln Sie die gesamte Kommunikation zwischen Ihren Lambda-Funktionen und dem OpenSearch Cluster mithilfe von HTTPS. Konfigurieren Sie die erforderlichen SSL/TLS Einstellungen in Ihrer Lambda-Erweiterung und OpenSearch -Konfiguration.
+ **IAM-Berechtigungen:**
  + Erweiterungen werden in derselben Ausführungsumgebung wie die Lambda-Funktion ausgeführt, sodass sie dieselbe Zugriffsebene auf Ressourcen wie Dateisystem-, Netzwerk- und Umgebungsvariablen erben.
  + Gewähren Sie Ihren Lambda-Funktionen die mindestens erforderlichen IAM-Berechtigungen, um auf die Lambda-Telemetrie-API zuzugreifen und Daten in den Cluster zu schreiben. OpenSearch Verwenden Sie das [Prinzip der geringsten Rechte, um den Umfang der Berechtigungen](https://docs.aws.amazon.com/lambda/latest/operatorguide/least-privilege.html) einzuschränken.
+ **OpenSearch Zugriffskontrolle**: Implementieren Sie eine differenzierte Zugriffskontrolle in Ihrem OpenSearch Cluster, um den Zugriff auf sensible Daten zu beschränken. Verwenden Sie die integrierten Sicherheitsfunktionen wie Benutzerauthentifizierung, rollenbasierte Zugriffskontrolle und Berechtigungen auf Indexebene in. OpenSearch
+ **Vertrauenswürdige Erweiterungen**: Installieren Sie immer nur Erweiterungen aus einer vertrauenswürdigen Quelle. Verwenden Sie Infrastructure-as-Code-Tools (IaC) CloudFormation , um beispielsweise das Anhängen derselben Erweiterungskonfiguration, einschließlich IAM-Berechtigungen, an mehrere Lambda-Funktionen zu vereinfachen. IaC-Tools bieten auch ein Auditprotokoll der zuvor verwendeten Erweiterungen und Versionen.
+ **Umgang mit sensiblen Daten**: Vermeiden Sie beim Erstellen von Erweiterungen die Protokollierung sensibler Daten. Bereinigen Sie Payloads und Metadaten, bevor Sie sie protokollieren oder zu Prüfungszwecken speichern.

**Kostenoptimierung**
+ **Überwachung und Alarmierung**: Richten Sie Überwachungs- und Warnmechanismen ein, um die Datenmenge zu verfolgen, an die Ihre OpenSearch Lambda-Funktionen gesendet werden. Auf diese Weise können Sie potenzielle Kostenüberschreitungen erkennen und beheben.
+ **Aufbewahrung von Daten**: Überlegen Sie sich sorgfältig, welche Aufbewahrungsfrist für Ihre Lambda-Telemetriedaten angemessen ist. OpenSearch Längere Aufbewahrungsfristen können die Speicherkosten in die Höhe treiben. Bringen Sie also Ihre Anforderungen an die Beobachtbarkeit mit der Kostenoptimierung in Einklang.
+ **Komprimierung und Indizierung**: Aktivieren Sie die Datenkomprimierung und optimieren Sie Ihre OpenSearch Indexierungsstrategie, um den Speicherbedarf Ihrer Lambda-Telemetriedaten zu reduzieren.
+ **Geringere Abhängigkeit** von CloudWatch: Durch die direkte Integration der Lambda-Telemetrie-API können Sie Ihre Abhängigkeit von CloudWatch Protokollen potenziell reduzieren, was zu Kosteneinsparungen führen kann. OpenSearch Dies liegt daran, dass Sie mit der Lambda-Telemetrie-API Protokolle direkt an senden können OpenSearch, sodass die Daten nicht gespeichert und verarbeitet werden müssen. CloudWatch

**Skalierbarkeit und Zuverlässigkeit**
+ **Asynchrone Verarbeitung**: Verwenden Sie asynchrone Verarbeitungsmuster wie Amazon Simple Queue Service (Amazon SQS) oder Amazon Kinesis, um die Ausführung der Lambda-Funktion von der Datenaufnahme zu entkoppeln. OpenSearch Dies trägt dazu bei, die Reaktionsfähigkeit Ihrer Lambda-Funktionen aufrechtzuerhalten und die allgemeine Zuverlässigkeit des Systems zu verbessern.
+ **OpenSearch Cluster-Skalierung**: Überwachen Sie die Leistung und die Ressourcennutzung Ihres OpenSearch Clusters und skalieren Sie ihn nach Bedarf nach oben oder unten, um das zunehmende Volumen an Lambda-Telemetrie-Daten zu bewältigen.
+ **Failover und Disaster Recovery**: Implementieren Sie eine robuste Notfallwiederherstellungsstrategie für Ihren OpenSearch Cluster, einschließlich regelmäßiger Backups und der Möglichkeit, Daten im Falle eines Ausfalls schnell wiederherzustellen.

**Beobachtbarkeit und Überwachung**
+ **Dashboards und Visualisierungen**: Verwenden Sie Kibana oder andere Dashboard-Tools, um benutzerdefinierte Dashboards und Visualisierungen zu erstellen, die auf der Grundlage der enthaltenen Telemetriedaten Einblicke in die Leistung und den Zustand Ihrer Lambda-Funktionen bieten. OpenSearch
+ **Warnmeldungen und Benachrichtigungen**: Richten Sie Warnmeldungen und Benachrichtigungen ein, um Ihre Lambda-Funktionen proaktiv auf Anomalien, Fehler oder Leistungsprobleme zu überwachen. Integrieren Sie diese Warnungen und Benachrichtigungen in Ihre bestehenden Incident-Management-Prozesse.
+ **Rückverfolgung und Korrelation**: Stellen Sie sicher, dass Ihre Lambda-Telemetriedaten relevante Tracing-Informationen wie Anfrage IDs oder Korrelation enthalten IDs, um die end-to-end Beobachtbarkeit und Fehlerbehebung in Ihren verteilten serverlosen Anwendungen zu ermöglichen.

Wenn Sie diese bewährten Methoden befolgen, können Sie sicherstellen, dass Ihre Integration der Lambda-Telemetrie-API sicher, kostengünstig und skalierbar OpenSearch ist und umfassende Beobachtbarkeit für Ihre serverlosen Anwendungen bietet.

## Epen
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics"></a>

### Erstellen und implementieren Sie die Lambda-Erweiterungsebene
<a name="build-and-deploy-the-lam-extension-layer"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Laden Sie den Quellcode herunter. | Laden Sie die Beispielerweiterungen aus dem [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions) Repository herunter. | App-Entwickler, Cloud-Architekt | 
| Navigieren Sie zum Verzeichnis `python-example-telemetry-opensearch-extension`. | Das [AWS Lambda Erweiterungs-Repository](https://github.com/aws-samples/aws-lambda-extensions), das Sie heruntergeladen haben, enthält zahlreiche Beispiele für verschiedene Anwendungsfälle und Sprachlaufzeiten. Navigieren Sie zum Ordner [python-example-telemetry-opensearch-extension](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension), um die OpenSearch Python-Erweiterung zu verwenden, an die Protokolle gesendet OpenSearch werden. | App-Entwickler, Cloud-Architekt | 
| Fügen Sie Berechtigungen hinzu, um den Erweiterungsendpunkt auszuführen. | Führen Sie den folgenden Befehl aus, um den Erweiterungsendpunkt ausführbar zu machen:<pre>chmod +x python-example-telemetry-opensearch-extension/extension.py</pre> | App-Entwickler, Cloud-Architekt | 
| Installieren Sie die Abhängigkeiten der Erweiterungen lokal. | Führen Sie den folgenden Befehl aus, um lokale Abhängigkeiten für den Python-Code zu installieren:<pre>pip3 install -r python-example-telemetry-opensearch-extension/requirements.txt -t ./python-example-telemetry-opensearch-extension/</pre>Diese Abhängigkeiten werden zusammen mit dem Erweiterungscode bereitgestellt. | App-Entwickler, Cloud-Architekt | 
| Erstellen Sie ein ZIP-Paket für die Erweiterung, um sie als Ebene bereitzustellen. | Die Erweiterung.zip-Datei sollte ein Stammverzeichnis mit dem Namen`extensions/`, in dem sich die ausführbare Datei der Erweiterung befindet, und ein weiteres Stammverzeichnis mit dem Namen enthalten`python-example-telemetry-opensearch-extension/`, in dem sich die Kernlogik der Erweiterung und ihre Abhängigkeiten befinden.Erstellen Sie das ZIP-Paket für die Erweiterung:<pre>chmod +x extensions/python-example-telemetry-opensearch-extension<br />zip -r extension.zip extensions python-example-telemetry-opensearch-extension</pre> | App-Entwickler, Cloud-Architekt | 
| Stellen Sie die Erweiterung als Lambda-Schicht bereit. | Veröffentlichen Sie den Layer mithilfe Ihrer Erweiterung.zip-Datei und dem folgenden Befehl:<pre>aws lambda publish-layer-version \<br />--layer-name "python-example-telemetry-opensearch-extension" \<br />--zip-file "fileb://extension.zip"</pre> | App-Entwickler, Cloud-Architekt | 

### Integrieren Sie die Erweiterung in Ihre Funktion
<a name="integrate-the-extension-into-your-function"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Fügen Sie die Ebene zu Ihrer Funktion hinzu. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)Weitere Informationen zum Hinzufügen einer Ebene zu Ihrer Lambda-Funktion finden Sie in der [Lambda-Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/adding-layers.html). | App-Entwickler, Cloud-Architekt | 
| Legen Sie die Umgebungsvariablen für die Funktion fest. | Wählen Sie auf der Funktionsseite die Registerkarte **Konfiguration** und fügen Sie Ihrer Funktion die folgenden Umgebungsvariablen hinzu:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | App-Entwickler, Cloud-Architekt | 

### Fügen Sie Protokollierungsanweisungen hinzu und testen Sie Ihre Funktion
<a name="add-logging-statements-and-test-your-function"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Fügen Sie Ihrer Funktion Protokollierungsanweisungen hinzu. | Fügen Sie Ihrer Funktion Protokollierungsanweisungen hinzu, indem Sie einen der [integrierten Protokollierungsmechanismen](https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html) oder das Logging-Modul Ihrer Wahl verwenden. Hier sind Beispiele für das Protokollieren von Nachrichten in Python:<pre>print("Your Log Message Here")<br />logger = logging.getLogger(__name__)<br /><br />logger.info("Test Info Log.")<br />logger.error("Test Error Log.")</pre> | App-Entwickler, Cloud-Architekt | 
| Testen Sie Ihre Funktion. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)Wenn alles ordnungsgemäß funktioniert, sollte die Meldung „**Funktion ausgeführt: erfolgreich**“ angezeigt werden. | App-Entwickler, Cloud-Architekt | 

### Sehen Sie sich Ihre Logs an OpenSearch
<a name="view-your-logs-in-opensearch"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Fragen Sie Ihre Indizes ab. | Führen Sie in OpenSearch den folgenden Befehl aus, um Ihre Indizes abzufragen:<pre>SELECT * FROM index-name</pre>Ihre Protokolle sollten in den Abfrageergebnissen angezeigt werden. | Cloud-Architekt | 

## Fehlerbehebung
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Probleme mit der Verbindung | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 
| Fehler bei der Datenaufnahme | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 

## Zugehörige Ressourcen
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-resources"></a>
+ [Beispiel für Lambda-Telemetrie-Integrationen für OpenSearch](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) (Repository) GitHub 
+ [Erweitern Sie Lambda-Funktionen mithilfe von Lambda-Erweiterungen (Lambda-Dokumentation](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html))
+ [Lambda-Telemetrie-API](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) (Lambda-Dokumentation)
+ [Vorstellung der AWS Lambda Telemetrie-API](https://aws.amazon.com/blogs/compute/introducing-the-aws-lambda-telemetry-api/) (Blogbeitrag)AWS 
+ [Integration der AWS Lambda Telemetrie-API mit Prometheus und OpenSearch (Blogbeitrag](https://aws.amazon.com/blogs/opensource/integrating-the-aws-lambda-telemetry-api-with-prometheus-and-opensearch))AWS 

## Zusätzliche Informationen
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-additional"></a>

**Änderung der Protokollstruktur**

Die Erweiterung sendet Protokolle standardmäßig als verschachteltes Dokument OpenSearch an. Auf diese Weise können Sie verschachtelte Abfragen ausführen, um einzelne Spaltenwerte abzurufen.

Wenn die Standard-Protokollausgabe nicht Ihren spezifischen Anforderungen entspricht, können Sie sie anpassen, indem Sie den Quellcode der Lambda-Erweiterung ändern, die von bereitgestellt wird AWS. AWS ermutigt Kunden, die Ausgabe an ihre Geschäftsanforderungen anzupassen. Um die Protokollausgabe zu ändern, suchen Sie die `dispatch_to_opensearch` Funktion in der `telemetry_dispatcher.py` Datei im Quellcode der Erweiterung und nehmen Sie die erforderlichen Änderungen vor.

# Richten Sie einen serverlosen Mobilfunkrouter für eine zellenbasierte Architektur ein
<a name="serverless-cell-router-architecture"></a>

*Mian Tariq und Ioannis Lioupras, Amazon Web Services*

## Zusammenfassung
<a name="serverless-cell-router-architecture-summary"></a>

Als Einstiegspunkt in das System einer globalen zellbasierten Anwendung ist der Mobilfunkrouter dafür verantwortlich, Benutzer effizient den entsprechenden Zellen zuzuweisen und den Benutzern die Endpunkte zur Verfügung zu stellen. Der Mobilfunkrouter übernimmt Funktionen wie das Speichern von user-to-cell Zuordnungen, die Überwachung der Zellkapazität und das Anfordern neuer Zellen bei Bedarf. Es ist wichtig, die Funktionalität des Mobilfunkrouters bei möglichen Störungen aufrechtzuerhalten.

Das Design-Framework für Mobilfunkrouter in diesem Muster konzentriert sich auf Stabilität, Skalierbarkeit und allgemeine Leistungsoptimierung. Das Muster verwendet statisches Routing, bei dem Clients Endpunkte bei der ersten Anmeldung zwischenspeichern und direkt mit Zellen kommunizieren. Diese Entkopplung erhöht die Ausfallsicherheit des Systems, indem sie dazu beiträgt, die unterbrechungsfreie Funktionalität der zellbasierten Anwendung bei einem Ausfall des Mobilfunkrouters sicherzustellen.

Dieses Muster verwendet eine AWS CloudFormation Vorlage für die Bereitstellung der Architektur. Einzelheiten dazu, was die Vorlage bereitstellt, oder dazu, wie dieselbe Konfiguration mithilfe von bereitgestellt wird AWS-Managementkonsole, finden Sie im Abschnitt [Zusätzliche Informationen](#serverless-cell-router-architecture-additional).

**Wichtig**  
Die Demonstration, der Code und die CloudFormation Vorlage in diesem Muster dienen nur zur Erläuterung. Das zur Verfügung gestellte Material dient ausschließlich der Veranschaulichung des Entwurfsmusters und der Verständlichkeit. Die Demo und der Code sind nicht produktionsbereit und sollten nicht für Live-Produktionsaktivitäten verwendet werden. Von jedem Versuch, den Code oder die Demo in einer Produktionsumgebung zu verwenden, wird dringend abgeraten und erfolgt auf eigenes Risiko. Wir empfehlen, sich mit geeigneten Fachleuten in Verbindung zu setzen und gründliche Tests durchzuführen, bevor Sie dieses Muster oder eine seiner Komponenten in einer Produktionsumgebung implementieren.

## Voraussetzungen und Einschränkungen
<a name="serverless-cell-router-architecture-prereqs"></a>

**Voraussetzungen**
+ Ein aktives Amazon Web Services (AWS) -Konto
+ Die neueste Version von [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ [AWS-Anmeldeinformationen](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) mit den erforderlichen Berechtigungen zum Erstellen des CloudFormation Stacks, der AWS Lambda Funktionen und der zugehörigen Ressourcen

**Produktversionen**
+ Python 3.12

## Architektur
<a name="serverless-cell-router-architecture-architecture"></a>

Das folgende Diagramm zeigt ein allgemeines Design des Mobilfunkrouters.

![\[Der fünfstufige Prozess des Mobilfunkrouters.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/feb90b51-dd91-483b-b5a3-b0a5359686e3.png)


Das Diagramm durchläuft den folgenden Arbeitsablauf:

1. Der Benutzer kontaktiert Amazon API Gateway, das als Schnittstelle für die Mobilfunk-Router-API-Endpunkte dient.

1. Amazon Cognito kümmert sich um die Authentifizierung und Autorisierung.

1. Der AWS Step Functions Workflow besteht aus den folgenden Komponenten:
   + **Orchestrator** ‒ Wird `Orchestrator` verwendet AWS Step Functions , um einen Workflow oder eine Zustandsmaschine zu erstellen. Der Workflow wird durch die Cell-Router-API ausgelöst. Der `Orchestrator` führt Lambda-Funktionen basierend auf dem Ressourcenpfad aus.
   + **Dispatcher** ‒ Die `Dispatcher` Lambda-Funktion identifiziert und weist jedem registrierten neuen Benutzer eine statische Zelle zu. Die Funktion sucht nach der Zelle mit der geringsten Anzahl von Benutzern, weist sie dem Benutzer zu und gibt die Endpunkte zurück.
   + **Mapper** ‒ Der `Mapper` Vorgang verarbeitet die user-to-cell Zuordnungen innerhalb der `RoutingDB` Amazon DynamoDB DynamoDB-Datenbank, die mit der Vorlage erstellt wurde. CloudFormation Wenn die `Mapper` Funktion ausgelöst wird, stellt sie den bereits zugewiesenen Benutzern ihre Endpunkte zur Verfügung.
   + **Scaler** ‒ Die `Scaler` Funktion verfolgt die Zellbelegung und die verfügbare Kapazität. Bei Bedarf kann die `Scaler` Funktion über Amazon Simple Queue Service (Amazon SQS) eine Anfrage an die Bereitstellungs- und Bereitstellungsebene senden, um neue Zellen anzufordern.
   + **Validator** ‒ Die `Validator` Funktion validiert die Zellenendpunkte und erkennt mögliche Probleme.

1. Die `RoutingDB` speichert Zellinformationen und Attribute (API-Endpunkte, Status AWS-Region, Metriken).

1. Wenn die verfügbare Kapazität von Zellen einen Schwellenwert überschreitet, fordert der Mobilfunkrouter Bereitstellungs- und Bereitstellungsdienste über Amazon SQS an, um neue Zellen zu erstellen.

Wenn neue Zellen erstellt werden, `RoutingDB` wird es aus der Bereitstellungs- und Bereitstellungsebene aktualisiert. Dieser Prozess würde jedoch den Rahmen dieses Musters sprengen. Einen Überblick über die Voraussetzungen für den Entwurf zellenbasierter Architekturen und Einzelheiten zum in diesem Muster verwendeten Mobilfunkrouter-Design finden Sie im Abschnitt [Zusätzliche](#serverless-cell-router-architecture-additional) Informationen.

## Tools
<a name="serverless-cell-router-architecture-tools"></a>

**AWS-Services**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) unterstützt Sie bei der Erstellung, Veröffentlichung, Wartung, Überwachung und Sicherung von REST, HTTP und WebSocket APIs in jeder Größenordnung.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)hilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus über AWS-Konten und zu verwalten AWS-Regionen.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) bietet Authentifizierung, Autorisierung und Benutzerverwaltung für Web- und mobile Apps.
+ [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 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 Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.
+ [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.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)ist ein serverloser Orchestrierungsservice, mit dem Sie Lambda-Funktionen und andere Funktionen kombinieren können, um geschäftskritische Anwendungen AWS-Services zu erstellen.

**Andere Tools**
+ [Python](https://www.python.org/) ist eine Allzweck-Computerprogrammiersprache.

**Code-Repository**

Der Code für dieses Muster ist im GitHub [Serverless-Cell-Router-Repository](https://github.com/aws-samples/Serverless-Cell-Router/) verfügbar. 

## Best Practices
<a name="serverless-cell-router-architecture-best-practices"></a>

Bewährte Methoden für den Aufbau zellenbasierter Architekturen finden Sie in der folgenden AWS Well-Architected-Anleitung:
+ [Verringerung des Ausmaßes der Auswirkungen durch zellenbasierte Architektur](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/reducing-scope-of-impact-with-cell-based-architecture.html)
+ [AWS Säule der Zuverlässigkeit von Well-Architected Frameworks: REL1 0-BP04 Verwenden Sie Schottarchitekturen, um das Ausmaß der Auswirkungen zu begrenzen](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)

## Epen
<a name="serverless-cell-router-architecture-epics"></a>

### Bereiten Sie die Quelldateien vor
<a name="prepare-source-files"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Beispielcode-Repository. | Verwenden Sie den folgenden Befehl, um das Serverless-Cell-Router GitHub Repository auf Ihren Computer zu klonen:<pre>git clone https://github.com/aws-samples/Serverless-Cell-Router/</pre> | Developer | 
| Richten Sie AWS CLI temporäre Anmeldeinformationen ein. | Konfigurieren Sie die AWS CLI mit Anmeldeinformationen für Ihre AWS-Konto. In dieser exemplarischen Vorgehensweise werden temporäre Anmeldeinformationen verwendet, die über die AWS IAM Identity **Center-Befehlszeile oder die programmatische** Zugriffsoption bereitgestellt werden. Dadurch werden den `AWS_SESSION_TOKEN` AWS Umgebungsvariablen `AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`, und die entsprechenden Anmeldeinformationen für die Verwendung mit dem zugewiesen. AWS CLI | Developer | 
| Erstellen Sie einen S3-Bucket. | Erstellen Sie einen S3-Bucket, der zum Speichern und Zugreifen auf die Serverless-Cell-Router Lambda-Funktionen für die Bereitstellung durch die CloudFormation Vorlage verwendet wird. Verwenden Sie den folgenden Befehl, um den S3-Bucket zu erstellen: <pre>aws s3api create-bucket --bucket <bucket name> --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1</pre> | Developer | 
| Erstellen Sie ZIP-Dateien. | Erstellen Sie eine ZIP-Datei für jede Lambda-Funktion, die sich im Verzeichnis [Functions](https://github.com/aws-samples/Serverless-Cell-Router/tree/main/Functions) befindet. Diese ZIP-Dateien werden zur Bereitstellung der Lambda-Funktionen verwendet. Verwenden Sie auf einem Mac die folgenden Befehle: `zip`<pre>zip -j mapper-scr.zip Functions/Mapper.py<br />zip -j dispatcher-scr.zip Functions/Dispatcher.py<br />zip -j scaler-scr.zip Functions/Scaler.py<br />zip -j cp validator-scr.zip Functions/Validator.py<br />zip -j dynamodbDummyData-scr.zip Functions/DynamodbDummyData.py</pre> | Developer | 
| Kopieren Sie die ZIP-Dateien in den S3-Bucket. | Verwenden Sie die folgenden Befehle, um alle ZIP-Dateien der Lambda-Funktion in den S3-Bucket zu kopieren:<pre>aws s3 cp mapper-scr.zip s3://<bucket name><br />aws s3 cp dispatcher-scr.zip s3://<bucket name><br />aws s3 cp scaler-scr.zip s3://<bucket name><br />aws s3 cp validator-scr.zip s3://<bucket name><br />aws s3 cp dynamodbDummyData-scr.zip s3://<bucket name></pre> | Developer | 

### Erstellen Sie den Stack CloudFormation
<a name="create-the-cfn-stack"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie die CloudFormation Vorlage bereit. | Führen Sie den folgenden AWS CLI Befehl aus, um die CloudFormation Vorlage bereitzustellen:<pre>aws cloudformation create-stack --stack-name serverless.cell-router \<br />--template-body file://Serverless-Cell-Router-Stack-v10.yaml \<br />--capabilities CAPABILITY_IAM \<br />--parameters ParameterKey=LambdaFunctionMapperS3KeyParameterSCR,ParameterValue=mapper-scr.zip \<br />ParameterKey=LambdaFunctionDispatcherS3KeyParameterSCR,ParameterValue=dispatcher-scr.zip \<br />ParameterKey=LambdaFunctionScalerS3KeyParameterSCR,ParameterValue=scaler-scr.zip \<br />ParameterKey=LambdaFunctionAddDynamoDBDummyItemsS3KeyParameterSCR,ParameterValue=dynamodbDummyData-scr.zip \<br />ParameterKey=LambdaFunctionsS3BucketParameterSCR,ParameterValue=<S3 bucket storing lambda zip files> \<br />ParameterKey=CognitoDomain,ParameterValue=<Cognito Domain Name> \<br />--region <enter your aws region id, e.g. "eu-central-1"></pre> | Developer | 
| Überprüfen Sie den Fortschritt. | Melden Sie sich bei der an AWS-Managementkonsole, öffnen Sie die CloudFormation Konsole unter [https://console.aws.amazon.com/cloudformation/]()und überprüfen Sie den Fortschritt der Stack-Entwicklung. Wenn der Status lautet`CREATE_COMPLETE`, wurde der Stack erfolgreich bereitgestellt. | Developer | 

### Beurteilen und verifizieren
<a name="assess-and-verify"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Weisen Sie dem Benutzer Zellen zu. | Um das zu initiieren`Orchestrator`, führen Sie den folgenden curl-Befehl aus:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/cells</pre>Der `Orchestrator` löst die Ausführung der `Dispatcher` Funktion aus. Das `Dispatcher` wiederum überprüft die Existenz des Benutzers. Wenn der Benutzer gefunden wird, `Dispatcher` gibt der die zugehörige Zellen-ID und den zugehörigen Endpunkt URLs zurück. Wenn der Benutzer nicht gefunden wird, `Dispatcher` weist der dem Benutzer eine Zelle zu und sendet die Zellen-ID an die `Scaler` Funktion zur Bewertung der Restkapazität der zugewiesenen Zelle.Die Antwort der `Scaler` Funktion lautet wie folgt:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Developer | 
| Ruft Benutzerzellen ab. | Führen Sie `Orchestrator` den folgenden Befehl aus, um die `Mapper` Funktion auszuführen:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/mapper</pre>Das `Orchestrator` sucht nach der Zelle, die dem Benutzer zugewiesen ist, und gibt die Zellen-ID und URLs die folgende Antwort zurück:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Developer | 

### Bereinigen
<a name="clean-up"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bereinigen Sie die Ressourcen. | Gehen Sie wie folgt vor, um zusätzliche Gebühren auf Ihrem Konto zu vermeiden:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/serverless-cell-router-architecture.html) | App-Developer | 

## Zugehörige Ressourcen
<a name="serverless-cell-router-architecture-resources"></a>

**Referenzen**
+ [Statische Stabilität mithilfe von Availability Zones](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)
+ [Grenzen der AWS-Fehlerisolierung: Statische Stabilität](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html)

**Video**

[Physalia: Zellenbasierte Architektur für höhere Verfügbarkeit auf Amazon EBS](https://www.youtube.com/watch?v=6IknqRZMFic) 




[https://www.youtube-nocookie.com/embed/RZMFic6 Ich weiß es? Steuerungen = 0](https://www.youtube-nocookie.com/embed/6IknqRZMFic?controls=0)

## Zusätzliche Informationen
<a name="serverless-cell-router-architecture-additional"></a>

**Prämissen für den Entwurf zellbasierter Architektur**

Dieses Muster konzentriert sich zwar auf den Mobilfunkrouter, es ist jedoch wichtig, die gesamte Umgebung zu verstehen. Die Umgebung ist in drei separate Schichten gegliedert:
+ Die Routing-Schicht oder dünne Schicht, die den Mobilfunkrouter enthält
+ Die Zellschicht, bestehend aus verschiedenen Zellen
+ Die Bereitstellungs- und Bereitstellungsebene, die Zellen bereitstellt und die Anwendung bereitstellt

Jede Schicht behält ihre Funktionalität auch bei Beeinträchtigungen anderer Schichten bei. AWS-Konten dienen als Grenze zur Fehlerisolierung.

Das folgende Diagramm zeigt die Schichten auf einer hohen Ebene. Die Zellschicht und die Bereitstellungs- und Bereitstellungsschicht fallen nicht in den Geltungsbereich dieses Musters.

![\[Die Routing-Ebene, die Zellenebene mit mehreren Zellkonten und die Bereitstellungs- und Bereitstellungsschicht.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/137ac34d-43c3-42b6-95de-a365ff611ce8.png)


Weitere Informationen zur zellenbasierten Architektur finden Sie unter [Reduzierung des Wirkungsbereichs durch zellenbasierte Architektur: Zellenrouting](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-routing.html).

**Entwurfsmuster für Mobilfunkrouter**

Der Mobilfunkrouter ist eine von allen Zellen gemeinsam genutzte Komponente. Um mögliche Auswirkungen zu minimieren, ist es wichtig, dass die Routing-Ebene ein vereinfachtes und horizontal skalierbares Design verwendet, das so dünn wie möglich ist. Die Routing-Schicht dient als Einstiegspunkt des Systems und besteht nur aus den Komponenten, die für die effiziente Zuweisung von Benutzern zu den entsprechenden Zellen erforderlich sind. Komponenten innerhalb dieser Ebene sind nicht an der Verwaltung oder Erstellung von Zellen beteiligt.

Dieses Muster verwendet statisches Routing, was bedeutet, dass der Client die Endpunkte bei der ersten Anmeldung zwischenspeichert und anschließend eine direkte Kommunikation mit der Zelle herstellt. Regelmäßige Interaktionen zwischen dem Client und dem Mobilfunkrouter werden initiiert, um den aktuellen Status zu bestätigen oder Aktualisierungen abzurufen. Diese gezielte Entkopplung ermöglicht bestehenden Benutzern einen unterbrechungsfreien Betrieb bei einem Ausfall des Mobilfunkrouters und sorgt für kontinuierliche Funktionalität und Stabilität innerhalb des Systems.

In diesem Muster unterstützt der Mobilfunkrouter die folgenden Funktionen:
+ Abrufen von Zellendaten aus der Zellendatenbank in der Bereitstellungs- und Bereitstellungsschicht und Speichern oder Aktualisieren der lokalen Datenbank.
+ Zuweisen einer Zelle zu jedem neuen registrierten Benutzer der Anwendung mithilfe des Zellenzuweisungsalgorithmus.
+ Speichern der user-to-cells Zuordnung in der lokalen Datenbank.
+ Überprüfung der Kapazität der Zellen während der Benutzerzuweisung und Auslösen eines Ereignisses für den Automaten in der Bereitstellungs- und Bereitstellungsebene, um Zellen zu erstellen.
+ Verwendung des Algorithmus für Kriterien zur Zellenerstellung, um diese Funktionalität bereitzustellen.
+ Beantwortung der neu registrierten Benutzeranfragen durch Bereitstellung URLs der statischen Zellen. Diese URLs werden auf dem Client mit einer Gültigkeitsdauer (TTL) zwischengespeichert.
+ Beantwortung vorhandener Benutzeranfragen nach einer ungültigen URL durch Angabe einer neuen oder aktualisierten URL.

Sehen Sie sich die folgenden Komponenten und Schritte an, um mehr über den Demonstrations-Cellrouter zu erfahren, der anhand der CloudFormation Vorlage eingerichtet wurde:

1. Richten Sie den Amazon Cognito Cognito-Benutzerpool ein und konfigurieren Sie ihn.

1. Richten Sie die API Gateway für den Mobilfunkrouter ein und konfigurieren Sie sie.

1. Erstellen Sie eine DynamoDB-Tabelle.

1. Erstellen und konfigurieren Sie eine SQS-Warteschlange.

1. Implementieren Sie die`Orchestrator`.

1. Implementieren Sie die Lambda-Funktionen:`Dispatcher`,`Scaler`,`Mapper`,`Validator`.

1. Beurteilt und verifiziert.

Voraussetzung ist, dass die Bereitstellungs- und Bereitstellungsschicht bereits eingerichtet ist. Ihre Implementierungsdetails würden den Rahmen dieses Artefakts sprengen.

Da diese Komponenten anhand einer CloudFormation Vorlage eingerichtet und konfiguriert werden, werden die folgenden Schritte anschaulich und allgemein dargestellt. Es wird davon ausgegangen, dass Sie über die erforderlichen AWS Fähigkeiten verfügen, um die Einrichtung und Konfiguration abzuschließen.

*1. Einrichtung und Konfiguration des Amazon Cognito Cognito-Benutzerpools*

Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon Cognito Cognito-Konsole unter [https://console.aws.amazon.com/cognito/](). Richten Sie einen Amazon Cognito Cognito-Benutzerpool mit dem Namen`CellRouterPool`, mit App-Integration, gehosteter Benutzeroberfläche und den erforderlichen Berechtigungen ein und konfigurieren Sie ihn.

*2. Richten Sie die API Gateway für den Mobilfunkrouter ein und konfigurieren Sie sie*

Öffnen Sie die API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigateway/](). Richten Sie mithilfe eines Amazon Cognito-Autorisierers`CellRouter`, der in den Amazon Cognito-Benutzerpool integriert ist, eine API mit dem Namen, ein und konfigurieren Sie sie. `CellRouterPool` Implementieren Sie die folgenden Elemente:
+ `CellRouter`API-Ressourcen, einschließlich `POST` Methoden
+ Integration mit dem in Schritt 5 implementierten Step Functions-Workflow
+ Autorisierung durch den Amazon Cognito Cognito-Autorisierer
+ Zuordnungen von Integrationsanfragen und Antworten
+ Zuweisung der erforderlichen Berechtigungen

*3. Erstellen Sie eine DynamoDB-Tabelle*

Öffnen Sie die DynamoDB-Konsole unter und erstellen Sie eine Standard-DynamoDB-Tabelle [https://console.aws.amazon.com/dynamodb/](), die `tbl_router` mit der folgenden Konfiguration aufgerufen wird:
+ **Partitionsschlüssel** ‒ `marketId`
+ **Schlüssel sortieren** ‒ `cellId`
+ **Kapazitätsmodus** ‒ Bereitgestellt
+ **Point-in-time Wiederherstellung (PITR) ‒ Aus**

Erstellen Sie auf der Registerkarte **Indizes** einen globalen sekundären Index mit dem Namen. `marketId-currentCapacity-index` Die `Scaler` Lambda-Funktion verwendet den Index, um effizient nach der Zelle mit der niedrigsten Anzahl zugewiesener Benutzer zu suchen.

Erstellen Sie die Tabellenstruktur mit den folgenden Attributen:
+ `marketId`‒ Europa
+ `cellId`‒ cell-0002
+ `currentCapacity`‒ 2
+ `endPoint_1`‒ <your endpoint for the first Region>
+ `endPoint_2`‒ <your endpoint for the second Region>
+ `IsHealthy`‒ Stimmt
+ `maxCapacity`‒ 10
+ `regionCode_1` ‒ `eu-north-1`
+ `regionCode_2` ‒ `eu-central-1`
+ `userIds`‒ <your email address>

*4 Erstellen und konfigurieren Sie eine SQS-Warteschlange*

Öffnen Sie die Amazon SQS SQS-Konsole unter [https://console.aws.amazon.com/sqs/]()und erstellen Sie eine Standard-SQS-Warteschlange namens `CellProvisioning` konfiguriert mit **Amazon SQS SQS-Schlüsselverschlüsselung**.

*5. Implementieren Sie den Orchestrator*

Entwickeln Sie einen Step Functions Functions-Workflow, der als `Orchestrator` Grundlage für den Router dient. Der Workflow kann über die Cell-Router-API aufgerufen werden. Der Workflow führt die angegebenen Lambda-Funktionen basierend auf dem Ressourcenpfad aus. Integrieren Sie die Step-Funktion in die API-Gateway-API für den Mobilfunkrouter `CellRouter` und konfigurieren Sie die erforderlichen Berechtigungen zum Aufrufen der Lambda-Funktionen.

Das folgende Diagramm zeigt den Arbeitsablauf. Der Auswahlstatus ruft eine der Lambda-Funktionen auf. Wenn die Lambda-Funktion erfolgreich ist, endet der Workflow. Wenn die Lambda-Funktion fehlschlägt, wird fail state aufgerufen.

![\[Ein Diagramm des Workflows mit den vier Funktionen, der mit einem Fehlerstatus endet.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/cfe8d029-6f30-49a1-aaad-cad503bdcbae.png)


*6. Implementieren Sie die Lambda-Funktionen*

Implementieren Sie die `Validator` Funktionen `Dispatcher` `Mapper``Scaler`,, und. Wenn Sie jede Funktion in der Demonstration einrichten und konfigurieren, definieren Sie eine Rolle für die Funktion und weisen Sie die erforderlichen Berechtigungen für die Ausführung der erforderlichen Operationen in der DynamoDB-Tabelle zu. `tbl_router` Integrieren Sie zusätzlich jede Funktion in den Workflow. `Orchestrator`

*Dispatcher-Funktion*

Die `Dispatcher` Funktion ist dafür verantwortlich, jedem neuen registrierten Benutzer eine einzelne statische Zelle zu identifizieren und zuzuweisen. Wenn sich ein neuer Benutzer bei der globalen Anwendung registriert, wird die Anfrage an die `Dispatcher` Funktion weitergeleitet. Die Funktion verarbeitet die Anfrage anhand vordefinierter Bewertungskriterien wie den folgenden:

1. **Region** ‒ Wählen Sie die Zelle auf dem Markt aus, in der sich der Benutzer befindet. Wenn der Benutzer beispielsweise von Europa aus auf die globale Anwendung zugreift, wählen Sie eine Zelle aus, die AWS-Regionen in Europa verwendet wird.

1. **Nähe oder Latenz** ‒ Wählen Sie die Zelle aus, die dem Benutzer am nächsten ist. Wenn der Benutzer beispielsweise von Holland aus auf die Anwendung zugreift, berücksichtigt die Funktion eine Zelle, die Frankfurt und Irland verwendet. Die Entscheidung, welche Zelle sich am nächsten befindet, basiert auf Kennzahlen wie der Latenz zwischen dem Standort des Benutzers und den Zellenregionen. Bei diesem Beispielmuster werden die Informationen statisch aus der Bereitstellungs- und Bereitstellungsebene eingespeist.

1. **Health** ‒ Die `Dispatcher` Funktion überprüft anhand des angegebenen Zellstatus (Gesund = wahr oder falsch), ob die ausgewählte Zelle gesund ist.

1. **Kapazität** ‒ Die Benutzerverteilung basiert auf der *geringsten Anzahl von Benutzern in einer Zellenlogik*, sodass der Benutzer der Zelle mit der geringsten Benutzeranzahl zugewiesen wird.

**Anmerkung**  
Diese Kriterien dienen lediglich der Erläuterung dieses Beispielmusters. Für eine realitätsnahe Implementierung eines Mobilfunkrouters können Sie verfeinerte und anwendungsfallorientierte Kriterien definieren.

`Orchestrator`Ruft die Dispatcher-Funktion auf, um Zellen Benutzer zuzuweisen. In dieser Demofunktion ist der Marktwert ein statischer Parameter, der als definiert ist. `europe`

Die `Dispatcher` Funktion bewertet, ob dem Benutzer bereits eine Zelle zugewiesen ist. Wenn die Zelle bereits zugewiesen ist, gibt die `Dispatcher` Funktion die Endpunkte der Zelle zurück. Wenn dem Benutzer keine Zelle zugewiesen ist, sucht die Funktion nach der Zelle mit der geringsten Anzahl von Benutzern, weist sie dem Benutzer zu und gibt die Endpunkte zurück. Die Effizienz der Zellensuchanfrage wird durch die Verwendung des globalen sekundären Indexes optimiert.

*Mapper-Funktion*

Die `Mapper` Funktion überwacht die Speicherung und Wartung von user-to-cell Zuordnungen in der Datenbank. Jedem registrierten Benutzer wird eine einzelne Zelle zugewiesen. Jede Zelle hat zwei unterschiedliche URLs — eine für jede AWS-Region. Diese dienen als API-Endpunkte, die auf API Gateway gehostet werden, und URLs fungieren als eingehende Punkte für die globale Anwendung.

Wenn die `Mapper` Funktion eine Anfrage von der Client-Anwendung empfängt, führt sie eine Abfrage in der DynamoDB-Tabelle aus, `tbl_router` um die user-to-cell Zuordnung abzurufen, die der angegebenen E-Mail-ID zugeordnet ist. Wenn sie eine zugewiesene Zelle findet, stellt die `Mapper` Funktion umgehend die beiden Zellen der Zelle bereit. URLs Die `Mapper` Funktion überwacht außerdem aktiv Änderungen an der Zelle URLs und veranlasst Benachrichtigungen oder Aktualisierungen der Benutzereinstellungen.

*Scaler-Funktion*

Die `Scaler` Funktion verwaltet die Restkapazität der Zelle. Bei jeder neuen Benutzerregistrierungsanfrage bewertet die `Scaler` Funktion die verfügbare Kapazität der Zelle, der die `Dispatcher` Funktion dem Benutzer zugewiesen hat. Wenn die Zelle ihr vorgegebenes Limit gemäß den angegebenen Bewertungskriterien erreicht hat, initiiert die Funktion eine Anfrage über eine Amazon SQS SQS-Warteschlange an die Bereitstellungs- und Bereitstellungsebene und fordert die Bereitstellung und Bereitstellung neuer Zellen an. Die Skalierung von Zellen kann auf der Grundlage einer Reihe von Bewertungskriterien wie den folgenden durchgeführt werden:

1. **Maximale Benutzeranzahl** ‒ Jede Zelle kann eine maximale Anzahl von 500 Benutzern haben.

1. **Pufferkapazität** ‒ Die Pufferkapazität jeder Zelle beträgt 20 Prozent, was bedeutet, dass jeder Zelle jederzeit 400 Benutzern zugewiesen werden kann. Die verbleibenden 20 Prozent der Pufferkapazität sind für future Anwendungsfälle und die Behandlung unerwarteter Szenarien reserviert (z. B. wenn die Dienste zur Zellenerstellung und -bereitstellung nicht verfügbar sind).

1. **Zellenerstellung** ‒ Sobald eine bestehende Zelle 70 Prozent der Kapazität erreicht, wird eine Anforderung zur Erstellung einer zusätzlichen Zelle ausgelöst.

**Anmerkung**  
Diese Kriterien dienen nur zur Erläuterung dieses Beispielmusters. Für eine realitätsnahe Implementierung eines Mobilfunkrouters können Sie verfeinerte und anwendungsfallorientierte Kriterien definieren.

Der `Scaler` Demonstrationscode wird ausgeführt, `Orchestrator` nachdem der dem neu registrierten Benutzer `Dispatcher` erfolgreich eine Zelle zugewiesen hat. Nach Erhalt der Zellen-ID von bewertet der anhand vordefinierter Bewertungskriterien`Dispatcher`, ob die angegebene Zelle über ausreichend Kapazität für weitere Benutzer verfügt. `Scaler` Wenn die Kapazität der Zelle nicht ausreicht, sendet die `Scaler` Funktion eine Nachricht an den Amazon SQS-Service. Diese Nachricht wird vom Service innerhalb der Bereitstellungs- und Bereitstellungsebene abgerufen, wodurch die Bereitstellung einer neuen Zelle eingeleitet wird.

**Validator-Funktion**

Die `Validator` Funktion identifiziert und behebt Probleme im Zusammenhang mit dem Zellzugriff. Wenn sich ein Benutzer bei der globalen Anwendung anmeldet, ruft die Anwendung die Zellen URLs aus den Benutzerprofileinstellungen ab und leitet Benutzeranfragen an eine der beiden zugewiesenen Regionen innerhalb der Zelle weiter. Wenn auf sie nicht zugegriffen URLs werden kann, kann die Anwendung eine validierte URL-Anfrage an den Mobilfunkrouter senden. Der Mobilfunkrouter ruft die `Orchestrator` auf. `Validator` Das `Validator` initiiert den Validierungsprozess. Die Validierung kann neben anderen Prüfungen Folgendes umfassen:
+ Querverweise auf die URLs in der Datenbank URLs gespeicherte Zelle in der Anfrage, um mögliche Aktualisierungen zu identifizieren und zu verarbeiten
+ Durchführung einer gründlichen Zustandsprüfung (z. B. eine `HTTP GET` Anfrage an den Endpunkt der Zelle)

Abschließend liefert die `Validator` Funktion Antworten auf Anfragen von Kundenanwendungen und gibt den Validierungsstatus sowie alle erforderlichen Korrekturmaßnahmen an.

Die wurde `Validator` entwickelt, um die Benutzererfahrung zu verbessern. Stellen Sie sich ein Szenario vor, in dem bestimmte Benutzer Schwierigkeiten haben, auf die globale Anwendung zuzugreifen, weil aufgrund eines Vorfalls Zellen vorübergehend nicht verfügbar sind. Anstatt generische Fehler anzuzeigen, kann die `Validator` Funktion aufschlussreiche Schritte zur Problembehebung bereitstellen. Diese Schritte können die folgenden Aktionen beinhalten:
+ Informieren Sie die Benutzer über den Vorfall.
+ Geben Sie eine ungefähre Wartezeit bis zur Verfügbarkeit des Dienstes an.
+ Geben Sie eine Support-Kontaktnummer an, um weitere Informationen zu erhalten.

Der Demo-Code für die `Validator` Funktion überprüft, ob die vom Benutzer angegebene Zelle URLs in der Anfrage mit den in der Tabelle gespeicherten Datensätzen übereinstimmt. `tbl_router` Die `Validator` Funktion überprüft auch, ob die Zellen gesund sind.

# Richten Sie den privaten Zugriff auf einen Amazon S3 S3-Bucket über einen VPC-Endpunkt ein
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint"></a>

*Martin Maritsch, Nicolas Jacob Baer, Gabriel Rodriguez Garcia, Shukhrat Khodjaev, Mohan Gowda Purushothama und Joaquin Rinaudo, Amazon Web Services*

## Zusammenfassung
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-summary"></a>

In Amazon Simple Storage Service (Amazon S3) können Sie mit Presigned URLs Dateien beliebiger Größe für Zielbenutzer freigeben. Standardmäßig URLs sind vorsignierte Amazon S3 innerhalb eines Ablaufzeitfensters über das Internet zugänglich, sodass sie bequem zu verwenden sind. In Unternehmensumgebungen ist jedoch häufig der Zugriff auf Amazon S3 erforderlich, der so vorkonfiguriert ist URLs , dass er nur auf ein privates Netzwerk beschränkt ist.

Dieses Muster stellt eine serverlose Lösung für die sichere Interaktion mit S3-Objekten dar, indem vorsignierte Daten URLs aus einem privaten Netzwerk ohne Internetdurchquerung verwendet werden. In der Architektur greifen Benutzer über einen internen Domainnamen auf einen Application Load Balancer zu. Der Datenverkehr wird intern über Amazon API Gateway und einen Virtual Private Cloud (VPC) -Endpunkt für den S3-Bucket geleitet. Die AWS Lambda Funktion generiert vorsignierte URLs Dateidownloads über den privaten VPC-Endpunkt, wodurch die Sicherheit und der Datenschutz für sensible Daten verbessert werden.

## Voraussetzungen und Einschränkungen
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-prereqs"></a>

**Voraussetzungen**
+ Eine VPC, die ein Subnetz umfasst AWS-Konto , das in einem mit dem Unternehmensnetzwerk verbunden ist (z. B. über AWS Direct Connect).

**Einschränkungen**
+ Der S3-Bucket muss denselben Namen wie die Domain haben. Wir empfehlen daher, die [Amazon S3 S3-Bucket-Namensregeln zu überprüfen.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)
+ Diese Beispielarchitektur beinhaltet keine Überwachungsfunktionen für die bereitgestellte Infrastruktur. Wenn Ihr Anwendungsfall eine Überwachung erfordert, sollten Sie das Hinzufügen von [AWS Überwachungsdiensten](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html) in Betracht ziehen.
+ Diese Beispielarchitektur beinhaltet keine Eingabevalidierung. Wenn Ihr Anwendungsfall eine Eingabevalidierung und ein erhöhtes Sicherheitsniveau erfordert, sollten Sie dies [AWS WAF zum Schutz Ihrer API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) in Betracht ziehen.
+ Diese Beispielarchitektur beinhaltet keine Zugriffsprotokollierung mit dem Application Load Balancer. Wenn Ihr Anwendungsfall eine Zugriffsprotokollierung erfordert, sollten Sie die Aktivierung der [Load Balancer-Zugriffsprotokolle](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html) in Betracht ziehen.

**Versionen**
+ Python-Version 3.11 oder höher
+ Terraform Version 1.6 oder höher

## Architektur
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-architecture"></a>

**Zieltechnologie-Stack**

Die folgenden AWS-Services werden im Zieltechnologie-Stack verwendet:
+ **Amazon S3** ist der zentrale Speicherservice, der für das sichere Hochladen, Herunterladen und Speichern von Dateien verwendet wird.
+ **Amazon API Gateway** stellt Ressourcen und Endpunkte für die Interaktion mit dem S3-Bucket zur Verfügung. Dieser Service spielt eine Rolle bei der Generierung von Daten, die URLs für das Herunterladen oder Hochladen vorkonfiguriert sind.
+ **AWS Lambda**generiert vorsignierte Dateien URLs für das Herunterladen von Dateien von Amazon S3. Die Lambda-Funktion wird von API Gateway aufgerufen.
+ **Amazon VPC** stellt Ressourcen innerhalb einer VPC bereit, um das Netzwerk zu isolieren. Die VPC umfasst Subnetze und Routingtabellen zur Steuerung des Datenverkehrs.
+ Der **Application Load Balancer** leitet eingehenden Datenverkehr entweder an API Gateway oder an den VPC-Endpunkt des S3-Buckets weiter. Es ermöglicht Benutzern aus dem Unternehmensnetzwerk den internen Zugriff auf Ressourcen.
+ Der **VPC-Endpunkt für Amazon S3** ermöglicht die direkte, private Kommunikation zwischen Ressourcen in der VPC und Amazon S3, ohne das öffentliche Internet zu durchqueren.
+ **AWS Identity and Access Management (IAM)** steuert den Zugriff auf Ressourcen. AWS Berechtigungen werden eingerichtet, um sichere Interaktionen mit der API und anderen Diensten zu gewährleisten.

**Zielarchitektur**

![\[Einrichtung eines privaten Zugriffs auf einen S3-Bucket über einen VPC-Endpoint\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/683ca6a1-789c-4444-bcbf-e4e80d253df3/images/1ca7ee17-d346-4eb9-bf61-ccf42528a401.png)


Das Diagramm veranschaulicht folgende Vorgänge:

1. Benutzer aus dem Unternehmensnetzwerk können über einen internen Domainnamen auf den Application Load Balancer zugreifen. Wir gehen davon aus, dass eine Verbindung zwischen dem Unternehmensnetzwerk und dem Intranet-Subnetz im besteht AWS-Konto (z. B. über eine Direct Connect Verbindung).

1. Der Application Load Balancer leitet eingehenden Datenverkehr entweder an API Gateway weiter, um Daten zu generieren, die für das Herunterladen oder Hochladen von Daten auf Amazon S3 vorsigniert URLs sind, oder an den VPC-Endpunkt des S3-Buckets. In beiden Szenarien werden Anfragen intern weitergeleitet und müssen nicht über das Internet geleitet werden.

1. API Gateway stellt Ressourcen und Endpunkte für die Interaktion mit dem S3-Bucket zur Verfügung. In diesem Beispiel stellen wir einen Endpunkt zum Herunterladen von Dateien aus dem S3-Bucket bereit. Dieser könnte jedoch erweitert werden, um auch Upload-Funktionen bereitzustellen.

1. Die Lambda-Funktion generiert die vorsignierte URL zum Herunterladen einer Datei von Amazon S3, indem sie den Domainnamen des Application Load Balancer anstelle der öffentlichen Amazon S3 S3-Domain verwendet.

1. Der Benutzer erhält die vorsignierte URL und verwendet sie, um die Datei mithilfe des Application Load Balancer von Amazon S3 herunterzuladen. Der Load Balancer enthält eine Standardroute, um Traffic, der nicht für die API bestimmt ist, an den VPC-Endpunkt des S3-Buckets zu senden.

1. Der VPC-Endpunkt leitet die vorsignierte URL mit dem benutzerdefinierten Domainnamen an den S3-Bucket weiter. Der S3-Bucket muss denselben Namen wie die Domain haben.

**Automatisierung und Skalierung**

Dieses Muster verwendet Terraform, um die Infrastruktur aus dem Code-Repository in einem bereitzustellen. AWS-Konto

## Tools
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-tools"></a>

**Tools**
+ [Python](https://www.python.org/) ist eine Allzweck-Computerprogrammiersprache.
+ [Terraform](https://www.terraform.io/) ist ein IaC-Tool (Infrastructure as Code) HashiCorp , mit dem Sie Cloud- und lokale Ressourcen erstellen und verwalten können.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer AWS Befehlszeilen-Shell mit Diensten interagieren können.

**Code-Repository**

Der Code für dieses Muster ist in einem GitHub Repository unter [https://github.com/aws-samples/private-s3-vpce](https://github.com/aws-samples/private-s3-vpce) verfügbar.

## Best Practices
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-best-practices"></a>

Die Beispielarchitektur für dieses Muster verwendet [IAM-Berechtigungen, um den Zugriff auf die API zu steuern](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html). Jeder, der über gültige IAM-Anmeldeinformationen verfügt, kann die API aufrufen. Wenn Ihr Anwendungsfall ein komplexeres Autorisierungsmodell erfordert, möchten Sie möglicherweise [einen anderen Zugriffskontrollmechanismus verwenden](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html).

## Epen
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-epics"></a>

### Stellen Sie die Lösung in einem bereit AWS-Konto
<a name="deploy-the-solution-in-an-aws-account"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Besorgen Sie sich AWS Anmeldeinformationen. | Überprüfen Sie Ihre AWS Anmeldeinformationen und Ihren Zugang zu Ihrem Konto. Anweisungen finden Sie in der AWS CLI Dokumentation unter [Konfiguration und Einstellungen für die Anmeldeinformationsdatei](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html). | AWS DevOps, Allgemeines AWS | 
| Klonen Sie das Repository | Klonen Sie das mit diesem Muster bereitgestellte GitHub Repository:<pre>git clone https://github.com/aws-samples/private-s3-vpce</pre> | AWS DevOps, Allgemeines AWS | 
| Variablen konfigurieren. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, Allgemeines AWS | 
| Lösung bereitstellen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, Allgemeines AWS | 

### Testen der Lösung
<a name="test-the-solution"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Testdatei. | Laden Sie eine Datei auf Amazon S3 hoch, um ein Testszenario für den Dateidownload zu erstellen. Sie können die [Amazon S3 S3-Konsole](https://console.aws.amazon.com/s3/) oder den folgenden AWS CLI Befehl verwenden:<pre>aws s3 cp /path/to/testfile s3://your-bucket-name/testfile</pre> | AWS DevOps, Allgemeines AWS | 
| Testen Sie die Funktionalität vordefinierter URLs. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, Allgemeines AWS | 
| Bereinigen Sie. | Stellen Sie sicher, dass Sie die Ressourcen entfernen, wenn sie nicht mehr benötigt werden:<pre>terraform destroy</pre> | AWS DevOps, Allgemeines AWS | 

## Fehlerbehebung
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| S3-Objektschlüsselnamen mit Sonderzeichen wie Nummernzeichen (\$1) unterbrechen URL-Parameter und führen zu Fehlern. | Codieren Sie die URL-Parameter ordnungsgemäß und stellen Sie sicher, dass der Name des S3-Objektschlüssels den [Amazon S3 S3-Richtlinien entspricht](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html). | 

## Zugehörige Ressourcen
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-resources"></a>

Amazon S3:
+ [Objekte mit vorsignierten teilen URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html)
+ [Steuern des Zugriffs von VPC-Endpunkten aus mit Bucket-Richtlinien](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html)

Amazon API Gateway:
+ [Verwenden Sie VPC-Endpunktrichtlinien für private Zwecke APIs in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-vpc-endpoint-policies.html)

Application Load Balancer:
+ [Hosten interner statischer HTTPS-Websites mit ALB, S3 und PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) (AWS Blogbeitrag)

# Fehlerbehebung bei Zuständen mithilfe AWS Step Functions von Amazon Bedrock
<a name="troubleshooting-states-in-aws-step-functions"></a>

*Aniket Kurzadkar und Sangam Kushwaha, Amazon Web Services*

## Zusammenfassung
<a name="troubleshooting-states-in-aws-step-functions-summary"></a>

AWS Step Functions Funktionen zur Fehlerbehandlung können Ihnen helfen, einen Fehler zu erkennen, der während eines bestimmten Status in einem [Workflow](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html) auftritt, aber es kann dennoch schwierig sein, die Ursache eines Fehlers zu finden und zu debuggen. Dieses Muster adressiert diese Herausforderung und zeigt, wie Amazon Bedrock Ihnen helfen kann, Fehler zu beheben, die während Status in Step Functions auftreten. 

Step Functions bietet Workflow-Orchestrierung und erleichtert es Entwicklern, Prozesse zu automatisieren. Step Functions bietet auch Funktionen zur Fehlerbehandlung, die folgende Vorteile bieten:
+ Entwickler können robustere Anwendungen entwickeln, die nicht komplett ausfallen, wenn etwas schief geht.
+ Workflows können bedingte Logik enthalten, um verschiedene Arten von Fehlern unterschiedlich zu behandeln.
+ Das System kann fehlgeschlagene Operationen automatisch wiederholen, möglicherweise mit exponentiellem Backoff.
+ Für Fehlerszenarien können alternative Ausführungspfade definiert werden, sodass der Workflow angepasst und die Verarbeitung fortgesetzt werden kann.

Wenn in einem Step Functions-Workflow ein Fehler auftritt, zeigt dieses Muster, wie die Fehlermeldung und der Kontext an ein Foundation Model (FM) wie Claude 3 gesendet werden können, das von Step Functions unterstützt wird. Das FM kann den Fehler analysieren, ihn kategorisieren und mögliche Schritte zur Behebung vorschlagen.

## Voraussetzungen und Einschränkungen
<a name="troubleshooting-states-in-aws-step-functions-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto
+ Grundlegendes Verständnis von [AWS Step Functions und Arbeitsabläufen](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html)
+ Amazon Bedrock [API-Konnektivität](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html)

**Einschränkungen**
+ Sie können den Ansatz dieses Musters für verschiedene AWS-Services Zwecke verwenden. Die Ergebnisse können jedoch je nach der von AWS Lambda Amazon Bedrock erstellten Aufforderung variieren.
+ Einige AWS-Services sind nicht in allen AWS-Regionen verfügbar. Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie unter [AWS-Services nach Regionen](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Informationen zu bestimmten Endpunkten finden Sie unter [Service-Endpunkte und Kontingente](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html). Wählen Sie dort den Link für den Service aus.

## Architektur
<a name="troubleshooting-states-in-aws-step-functions-architecture"></a>

Das folgende Diagramm zeigt den Workflow und die Architekturkomponenten für dieses Muster.

![\[Workflow für die Fehlerbehandlung und Benachrichtigung mit Step Functions, Amazon Bedrock und Amazon SNS.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/78f86c74-c9de-4562-adcc-105b87a77a54/images/d8eda499-ea1d-45e5-8a36-e04a44ad5c4b.png)


Das Diagramm zeigt den automatisierten Workflow für die Fehlerbehandlung und Benachrichtigung in einer Step Functions Functions-Zustandsmaschine:

1. Der Entwickler startet die Ausführung einer Zustandsmaschine.

1. Die Step Functions Functions-Zustandsmaschine beginnt mit der Verarbeitung ihrer Zustände. Es gibt zwei mögliche Ergebnisse:
   + (a) Wenn alle Staaten erfolgreich ausgeführt wurden, wird der Workflow direkt an Amazon SNS weitergeleitet, wo eine E-Mail-Erfolgsmeldung gesendet wird.
   + (b) Wenn ein Status ausfällt, wechselt der Workflow zur Lambda-Funktion zur Fehlerbehandlung.

1. Im Falle eines Fehlers passiert Folgendes:
   + (a) Die Lambda-Funktion (Fehlerhandler) wird ausgelöst. Die Lambda-Funktion extrahiert die Fehlermeldung aus den Ereignisdaten, die ihr von der Step Functions Functions-Zustandsmaschine übergeben wurden. Anschließend bereitet die Lambda-Funktion eine Aufforderung auf der Grundlage dieser Fehlermeldung vor und sendet die Aufforderung an Amazon Bedrock. In der Aufforderung werden Lösungen und Vorschläge für den spezifischen aufgetretenen Fehler angefordert.
   + (b) Amazon Bedrock, das das generative KI-Modell hostet, verarbeitet die Eingabeaufforderung. (Dieses Muster verwendet das Anthropic Claude 3 Foundation Model (FM), eines von vielen, FMs die Amazon Bedrock unterstützt.) Das KI-Modell analysiert den Fehlerkontext. Anschließend generiert das Modell eine Antwort, die Erklärungen zur Ursache des Fehlers, mögliche Lösungen zur Behebung des Fehlers und Vorschläge zur Vermeidung future Fehler enthalten kann.

     Amazon Bedrock gibt seine KI-generierte Antwort an die Lambda-Funktion zurück. Die Lambda-Funktion verarbeitet die Antwort und formatiert sie möglicherweise oder extrahiert wichtige Informationen. Dann sendet die Lambda-Funktion die Antwort an die Ausgabe der Zustandsmaschine.

1. Nach der Fehlerbehandlung oder erfolgreicher Ausführung wird der Workflow abgeschlossen, indem Amazon SNS veranlasst wird, eine E-Mail-Benachrichtigung zu senden.

## Tools
<a name="troubleshooting-states-in-aws-step-functions-tools"></a>

**AWS-Services**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) ist ein vollständig verwalteter Service, der Ihnen leistungsstarke Basismodelle (FMs) von führenden KI-Startups und Amazon über eine einheitliche API zur Verfügung stellt.
+ [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. Er 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 (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) unterstützt Sie bei der Koordination und Verwaltung des Nachrichtenaustauschs zwischen Herausgebern und Kunden, einschließlich Webservern und E-Mail-Adressen.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)ist ein serverloser Orchestrierungsservice, mit dem Sie AWS Lambda Funktionen und andere Funktionen kombinieren können, um geschäftskritische Anwendungen AWS-Services zu erstellen.

## Best Practices
<a name="troubleshooting-states-in-aws-step-functions-best-practices"></a>
+ Angesichts der Tatsache, dass Amazon Bedrock ein generatives KI-Modell ist, das aus trainierten Daten lernt, verwendet es diese Daten auch, um Kontext zu trainieren und zu generieren. Es hat sich bewährt, alle privaten Informationen zu verbergen, die zu Problemen mit Datenlecks führen könnten. 
+ Obwohl generative KI wertvolle Erkenntnisse liefern kann, sollten kritische Entscheidungen zur Fehlerbehandlung immer noch unter menschlicher Aufsicht getroffen werden, insbesondere in Produktionsumgebungen.

## Epen
<a name="troubleshooting-states-in-aws-step-functions-epics"></a>

### Erstellen Sie eine Zustandsmaschine für Ihren Workflow
<a name="create-a-state-machine-for-your-workflow"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen -Zustandsautomaten. | Gehen Sie wie folgt vor, um eine Zustandsmaschine zu erstellen, die für Ihren Workflow geeignet ist:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Erstellen einer Lambda-Funktion
<a name="create-a-lam-function"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Lambda-Funktion.  | Gehen Sie wie folgt vor, um eine Lambda-Funktion zu erstellen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 
| Richten Sie die erforderliche Logik im Lambda-Code ein. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html)<pre>client = boto3.client(<br />        service_name="bedrock-runtime", region_name="selected-region"<br />    )<br /><br />    # Invoke Claude 3 with the text prompt<br />    model_id = "your-model-id" # Select your Model ID, Based on the Model Id, Change the body format<br /><br />    try:<br />        response = client.invoke_model(<br />            modelId=model_id,<br />            body=json.dumps(<br />                {<br />                    "anthropic_version": "bedrock-2023-05-31",<br />                    "max_tokens": 1024,<br />                    "messages": [<br />                        {<br />                            "role": "user",<br />                            "content": [{"type": "text", "text": prompt}],<br />                        }<br />                    ],<br />                }<br />            ),<br />        )<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Integrieren Sie Step Functions mit Lambda
<a name="integrate-sfn-with-lam"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie Lambda für die Behandlung von Fehlern in Step Functions ein. | Gehen Sie wie folgt vor, um Step Functions so einzurichten, dass Fehler behandelt werden, ohne den Arbeitsablauf zu unterbrechen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

## Fehlerbehebung
<a name="troubleshooting-states-in-aws-step-functions-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Lambda kann nicht auf die Amazon Bedrock API zugreifen (nicht zur Ausführung autorisiert) | Dieser Fehler tritt auf, wenn die Lambda-Rolle nicht berechtigt ist, auf die Amazon Bedrock-API zuzugreifen. Um dieses Problem zu beheben, fügen Sie die `AmazonBedrockFullAccess` Richtlinie für die Lambda-Rolle hinzu. Weitere Informationen finden Sie [AmazonBedrockFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html)im *Referenzhandbuch für AWS verwaltete Richtlinien.* | 
| Lambda-Timeout-Fehler | Manchmal kann es je nach Aufforderung mehr als 30 Sekunden dauern, bis eine Antwort generiert und zurückgesendet wird. Erhöhen Sie die Konfigurationszeit, um dieses Problem zu beheben. Weitere Informationen finden [Sie unter Configure Lambda function timeout](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html) im *AWS Lambda Developer* Guide. | 

## Zugehörige Ressourcen
<a name="troubleshooting-states-in-aws-step-functions-resources"></a>
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [Amazon Bedrock API-Zugriff](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html)
+ [Erstellen Sie Ihre erste Lambda-Funktion](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)
+ [Entwicklung von Workflows mit Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/developing-workflows.html#development-run-debug)
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 

# Mehr Muster
<a name="serverless-more-patterns-pattern-list"></a>

**Topics**
+ [Mit Athena auf Amazon DynamoDB-Tabellen zugreifen, diese abfragen und verbinden](access-query-and-join-amazon-dynamodb-tables-using-athena.md)
+ [Automatisieren Sie CodeGuru Amazon-Rezensionen für AWS CDK Python-Anwendungen mithilfe von GitHub Aktionen](automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.md)
+ [Automatisieren Sie die AWS-Ressourcenbewertung](automate-aws-resource-assessment.md)
+ [Automatisieren Sie die Bereitstellung verschachtelter Anwendungen mit AWS SAM](automate-deployment-of-nested-applications-using-aws-sam.md)
+ [Automatisieren Sie die Bereitstellung von AWS Supply Chain Data Lakes in einem Multi-Repository-Setup mithilfe von GitHub Actions, Artifactory und Terraform](automate-the-deployment-of-aws-supply-chain-data-lakes.md)
+ [Automatisieren Sie die Replikation von Amazon RDS-Instances auf AWS-Konten](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [Automatisches Archivieren von Elementen in Amazon S3 mithilfe von DynamoDB TTL](automatically-archive-items-to-amazon-s3-using-dynamodb-ttl.md)
+ [Automatische Erkennung von Änderungen und Initiierung verschiedener CodePipeline Pipelines für ein Monorepo in CodeCommit](automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.md)
+ [Erstellen Sie eine serverlose Architektur mit mehreren Mandanten in Amazon Service OpenSearch](build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.md)
+ [Erstellen Sie einen fortschrittlichen Mainframe-Dateiviewer in der AWS-Cloud](build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.md)
+ [Value at Risk (VaR) mithilfe von AWS-Services berechnen](calculate-value-at-risk-var-by-using-aws-services.md)
+ [Kopieren Sie AWS Service Catalog-Produkte zwischen verschiedenen AWS-Konten und AWS-Regionen](copy-aws-service-catalog-products-across-different-aws-accounts-and-aws-regions.md)
+ [Automatisches Erstellen dynamischer CI-Pipelines für Java- und Python-Projekte](create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.md)
+ [Zerlegen Sie Monolithen mithilfe von CQRS und Event Sourcing in Microservices](decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.md)
+ [Stellen Sie eine React-basierte Einzelseitenanwendung auf Amazon S3 bereit und CloudFront](deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.md)
+ [Stellen Sie eine Amazon API Gateway Gateway-API auf einer internen Website mithilfe von privaten Endpunkten und einem Application Load Balancer bereit](deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.md)
+ [Bereitstellen und verwalten Sie einen serverlosen Data Lake in der AWS-Cloud, indem Sie Infrastruktur als Code verwenden](deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code.md)
+ [Stellen Sie mithilfe AWS von Terraform und Amazon Bedrock einen RAG-Anwendungsfall bereit](deploy-rag-use-case-on-aws.md)
+ [Entwickeln Sie mithilfe von Amazon Bedrock-Agenten und Wissensdatenbanken einen vollautomatischen Chat-basierten Assistenten](develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.md)
+ [Entwickeln Sie mithilfe von RAG und Prompting fortschrittliche, auf KI basierende Chat-Assistenten ReAct](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [Dynamisches Generieren einer IAM-Richtlinie mit IAM Access Analyzer mithilfe von Step Functions](dynamically-generate-an-iam-policy-with-iam-access-analyzer-by-using-step-functions.md)
+ [Integrieren Sie visuelle Komponenten von Amazon Quick Sight mithilfe von Amazon Cognito und IaC-Automatisierung in Webanwendungen](embed-quick-sight-visual-components-into-web-apps-cognito-iac.md)
+ [Stellen Sie sicher, dass die Amazon EMR-Protokollierung bei Amazon S3 beim Start aktiviert ist](ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch.md)
+ [Schätzen Sie die Kosten einer DynamoDB-Tabelle für On-Demand-Kapazität](estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.md)
+ [Generieren Sie mit Amazon Personalize personalisierte und neu eingestufte Empfehlungen](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Generieren Sie Testdaten mit einem AWS Glue Glue-Job und Python](generate-test-data-using-an-aws-glue-job-and-python.md)
+ [Implementieren Sie SHA1 Hashing für PII-Daten bei der Migration von SQL Server zu PostgreSQL](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [Implementieren Sie das serverlose Saga-Muster mithilfe von AWS Step Functions](implement-the-serverless-saga-pattern-by-using-aws-step-functions.md)
+ [Verbessern Sie die Betriebsleistung, indem Sie Amazon DevOps Guru in mehreren AWS-Regionen, Konten und OUs mit dem AWS CDK aktivieren](improve-operational-performance-by-enabling-amazon-devops-guru-across-multiple-aws-regions-accounts-and-ous-with-the-aws-cdk.md)
+ [Starten Sie mithilfe von Step Functions und einer Lambda-Proxyfunktion ein CodeBuild Projekt für alle AWS-Konten](launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.md)
+ [Migrieren Sie Apache Cassandra-Workloads mithilfe von AWS Glue zu Amazon Keyspaces](migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.md)
+ [Überwachen Sie die Nutzung eines gemeinsam genutzten Amazon Machine Image über mehrere AWS-Konten](monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.md)
+ [Optimieren Sie serverlose Bereitstellungen mit mehreren Konten mithilfe der AWS CDK Workflows und Aktionen GitHub](optimize-multi-account-serverless-deployments.md)
+ [Orchestrieren Sie eine ETL-Pipeline mit Validierung, Transformation und Partitionierung mit AWS Step Functions](orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.md)
+ [Abfragen von Amazon DynamoDB-Tabellen mit SQL mithilfe von Amazon Athena](query-amazon-dynamodb-tables-sql-amazon-athena.md)
+ [Führen Sie ereignisgesteuerte und geplante Workloads in großem Umfang mit AWS Fargate aus](run-event-driven-and-scheduled-workloads-at-scale-with-aws-fargate.md)
+ [Senden Sie benutzerdefinierte Attribute an Amazon Cognito und fügen Sie sie in Token ein](send-custom-attributes-cognito.md)
+ [Statische Inhalte in einem Amazon S3 S3-Bucket über eine VPC mithilfe von Amazon bereitstellen CloudFront](serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.md)
+ [Optimieren Sie die Entwicklung und Bereitstellung von Amazon Lex Lex-Bot mithilfe eines automatisierten Workflows](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [Strukturieren Sie ein Python-Projekt in hexagonaler Architektur mit AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Translate natürliche Sprache in Abfragen, DSL für OpenSearch und Elasticsearch-Abfragen](translate-natural-language-query-dsl-opensearch-elasticsearch.md)
+ [Daten aus einem Amazon Redshift Redshift-Cluster kontenübergreifend nach Amazon S3 entladen](unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.md)
+ [Koordinieren Sie die Ressourcenabhängigkeit und die Aufgabenausführung mithilfe des AWS Fargate WaitCondition Hook-Konstrukts](use-the-aws-fargate-waitcondition-hook-construct.md)
+ [Verwenden Sie Amazon Bedrock-Agenten, um die Erstellung von Zugriffskontrollen in Amazon EKS durch textbasierte Eingabeaufforderungen zu automatisieren](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)