

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

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

**Topics**
+ [Créez une application mobile React Native sans serveur à l'aide d'AWS Amplify](build-a-serverless-react-native-mobile-app-by-using-aws-amplify.md)
+ [Gestion des locataires sur plusieurs produits SaaS sur un seul plan de contrôle](manage-tenants-across-multiple-saas-products-on-a-single-control-plane.md)
+ [Consolidez la génération d'URL présignées Amazon S3 et le téléchargement d'objets en utilisant un point de terminaison associé à des adresses IP statiques](consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.md)
+ [Création d'une EventBridge connexion Amazon entre comptes au sein d'une organisation](create-cross-account-amazon-eventbridge-connection-organization.md)
+ [Fournissez des enregistrements DynamoDB à Amazon S3 à l'aide de Kinesis Data Streams et Firehose avec AWS CDK](deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.md)
+ [Implémentez la gestion des versions d'API basée sur les chemins en utilisant des domaines personnalisés dans Amazon API Gateway](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Importez la bibliothèque psycopg2 pour interagir avec votre base AWS Lambda de données PostgreSQL](import-psycopg2-library-lambda.md)
+ [Intégrez Amazon API Gateway à Amazon SQS pour gérer le REST asynchrone APIs](integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.md)
+ [Traitez les événements de manière asynchrone avec Amazon API Gateway et AWS Lambda](process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.md)
+ [Traitez les événements de manière asynchrone avec Amazon API Gateway et Amazon DynamoDB Streams](processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.md)
+ [Traitez les événements de manière asynchrone avec Amazon API Gateway, Amazon SQS et AWS Fargate](process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.md)
+ [Exécutez les tâches d'automatisation d'AWS Systems Manager de manière synchrone depuis AWS Step Functions](run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.md)
+ [Exécuter des lectures parallèles d'objets S3 en utilisant Python dans une AWS Lambda fonction](run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.md)
+ [Envoyez des données de télémétrie de AWS Lambda vers OpenSearch pour des analyses et des visualisations en temps réel](send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.md)
+ [Configuration d'un routeur cellulaire sans serveur pour une architecture cellulaire](serverless-cell-router-architecture.md)
+ [Configurer un accès privé à un compartiment Amazon S3 via un point de terminaison VPC](set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.md)
+ [Résoudre les problèmes liés aux états en AWS Step Functions utilisant Amazon Bedrock](troubleshooting-states-in-aws-step-functions.md)
+ [Plus de modèles](serverless-more-patterns-pattern-list.md)

# Créez une application mobile React Native sans serveur à l'aide d'AWS Amplify
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify"></a>

*Deekshitulu Pentakota, Amazon Web Services*

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

Ce modèle montre comment créer un backend sans serveur pour une application mobile React Native à l'aide d'AWS Amplify et des services AWS suivants :
+ AWS AppSync
+ Amazon Cognito
+ Amazon DynamoDB

Après avoir configuré et déployé le backend de l'application à l'aide d'Amplify, Amazon Cognito authentifie les utilisateurs de l'application et les autorise à accéder à l'application. AWS interagit AppSync ensuite avec l'application frontale et avec une table DynamoDB principale pour créer et récupérer des données.

**Note**  
Ce modèle utilise une simple application « ToDoList » comme exemple, mais vous pouvez utiliser une procédure similaire pour créer n'importe quelle application mobile React Native.

## Conditions préalables et limitations
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ [Interface de ligne de commande Amplify (Amplify CLI)](https://docs.amplify.aws/cli/start/install/), installée et configurée
+ XCode (n'importe quelle version)
+ Microsoft Visual Studio (n'importe quelle version, n'importe quel éditeur de code, n'importe quel éditeur de texte)
+ Connaissance d'Amplify
+ Connaissance d'Amazon Cognito
+ Connaissance d'AWS AppSync
+ Connaissance de DynamoDB
+ Connaissance de Node.js
+ Familiarité avec npm
+ Connaissance de React et React Native
+ Familiarité avec JavaScript et ( ECMAScript 6) ES6
+ Connaissance de GraphQL

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

Le schéma suivant montre un exemple d'architecture permettant d'exécuter le backend d'une application mobile React Native dans le cloud AWS :

![\[Flux de travail pour exécuter une application mobile React Native avec les services AWS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/c95e0150-5762-4c90-946c-efa3a22913e4/images/5beff5f9-9d14-49dc-a046-b74e5bfbd13f.png)


Le schéma montre l'architecture suivante :

1. Amazon Cognito authentifie les utilisateurs de l'application et les autorise à accéder à l'application.

1. Pour créer et récupérer des données, AWS AppSync utilise une API GraphQL pour interagir avec l'application frontale et une table DynamoDB principale.

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

**Services AWS**
+ [AWS Amplify](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html) est un ensemble d'outils et de fonctionnalités spécialement conçus pour aider les développeurs web et mobiles frontaux à créer rapidement des applications complètes sur AWS.
+ [AWS AppSync](https://docs.aws.amazon.com/appsync/latest/devguide/what-is-appsync.html) fournit une interface GraphQL évolutive qui aide les développeurs d'applications à combiner des données provenant de plusieurs sources, notamment Amazon DynamoDB, AWS Lambda et HTTP. APIs
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fournit des fonctionnalités d'authentification, d'autorisation et de gestion des utilisateurs pour les applications Web et mobiles.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.

**Code**

Le code de l'exemple d'application utilisé dans ce modèle est disponible dans le ios-todo-app référentiel GitHub [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app). Pour utiliser les fichiers d'exemple, suivez les instructions de la section **Epics** de ce modèle.

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

### Créez et exécutez votre application React Native
<a name="create-and-run-your-react-native-app"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez un environnement de développement React Native.  | Pour obtenir des instructions, consultez la section [Configuration de l'environnement de développement](https://reactnative.dev/docs/next/environment-setup) dans la documentation de React Native. | Développeur d’applications | 
| Créez et exécutez l'application mobile ToDoList React Native dans le simulateur iOS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Développeur d’applications | 

### Initialisation d'un nouvel environnement principal pour l'application
<a name="initialize-a-new-backend-environment-for-the-app"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez les services principaux nécessaires pour prendre en charge l'application dans Amplify.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Pour la configuration de ToDoList l'application utilisée dans ce modèle, appliquez l'exemple de configuration suivant.**Exemple de paramètres de configuration de l'application React Native Amplify**<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>Pour plus d'informations, consultez la section [Créer un nouveau backend Amplify](https://docs.amplify.aws/lib/project-setup/create-application/q/platform/js/#create-a-new-amplify-backend) dans la documentation Amplify Dev Center.La `amplify init` commande fournit les ressources suivantes à l'aide d'[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Développeur d’applications | 

### Ajoutez l'authentification Amazon Cognito à votre application Amplify React Native
<a name="add-amazon-cognito-authentication-to-your-amplify-react-native-app"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un service d'authentification Amazon Cognito. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Pour la configuration de ToDoList l'application utilisée dans ce modèle, appliquez l'exemple de configuration suivant.**Exemples de paramètres de configuration du service d'authentification**<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>La `amplify add auth` commande crée les dossiers, fichiers et fichiers de dépendance nécessaires dans un dossier local (**amplify) situé** dans le répertoire racine du projet. Pour la configuration de ToDoList l'application utilisée dans ce modèle, le **fichier aws-exports.js** est créé à cette fin. | Développeur d’applications | 
| Déployez le service Amazon Cognito sur le cloud AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Pour voir les services déployés dans votre projet, accédez à la console Amplify en exécutant la commande suivante :`amplify console` | Développeur d’applications | 
| Installez les bibliothèques Amplify requises pour React Native et les CocoaPods dépendances pour iOS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Développeur d’applications | 
| Importez et configurez le service Amplify. | Dans le fichier du point d'entrée de l'application (par exemple, **App.js**), importez et chargez le fichier de configuration du service Amplify en saisissant les lignes de code suivantes :<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)</pre>Si vous recevez un message d'erreur après avoir importé le service Amplify dans le fichier de point d'entrée de l'application, arrêtez l'application. Ensuite, ouvrez XCode et sélectionnez le **ToDoListAmplifyfichier .xcworkspace** dans le dossier iOS du projet, puis exécutez l'application. | Développeur d’applications | 
| Mettez à jour le fichier de point d'entrée de votre application pour utiliser le composant WithAuthenticator Higher-Order (HOC). | Le `withAuthenticator` HOC fournit des flux de travail de connexion, d'inscription et de mot de passe oublié dans votre application en utilisant seulement quelques lignes de code. Pour plus d'informations, voir [Option 1 : Utiliser des composants d'interface utilisateur prédéfinis](https://docs.amplify.aws/lib/auth/getting-started/q/platform/js/#option-1-use-pre-built-ui-components) dans le centre de développement Amplify. Également, des [composants d'ordre supérieur](https://reactjs.org/docs/higher-order-components.html) dans la documentation de React.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)**Exemple de code WithAuthenticator HOC**<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>Dans iOS Simulator, l'application affiche l'écran de connexion fourni par le service Amazon Cognito. | Développeur d’applications | 
| Testez la configuration du service d'authentification. | Dans iOS Simulator, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Vous pouvez également ouvrir la [console Amazon Cognito](https://console.aws.amazon.com/cognito/) et vérifier si un nouvel utilisateur a été créé dans le **pool d'identités ou non**. | Développeur d’applications | 

### Connectez une AppSync API AWS et une base de données DynamoDB à l'application
<a name="connect-an-aws-appsync-api-and-dynamodb-database-to-the-app"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une AppSync API AWS et une base de données DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Pour la configuration de ToDoList l'application utilisée dans ce modèle, appliquez l'exemple de configuration suivant.**Exemples de paramètres de configuration d'API et de base de données**<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>**Exemple de schéma GraphQL**<pre> type Todo @model {<br />   id: ID!<br />   name: String!<br />   description: String<br />}</pre> | Développeur d’applications | 
| Déployez l' AppSync API AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Pour la configuration de ToDoList l'application utilisée dans ce modèle, appliquez l'exemple de configuration suivant.**Exemple de paramètres de configuration de AppSync l'API AWS**La configuration suivante crée l'API GraphQL dans AWS AppSync et une table **Todo dans 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> | Développeur d’applications | 
| Connectez le frontend de l'application à l' AppSync API AWS. | Pour utiliser l'exemple d' ToDoList application fourni dans ce modèle, copiez le code du fichier **App.js** dans le ios-todo-app GitHub référentiel [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app). Intégrez ensuite l'exemple de code dans votre environnement local.L'exemple de code fourni dans le fichier **App.js** du référentiel effectue les opérations suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Développeur d’applications | 

## Ressources connexes
<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](https://reactjs.org/) (documentation React) 

# Gestion des locataires sur plusieurs produits SaaS sur un seul plan de contrôle
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane"></a>

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

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

Ce modèle montre comment gérer le cycle de vie des clients sur plusieurs produits SaaS (Software as a Service) sur un seul plan de contrôle dans le cloud AWS. L'architecture de référence fournie peut aider les entreprises à réduire la mise en œuvre de fonctionnalités redondantes et partagées dans leurs produits SaaS individuels et à améliorer l'efficacité de la gouvernance à grande échelle.

Les grandes entreprises peuvent proposer plusieurs produits SaaS dans différentes unités commerciales. Ces produits doivent souvent être fournis pour être utilisés par des locataires externes à différents niveaux d'abonnement. Sans solution mutualisée, les administrateurs informatiques doivent passer du temps à gérer des fonctionnalités indifférenciées entre plusieurs SaaS APIs, au lieu de se concentrer sur le développement des fonctionnalités de base du produit.

La solution de locataire commun proposée dans ce modèle peut aider à centraliser la gestion de nombreuses fonctionnalités des produits SaaS partagés d'une entreprise, notamment les suivantes :
+ Sécurité
+ Provisionnement pour les locataires
+ Stockage des données des locataires
+ Communications avec les locataires
+ Gestion des produits
+ Enregistrement et surveillance des métriques

## Conditions préalables et limitations
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Connaissance d'Amazon Cognito ou d'un fournisseur d'identité tiers (IdP)
+ Connaissance d'Amazon API Gateway
+ Connaissance d'AWS Lambda
+ Connaissance d'Amazon DynamoDB
+ Connaissance d'AWS Identity and Access Management (IAM)
+ Connaissance d'AWS Step Functions
+ Connaissance d'AWS CloudTrail et d'Amazon CloudWatch
+ Connaissance des bibliothèques et du code Python
+ Connaissance du SaaS APIs, notamment des différents types d'utilisateurs (organisations, locataires, administrateurs et utilisateurs d'applications), des modèles d'abonnement et des modèles d'isolation des locataires
+ Connaissance des exigences SaaS multi-produits et des abonnements multi-locataires de votre entreprise

**Limites**
+ Les intégrations entre la solution mutualisée et les produits SaaS individuels ne sont pas couvertes par ce modèle.
+ Ce modèle déploie le service Amazon Cognito uniquement dans une seule région AWS.

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

**Pile technologique cible**
+ Amazon API Gateway
+ Amazon Cognito
+ AWS CloudTrail
+ Amazon CloudWatch
+ Amazon DynamoDB
+ IAM
+ AWS Lambda
+ Amazon Simple Storage Service (Amazon S3)
+ Amazon Simple Notiﬁcation Service (Amazon SNS)
+ Fonctions d'AWS Step

**Architecture cible**

Le schéma suivant montre un exemple de flux de travail pour gérer le cycle de vie des locataires sur plusieurs produits SaaS sur un seul plan de contrôle dans le cloud AWS.

![\[Flux de travail pour gérer le cycle de vie des locataires sur un plan de contrôle unique.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/4306bc76-22a7-45ca-a107-43df6c6f7ac8/images/700faf4d-c28f-4814-96aa-2d895cdcb518.png)


 Le schéma suivant illustre le flux de travail suivant :

1. Un utilisateur AWS lance le provisionnement des locataires, le provisionnement des produits ou des actions liées à l'administration en appelant un point de terminaison API Gateway.

1. L'utilisateur est authentifié par un jeton d'accès extrait d'un groupe d'utilisateurs Amazon Cognito ou d'un autre IdP.

1. Les tâches d'approvisionnement ou d'administration individuelles sont exécutées par des fonctions Lambda intégrées aux points de terminaison de l'API API Gateway.

1. L'administration APIs de la solution commune (pour les locataires, les produits et les utilisateurs) rassemble tous les paramètres d'entrée, en-têtes et jetons requis. L'administration APIs invoque ensuite les fonctions Lambda associées.

1. Les autorisations IAM pour les fonctions d'administration APIs et Lambda sont validées par le service IAM.

1. Les fonctions Lambda stockent et extraient les données des catalogues (pour les locataires, les produits et les utilisateurs) dans DynamoDB et Amazon S3.

1. Une fois les autorisations validées, un flux de travail AWS Step Functions est invoqué pour effectuer une tâche spécifique. L'exemple du diagramme montre un flux de travail de provisionnement des locataires.

1. Les tâches individuelles du flux de travail AWS Step Functions sont exécutées dans un flux de travail prédéterminé (machine à états).

1. Toutes les données essentielles nécessaires à l'exécution de la fonction Lambda associée à chaque tâche de flux de travail sont extraites de DynamoDB ou d'Amazon S3. D'autres ressources AWS devront peut-être être mises en service à l'aide d'un CloudFormation modèle AWS.

1. Le cas échéant, le flux de travail envoie une demande de mise à disposition de ressources AWS supplémentaires pour un produit SaaS spécifique sur le compte AWS de ce produit.

1. Lorsque la demande aboutit ou échoue, le flux de travail publie la mise à jour du statut sous forme de message sur une rubrique Amazon SNS.

1. Amazon SNS est abonné à la rubrique Amazon SNS du flux de travail Step Functions.

1. Amazon SNS renvoie ensuite la mise à jour de l'état du flux de travail à l'utilisateur AWS.

1. Les journaux des actions de chaque service AWS, y compris une piste d'audit des appels d'API, sont envoyés à CloudWatch. Des règles et des alarmes spécifiques peuvent être configurées CloudWatch pour chaque cas d'utilisation.

1. Les journaux sont archivés dans des compartiments Amazon S3 à des fins d'audit.

**Automatisation et mise à l'échelle**

Ce modèle utilise un CloudFormation modèle pour automatiser le déploiement de la solution mutualisée. Le modèle peut également vous aider à augmenter ou à réduire rapidement les ressources associées.

Pour plus d'informations, consultez la section [Utilisation des CloudFormation modèles AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) dans le *guide de CloudFormation l'utilisateur AWS*.

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

**Services AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) vous aide à créer, publier, gérer, surveiller et sécuriser REST, HTTP, et ce, WebSocket APIs à n'importe quelle échelle.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fournit des fonctionnalités d'authentification, d'autorisation et de gestion des utilisateurs pour les applications Web et mobiles.
+ [AWS](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) vous CloudTrail aide à auditer la gouvernance, la conformité et le risque opérationnel de votre compte AWS.
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) vous CloudWatch aide à surveiller les indicateurs de vos ressources AWS et des applications que vous exécutez sur AWS en temps réel.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous permet d'exécuter du code sans avoir à provisionner ou à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) vous aide à coordonner et à gérer l'échange de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) est un service d'orchestration sans serveur qui vous permet de combiner les fonctions AWS Lambda et d'autres services AWS pour créer des applications critiques pour l'entreprise.

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

Dans ce modèle, la solution utilise un plan de contrôle unique pour gérer l'intégration de plusieurs locataires et pour fournir un accès à plusieurs produits SaaS. Le plan de contrôle permet aux utilisateurs administratifs de gérer quatre autres plans spécifiques aux fonctionnalités :
+ Avion de sécurité
+ Plan de flux de travail
+ Plan de communication
+ Plan de journalisation et de surveillance

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

### Configuration du plan de sécurité
<a name="configure-the-security-plane"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Définissez les exigences relatives à votre plateforme SaaS à locataires multiples. | Établissez des exigences détaillées pour les éléments suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Architecte cloud, administrateur système AWS | 
| Configurez le service Amazon Cognito. | Suivez les instructions de la section [Getting started with Amazon Cognito Developer](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-getting-started.html) Guide du développeur *Amazon Cognito*. | Architecte du cloud | 
| Configurez les politiques IAM requises. | Créez les politiques IAM requises pour votre cas d'utilisation. Mappez ensuite les politiques aux rôles IAM dans Amazon Cognito.Pour plus d'informations, consultez [la section Gestion de l'accès à l'aide de politiques](https://docs.aws.amazon.com/cognito/latest/developerguide/security-iam.html#security_iam_access-manage) et de [contrôle d'accès basé sur les rôles](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html) dans le manuel *Amazon Cognito Developer Guide*. | Administrateur cloud, architecte cloud, sécurité AWS IAM | 
| Configurez les autorisations d'API requises.  | Configurez les autorisations d'accès à API Gateway à l'aide des rôles et politiques IAM et des autorisateurs Lambda.Pour obtenir des instructions, consultez les sections suivantes du manuel *Amazon API Gateway Developer Guide* :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Administrateur cloud, architecte cloud | 

### Configuration du plan de données
<a name="configure-the-data-plane"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez les catalogues de données requis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Pour plus d'informations, consultez la section [Configuration de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SettingUp.html) dans le manuel du développeur Amazon *DynamoDB*. | DBA | 

### Configuration du plan de contrôle
<a name="configure-the-control-plane"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez des fonctions Lambda et une API Gateway APIs pour exécuter les tâches du plan de contrôle requises. | Créez des fonctions Lambda et une API Gateway distinctes APIs pour ajouter, supprimer et gérer les éléments suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Pour plus d'informations, consultez la section [Utilisation d'AWS Lambda avec Amazon API Gateway](https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html) dans le manuel du développeur *AWS Lambda*. | Développeur d’applications | 

### Configuration du plan de flux de travail
<a name="configure-the-workflow-plane"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Identifiez les tâches que les flux de travail AWS Step Functions doivent exécuter. | Identifiez et documentez les exigences détaillées du flux de travail AWS Step Functions pour les éléments suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Assurez-vous que les principales parties prenantes approuvent les exigences. | Propriétaire de l'application | 
| Créez les flux de travail AWS Step Functions requis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Développeur d'applications, responsable de la création | 

### Configuration du plan de communication
<a name="configure-the-communication-plane"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez des rubriques Amazon SNS. | Créez des rubriques Amazon SNS pour recevoir des notifications sur les points suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Pour plus d'informations, consultez la rubrique [Création d'un réseau SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html) dans le manuel *Amazon SNS* Developer Guide. | Propriétaire de l'application, architecte cloud | 
| Abonnez des points de terminaison à chaque rubrique Amazon SNS. | Pour recevoir des messages publiés sur une rubrique Amazon SNS, vous devez abonner un point de terminaison à chaque rubrique.Pour plus d'informations, consultez la section [Abonnement à une rubrique Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) dans le manuel du développeur *Amazon SNS*. | Développeur d'applications, architecte cloud | 

### Configuration du plan de journalisation et de surveillance
<a name="configure-the-logging-and-monitoring-plane"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Activez la journalisation pour chaque composant de la solution mutualisée. | Activez la journalisation au niveau des composants pour chaque ressource de la solution mutualisée que vous avez créée.Pour obtenir des instructions, veuillez consulter les sections suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Vous pouvez consolider les journaux de chaque ressource dans un compte de journalisation centralisé en utilisant des politiques IAM. Pour plus d'informations, consultez la section [Journalisation centralisée et mesures de sécurité pour plusieurs comptes](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/centralized-logging-and-multiple-account-security-guardrails.html). | Développeur d'applications, administrateur système AWS, administrateur cloud | 

### Fournir et déployer la solution Common Tenant
<a name="provision-and-deploy-the-common-tenant-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez des CloudFormation modèles. | Automatisez le déploiement et la maintenance de la solution commune complète et de tous ses composants à l'aide CloudFormation de modèles.Pour plus d'informations, consultez le [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html). | Développeur d'applications, DevOps ingénieur, CloudFormation développeur | 

## Ressources connexes
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-resources"></a>
+ [Contrôlez l'accès à une API REST en utilisant les groupes d'utilisateurs Amazon Cognito comme autorisateur](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) (*Amazon API Gateway* Developer Guide)
+ [Utiliser les autorisateurs Lambda d'API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (*Amazon API Gateway* Developer Guide)
+ Groupes d'[utilisateurs Amazon Cognito (Guide du](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) développeur *Amazon Cognito*)
+ [ CloudWatch Console entre comptes et entre régions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Cross-Account-Cross-Region.html) (*Amazon CloudWatch User Guide*)

# Consolidez la génération d'URL présignées Amazon S3 et le téléchargement d'objets en utilisant un point de terminaison associé à des adresses IP statiques
<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 et Jun Soung Lee, Amazon Web Services*

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

Ce modèle simplifie l'accès à Amazon Simple Storage Service (Amazon S3) en créant une URLs signature présignée sécurisée et personnalisée pour le téléchargement d'objets. La solution fournit un point de terminaison unique doté d'un domaine unique et d'adresses IP statiques. Il est conçu pour les clients qui ont besoin de consolider à la fois l'API et les points de terminaison Amazon S3 sous un domaine unifié avec des adresses IP statiques. Le cas d'utilisation implique que les utilisateurs suivent une politique de pare-feu basée sur des adresses IP et des listes de domaines autorisés, limitant l'accès aux API à des domaines et adresses IP spécifiques. 

L'architecture utilise des clés Services AWS AWS Global Accelerator, notamment Amazon API Gateway AWS Lambda, Application Load Balancer et Amazon S3. AWS PrivateLink Cette conception centralise l'API pour générer le pré-signé URLs et le point de terminaison Amazon S3 sous un seul domaine, lié à un accélérateur doté de deux adresses IP statiques. Par conséquent, les utilisateurs peuvent facilement demander URLs et télécharger des objets Amazon S3 présignés via un point de terminaison de domaine unifié avec des adresses IP statiques. 

Cette architecture est particulièrement avantageuse pour les clients soumis à des politiques ou à des exigences de conformité strictes, tels que ceux des secteurs public, médical et financier.

## Conditions préalables et limitations
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Une zone hébergée publique pour votre nom de domaine personnalisé
+ Un domaine importé dans AWS Certificate Manager (ACM) dans le domaine Région AWS de votre choix

**Limites**
+ Le nom du compartiment Amazon S3 doit correspondre au nom de domaine du point de terminaison. Cette exigence vise à garantir que le point de terminaison Amazon S3 peut être desservi via le point de terminaison d'API unique.
+ Le nom de domaine personnalisé utilisé dans API Gateway doit correspondre au nom de domaine de l'unique point de terminaison de l'API.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [AWS Services par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

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

Le schéma suivant montre l'architecture et le flux de travail cibles pour ce modèle.

![\[Composants et flux de travail pour la génération d'URL présignées et le téléchargement d'objets.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e19ebcb5-2138-481e-952e-3cfee9ad9e97/images/effd197c-d4d7-4990-8b66-3eb1c64aab4c.png)


Le diagramme illustre le concept et le flux de travail suivants :

1. Un utilisateur lance une demande pour générer une URL présignée en utilisant le point de terminaison personnalisé desservi AWS Global Accelerator, en utilisant le nom de domaine personnalisé et les adresses IP associées.

1. Une fonction Lambda génère l'URL présignée, pointant vers le point de terminaison personnalisé. Il répond par une redirection 301 qui contient l'URL présignée générée. Par le biais de l'URL présignée redirigée, l'utilisateur télécharge automatiquement l'objet en utilisant le point de terminaison personnalisé servi via Global Accelerator.

Les composants de l'architecture globale pour la génération d'URL présignées et le flux de téléchargement d'objets sont les suivants :
+ Fourniture d'adresses IP statiques par Global Accelerator.
+ Enregistrement de l'alias de l'accélérateur en tant qu'enregistrement A dans la zone hébergée publique Amazon Route 53 avec le nom de domaine personnalisé.
+ Création d'un compartiment Amazon S3 avec un nom de compartiment correspondant au nom de domaine personnalisé enregistré.
+ Création de points de terminaison VPC pour API Gateway et le service Amazon S3.
+ Configuration d'un Application Load Balancer orienté vers l'interne pour se connecter à Global Accelerator.
+ Attribution d'un nom de domaine personnalisé pour API Gateway avec un certificat ACM attaché.
+ Déploiement d'une API Gateway privée intégrée à une fonction Lambda.
+ La fonction Lambda est dotée d'un rôle Gestion des identités et des accès AWS (IAM) attaché (avec [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)autorisations).

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

**Services AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) vous aide à créer, publier, gérer, surveiller et sécuriser REST, HTTP, et ce, WebSocket APIs à n'importe quelle échelle.
+ [Les équilibreurs de charge des applications](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) distribuent le trafic applicatif entrant sur plusieurs cibles, telles que les instances Amazon Elastic Compute Cloud (Amazon EC2), dans plusieurs zones de disponibilité.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) vous aide à créer, à stocker et à renouveler des certificats et clés SSL/TLS X.509 publics et privés qui protègent vos AWS sites Web et vos applications.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner AWS Cloud l'infrastructure dans le code.
+ [AWS Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html)est un service mondial qui prend en charge plusieurs Régions AWS terminaux. Vous pouvez créer des accélérateurs qui dirigent le trafic vers des points de terminaison optimaux sur le réseau AWS mondial. Il permet d'améliorer la disponibilité et les performances de vos applications Internet qui sont utilisées par un public mondial.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)vous permet de créer des connexions privées unidirectionnelles entre vos clouds privés virtuels (VPCs) et des services extérieurs au VPC.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) est un service Web DNS hautement disponible et évolutif.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

**Autres outils**
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.

**Référentiel de code**

Vous pouvez déployer ce modèle en utilisant le AWS CDK ou Terraform selon vos préférences. La section [Epics](#consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics) contient des instructions pour les deux méthodes de déploiement. Le code de ce modèle est disponible dans les GitHub référentiels suivants :
+ **AWS CDK**— [s3- presignedurl-staticips-endpoint-with -cdk](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk)
+ **Terraform** — [s3](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform) - -terraform presignedurl-staticips-endpoint-with

## Bonnes pratiques
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-best-practices"></a>
+ Pour améliorer la sécurité de l'environnement de production, il est essentiel de mettre en œuvre des mécanismes d'autorisation, tels qu'[Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html), afin de restreindre l'accès à l'API de `PresignedUrl` génération.
+ Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation IAM.

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

### Préparez l'environnement
<a name="prepare-the-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Choisissez un nom de domaine. | Choisissez un nom de domaine public pour le point de terminaison Amazon S3 unifié. Le nom de domaine est également utilisé comme nom du compartiment Amazon S3. | Administrateur AWS, administrateur réseau | 
| Créez une zone hébergée publique. | [Créez une zone hébergée publique](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) dans Amazon Route 53. Son nom de domaine doit correspondre au nom de domaine utilisé dans API Gateway. | Administrateur AWS, administrateur réseau | 
| Préparez un certificat SSL. | Utilisez AWS Certificate Manager (ACM) pour [demander](https://docs.aws.amazon.com/acm/latest/userguide/acm-public-certificates.html) ou [importer](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) un certificat SSL pour le domaine de votre application Web. | Administrateur AWS, administrateur réseau | 

### Déployez le modèle avec Terraform
<a name="deploy-the-pattern-with-terraform"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez l'environnement de développement Terraform. | Pour configurer l'environnement de développement, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrateur AWS, administrateur du cloud | 
| Modifiez les **`provider.tf`**fichiers `.tfvars` et. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html)**Notez ce qui suit :**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrateur AWS, administrateur du cloud | 
| Fournir des ressources réseau. | Pour approvisionner les ressources réseau, exécutez les commandes suivantes :<pre>cd ./2.vpc_alb_ga<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre>Pendant l'exécution de la `apply ` commande, tapez **yes** lorsque vous y êtes invité. | Administrateur AWS, administrateur du cloud | 
| Provisionnez API Gateway, Amazon S3 et Lambda. | Pour provisionner des ressources réseau, utilisez les commandes suivantes :<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre> | Administrateur AWS, administrateur du cloud | 

### Déployez le modèle avec AWS CDK
<a name="deploy-the-pattern-with-cdk"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez l'environnement AWS CDK de développement. | Pour configurer l'environnement de développement, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrateur AWS, administrateur du cloud | 
| Configurez les paramètres du domaine dans le `config/index.ts` fichier. | Pour modifier les options de la variable constante, utilisez les commandes suivantes :<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>Dans les commandes, remplacez chaque espace réservé par vos propres informations :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrateur AWS, administrateur du cloud | 
| Déployez les piles. | Pour déployer deux piles, l'une pour le cloud privé virtuel (VPC) et l'autre pour l'application, utilisez la commande suivante :<pre>$ npm install <br />$ cdk synth <br />$ cdk deploy --all</pre> | Administrateur AWS, administrateur du cloud | 

### Testez le modèle
<a name="test-the-pattern"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez les adresses IP du point de terminaison. | Pour vérifier que le domaine correspondant à ce modèle possède des adresses IP statiques, utilisez la commande suivante :<pre>nslookup ${s3-bucket-prefix}.${domain}</pre> | Administrateur réseau | 
| Téléchargez un fichier de test que vous pourrez télécharger ultérieurement. | Téléchargez le fichier de test dans le `'/objects'` dossier du compartiment Amazon S3. | Administrateur AWS, administrateur du cloud | 
| Appelez l'API pour générer une URL présignée. | Pour générer une URL présignée, appelez l'URL depuis un navigateur ou un client API (par exemple, [Postman](https://www.postman.com/product/what-is-postman/)) en utilisant le format suivant :<pre>https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}</pre>Remplacez les valeurs d'espace réservé dans `${s3-bucket-prefix}` et `${domain}` par les valeurs que vous avez définies lors des étapes précédentes. | Propriétaire de l'application | 
| Vérifiez le résultat. | Le résultat attendu est que vous devriez recevoir un code d'état de redirection 301 (déplacé définitivement). Cette réponse contiendra l'URL présignée, qui devrait automatiquement lancer le téléchargement de votre fichier de test. | Ingénieur de test | 

### Nettoyez avec Terraform
<a name="clean-up-with-terraform"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Détruisez les ressources API Gateway, Amazon S3 et Lambda. | Pour supprimer des ressources, utilisez les commandes suivantes :<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> | Administrateur AWS, administrateur du cloud | 
| Détruisez les ressources du réseau. | Pour supprimer des ressources réseau, utilisez les commandes suivantes :<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> | Administrateur AWS, administrateur du cloud | 

### Nettoyez avec AWS CDK
<a name="clean-up-with-cdk"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Détruisez les piles. | Pour détruire à la fois le VPC et les piles d'applications, utilisez la commande suivante :<pre>$ cdk destroy --all</pre> | Administrateur AWS, administrateur du cloud | 
| Videz et supprimez les compartiments Amazon S3. | [Videz](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) et [supprimez](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) l'objet (compartiment Amazon S3) et les journaux (compartiment Amazon S3) qui ne sont pas supprimés par défaut.Les noms des compartiments Amazon S3 sont `${s3-bucket-prefix}.${domain}` et`${s3-bucket-prefix}.${domain}-logs`.Si vous préférez utiliser le [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) pour supprimer les compartiments, utilisez les commandes suivantes :<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>Remplacez `${s3-bucket-prefix}` et `${domain}` par les valeurs que vous avez définies dans les étapes précédentes. , /p> | Administrateur AWS, administrateur du cloud | 

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

**AWS Blogs**
+ [Accès à un Amazon API Gateway via des adresses IP statiques fournies par 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/) 
+ [Générez une URL présignée en mode modulaire AWS CDK pour JavaScript](https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/) 
+ [Hébergement de sites Web statiques HTTPS internes avec ALB, S3 et PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) 

# Création d'une EventBridge connexion Amazon entre comptes au sein d'une organisation
<a name="create-cross-account-amazon-eventbridge-connection-organization"></a>

*Sam Wilson et Robert Stone, Amazon Web Services*

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

Les grands systèmes distribués utilisent Amazon EventBridge pour communiquer les changements d'état entre les différents comptes Amazon Web Services (AWS) d'une AWS Organizations organisation. Cependant, EventBridge il est généralement en mesure de cibler uniquement les terminaux ou les consommateurs. Compte AWS L'exception concerne un bus d'événements sur un autre compte. Ce bus d'événements est une cible valide. Pour utiliser les événements d'un bus d'événements dans un autre compte, les événements doivent être transférés du bus d'événements du compte source vers le bus d'événements du compte de destination. Pour éviter les difficultés liées à la gestion d'événements critiques entre applications au sein de différentes applications Comptes AWS, utilisez l'approche recommandée présentée dans ce modèle.

Ce modèle illustre comment implémenter une architecture axée sur les événements impliquant plusieurs acteurs EventBridge Comptes AWS au sein d'une AWS Organizations organisation. Le modèle utilise AWS Cloud Development Kit (AWS CDK) Toolkit et AWS CloudFormation.

EventBridge propose un bus d'événements sans serveur qui vous aide à recevoir, filtrer, transformer, acheminer et diffuser des événements. Composant essentiel des architectures axées sur les événements, il EventBridge permet de séparer les producteurs de messages des consommateurs de ces messages. Dans un seul compte, c'est simple. Une structure à comptes multiples nécessite des considérations supplémentaires pour que les événements du bus d'événements d'un compte soient consommés dans d'autres comptes de la même organisation.

Pour plus d'informations sur les considérations spécifiques aux comptes pour les producteurs et les consommateurs, consultez la section [Informations supplémentaires](#create-cross-account-amazon-eventbridge-connection-organization-additional).

## Conditions préalables et limitations
<a name="create-cross-account-amazon-eventbridge-connection-organization-prereqs"></a>

**Conditions préalables**
+ Une AWS Organizations organisation avec au moins deux associés Comptes AWS
+ Un rôle Gestion des identités et des accès AWS (IAM) dans les deux cas Comptes AWS qui vous permet de provisionner une infrastructure dans les deux en Comptes AWS utilisant AWS CloudFormation
+ Git [installé localement](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ AWS Command Line Interface (AWS CLI) [installé localement](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ AWS CDK [installé localement](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) et [amorcé dans les deux](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-howto) Comptes AWS

**Versions du produit**

Ce modèle a été créé et testé à l'aide des outils et versions suivants :
+ AWS CDK Boîte à outils 2.126.0
+ Node.js 18,19,0
+ npm 10.2.3
+ Python 3.12

Ce modèle devrait fonctionner avec n'importe quelle version de AWS CDK v2 ou npm. Les versions 13.0.0 à 13.6.0 de Node.js ne sont pas compatibles avec. AWS CDK

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

**Architecture cible**

Le schéma suivant montre le flux de travail architectural permettant de transférer un événement depuis un compte et de le consommer sur un autre compte.

![\[Le processus en trois étapes pour connecter le compte producteur Source et le compte consommateur Destination.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/34a5f3ae-511d-4636-999f-c73396770117/images/ccc4878a-6281-4a77-a483-4e6f299d7807.png)


Le flux de travail comprend les étapes suivantes :

1. La AWS Lambda fonction Producteur du compte Source place un événement sur le bus d' EventBridge événements du compte.

1. La EventBridge règle multi-comptes achemine l'événement vers un bus d' EventBridge événements dans le compte Destination.

1. Le bus EventBridge d'événements du compte Destination possède une règle Lambda cible qui invoque la fonction Consumer Lambda.

Une bonne pratique consiste à utiliser une [file d'attente de lettres mortes (DLQ)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) pour gérer les invocations échouées de la fonction Consumer Lambda. Cependant, le DLQ a été omis de cette solution pour des raisons de clarté. Pour en savoir plus sur la façon d'implémenter une DLQ dans vos flux de travail et d'améliorer la capacité de vos flux de travail à se rétablir en cas de défaillance, consultez le billet de blog [Implementation AWS Lambda error handling patterns](https://aws.amazon.com/blogs/compute/implementing-aws-lambda-error-handling-patterns/).

**Automatisation et mise à l'échelle**

AWS CDK provisionne automatiquement l'architecture requise. EventBridge peut atteindre des milliers d'enregistrements par seconde en fonction du Région AWS. Pour plus d'informations, consultez la [documentation relative EventBridge aux quotas Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html).

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

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner AWS Cloud l'infrastructure dans le code. Ce modèle utilise le [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html), un kit de développement cloud en ligne de commande qui vous permet d'interagir avec votre AWS CDK application.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, AWS Lambda des fonctions, des points de terminaison d'appel HTTP utilisant des destinations d'API ou des bus d'événements dans d'autres. Comptes AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)est un service de gestion de comptes qui vous aide à Comptes AWS en regrouper plusieurs au sein d'une organisation que vous créez et gérez de manière centralisée.

**Autres outils**
+ [Node.js](https://nodejs.org/en/docs/) est un environnement d' JavaScript exécution piloté par les événements conçu pour créer des applications réseau évolutives.
+ [npm](https://docs.npmjs.com/about-npm) est un registre de logiciels qui s'exécute dans un environnement Node.js et est utilisé pour partager ou emprunter des packages et gérer le déploiement de packages privés.
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [cross-account-eventbridge-in-organization](https://github.com/aws-samples/aws-cdk-examples/tree/main/python/cross-account-eventbridge-in-organization).

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

Pour connaître les meilleures pratiques en matière d' EventBridgeutilisation, consultez les ressources suivantes :
+ [Bonnes pratiques relatives aux modèles EventBridge d'événements Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-patterns-best-practices.html)
+ [Bonnes pratiques lors de la définition de règles dans Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules-best-practices.html)

## Épopées
<a name="create-cross-account-amazon-eventbridge-connection-organization-epics"></a>

### Préparez votre environnement AWS CDK de déploiement local
<a name="prepare-your-local-cdk-deployment-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez les informations d'identification locales pour le compte source et le compte de destination. | Consultez la [section Configuration d'une nouvelle configuration et de nouvelles informations d'identification](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new), et utilisez la méthode d'authentification et d'identification la plus adaptée à votre environnement.Assurez-vous de configurer l'authentification AWS CLI du compte source et du compte de destination.Ces instructions supposent que vous avez configuré deux profils AWS localement : `sourceAccount` et`destinationAccount`. | Développeur d’applications | 
| Bootstrap les deux Comptes AWS. | Pour démarrer les comptes, exécutez les commandes suivantes :<pre>cdk bootstrap --profile sourceAccount<br />cdk bootstrap --profile destinationAccount</pre> | Développeur d’applications | 
| Clonez le code du modèle. | Pour cloner le dépôt, exécutez la commande suivante :<pre>git clone git@github.com:aws-samples/aws-cdk-examples.git</pre>Ensuite, remplacez le répertoire par le dossier du projet nouvellement cloné :<pre>cd aws-cdk-examples/python/cross-account-eventbridge-in-organization</pre> | Développeur d’applications | 

### ProducerStack Déployer sur le compte source
<a name="deploy-producerstack-to-the-source-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Modifiez `cdk.json` avec vos informations AWS Organizations et celles de votre compte. | Dans le dossier racine du projet, apportez les modifications suivantes à `cdk.json` :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Développeur d’applications | 
| Déployez les ProducerStack ressources. | Exécutez la commande suivante depuis le répertoire racine du projet :<pre>cdk deploy ProducerStack --profile sourceAccount</pre>Lorsque vous y êtes invité, acceptez les nouveaux rôles IAM et les autres autorisations liées à la sécurité créés via. AWS CloudFormation | Développeur d’applications | 
| Vérifiez que les ProducerStack ressources sont déployées. | Pour vérifier les ressources, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Développeur d’applications | 

### ConsumerStack Déployer sur le compte de destination
<a name="deploy-consumerstack-to-the-destination-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez les ConsumerStack ressources. | Exécutez la commande suivante depuis le répertoire racine du projet :<pre>cdk deploy ConsumerStack --profile destinationAccount</pre>Lorsque vous y êtes invité, acceptez les nouveaux rôles IAM et les autres autorisations liées à la sécurité créés via. CloudFormation | Développeur d’applications | 
| Vérifiez que les ConsumerStack ressources sont déployées | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Développeur d’applications | 

### Produisez et consommez des événements
<a name="produce-and-consume-events"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Appelez la fonction Producer Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Développeur d’applications | 
| Vérifiez que l'événement a bien été reçu. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Développeur d’applications | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Détruisez les ConsumerStack ressources. | Si vous utilisez ce modèle comme test, nettoyez les ressources déployées pour éviter d'encourir des coûts supplémentaires.Exécutez la commande suivante depuis le répertoire racine du projet :<pre>cdk destroy ConsumerStack --profile destinationAccount</pre>Vous serez invité à confirmer la suppression de la pile. | Développeur d’applications | 
| Détruisez les ProducerStack ressources. | Exécutez la commande suivante depuis le répertoire racine du projet :<pre>cdk destroy ProducerStack --profile sourceAccount</pre>Vous serez invité à confirmer la suppression de la pile. | Développeur d’applications | 

## Résolution des problèmes
<a name="create-cross-account-amazon-eventbridge-connection-organization-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Aucun événement n'a été reçu sur le compte Destination. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | 
| L'appel d'une fonction Lambda depuis la console renvoie l'erreur suivante : `User: arn:aws:iam::123456789012:user/XXXXX is not authorized to perform: lambda:Invoke` | Contactez votre Compte AWS administrateur pour obtenir les autorisations `lambda:Invoke` d'action appropriées sur la fonction `ProducerStack-ProducerLambdaXXXX` Lambda. | 

## Ressources connexes
<a name="create-cross-account-amazon-eventbridge-connection-organization-resources"></a>

**Références**
+ [AWS Organizations Guide de l'utilisateur](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)
+ [Modèles d' EventBridge événements Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Règles sur Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)

**Tutoriels et vidéos**
+ [Tutoriel : Création et configuration d'une organisation](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html)
+ [AWS re:Invent 2023 - Modèles avancés axés sur les événements avec Amazon (01-R) EventBridge COM3](https://www.youtube.com/watch?v=6X4lSPkn4ps)

## Informations supplémentaires
<a name="create-cross-account-amazon-eventbridge-connection-organization-additional"></a>

**Règle du producteur**

Dans le compte Source, un bus d' EventBridge événements est créé pour accepter les messages des producteurs (comme indiqué dans la section *Architecture*). Une règle associée aux autorisations IAM est créée sur ce bus d'événements. Les règles ciblent le bus d' EventBridge événements dans le compte Destination selon la `cdk.json` structure suivante :

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

Pour chaque bus d'événements consommant, le modèle d'événement et le bus d'événements cible doivent être inclus.

*Schéma d'événement*

[Les modèles d'événements](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) filtrent les événements auxquels cette règle s'applique. Aux fins de cet exemple, les sources d'événements et l'enregistrement `detail_types` identifient les événements à transmettre du bus d'événements du compte source au bus d'événements du compte de destination.

*Bus de l'événement cible*

Cette règle cible un bus d'événements qui existe dans un autre compte. Le nom complet `arn` (Amazon Resource Name) est nécessaire pour identifier de manière unique le bus d'événements cible, et `id` il s'agit de l'[ID logique](https://docs.aws.amazon.com/cdk/v2/guide/identifiers.html#identifiers_logical_ids) utilisé par AWS CloudFormation. Il n'est pas nécessaire que le bus d'événements cible existe réellement au moment de la création de la règle cible.

**Considérations spécifiques au compte de destination**

Dans le compte Destination, un bus d' EventBridge événements est créé pour recevoir les messages du bus d'événements du compte source. Pour autoriser la publication d'événements depuis le compte Source, vous devez créer une politique [basée sur les ressources](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html) :

```
{
  "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"
      }
    }
  }]
}
```

Il est particulièrement important d'accorder cette `events:PutEvents` autorisation, qui permet à tout autre compte de la même organisation de publier des événements sur ce bus d'événements. Le paramétrage `aws:PrincipalOrgId` en tant qu'identifiant de l'organisation accorde les autorisations nécessaires.

**Schéma d'événement**

Vous pouvez modifier le modèle d'événement inclus en fonction de votre cas d'utilisation :

```
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'],
    )
)
```

Pour réduire le traitement inutile, le modèle d'événements doit spécifier que seuls les événements devant être traités par le compte Destination sont transmis au bus d'événements du compte Destination.

*Politique basée sur les ressources*

Cet exemple utilise l'ID de l'organisation pour contrôler les comptes autorisés à placer des événements sur le bus d'événements du compte Destination. Envisagez d'utiliser une politique plus restrictive, telle que la spécification du compte source.

*EventBridge quotas*

Tenez compte des [quotas](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html) suivants :
+ Le quota par défaut est de 300 règles par bus d'événements. Cela peut être étendu si nécessaire, mais il doit s'adapter à la plupart des cas d'utilisation.
+ Le maximum autorisé est de cinq cibles par règle. Nous recommandons aux architectes d'applications d'utiliser une règle distincte pour chaque compte de destination afin de permettre un contrôle précis du modèle d'événements.

# Fournissez des enregistrements DynamoDB à Amazon S3 à l'aide de Kinesis Data Streams et Firehose avec AWS CDK
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk"></a>

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

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

Ce modèle fournit un exemple de code et une application permettant de transmettre des enregistrements d'Amazon DynamoDB à Amazon Simple Storage Service (Amazon S3) à l'aide d'Amazon Kinesis Data Streams et d'Amazon Data Firehose. L'approche du modèle utilise des [constructions AWS Cloud Development Kit (AWS CDK) L3](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) et inclut un exemple de la manière d'effectuer une transformation des données AWS Lambda avant que les données ne soient livrées au compartiment S3 cible sur le cloud Amazon Web Services (AWS).

Kinesis Data Streams enregistre les modifications apportées au niveau des éléments dans les tables DynamoDB et les réplique dans le flux de données Kinesis requis. Vos applications peuvent accéder au flux de données Kinesis et afficher les modifications au niveau élément en quasi-temps réel. Kinesis Data Streams donne également accès à d'autres services Amazon Kinesis, tels que Firehose et Amazon Managed Service pour Apache Flink. Cela signifie que vous pouvez créer des applications qui fournissent des tableaux de bord en temps réel, génèrent des alertes, mettent en œuvre des prix et des publicités dynamiques et effectuent des analyses de données sophistiquées.

Vous pouvez utiliser ce modèle pour vos cas d'utilisation en matière d'intégration de données. Par exemple, les véhicules de transport ou les équipements industriels peuvent envoyer de gros volumes de données vers une table DynamoDB. Ces données peuvent ensuite être transformées et stockées dans un lac de données hébergé dans Amazon S3. Vous pouvez ensuite interroger et traiter les données et prévoir tout défaut potentiel en utilisant des services sans serveur tels qu'Amazon Athena, Amazon Redshift Spectrum, Amazon Rekognition et. AWS Glue

## Conditions préalables et limitations
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-prereqs"></a>

*Conditions préalables*
+ Un actif Compte AWS.
+ AWS Command Line Interface (AWS CLI), installé et configuré. Pour plus d'informations, consultez la section [Mise en route avec le AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) dans la AWS CLI documentation.
+ Node.js (18.x\$1) et npm, installés et configurés. Pour plus d'informations, consultez la section [Téléchargement et installation de Node.js et de npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) dans la `npm` documentation.
+ aws-cdk (2.x\$1), installé et configuré. Pour plus d'informations, consultez la section [Mise en route avec le AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) dans la AWS CDK documentation.
+ Le référentiel GitHub [aws-dynamodb-kinesisfirehose-s3-ingestion](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/), cloné et configuré sur votre machine locale.
+ Exemples de données existants pour la table DynamoDB. Les données doivent utiliser le format suivant : `{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}`

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

Le schéma suivant montre un exemple de flux de travail permettant de transférer des enregistrements de DynamoDB vers Amazon S3 à l'aide de Kinesis Data Streams et Firehose.

![\[Exemple de flux de travail pour transmettre des enregistrements de DynamoDB à Amazon S3 à l'aide de Kinesis Data Streams et Firehose.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e2a9c412-312e-4900-9774-19a281c578e4/images/6e6df998-e6c2-4eaf-b263-ace752194689.png)


Le schéma suivant illustre le flux de travail suivant :

1. Les données sont ingérées à l'aide d'Amazon API Gateway en tant que proxy pour DynamoDB. Vous pouvez également utiliser n'importe quelle autre source pour ingérer des données dans DynamoDB. 

1. Les modifications au niveau des articles sont générées en temps quasi réel dans Kinesis Data Streams pour être transmises à Amazon S3.

1. Kinesis Data Streams envoie les enregistrements à Firehose pour transformation et livraison. 

1. Une fonction Lambda convertit les enregistrements d'un format d'enregistrement DynamoDB au format JSON, qui contient uniquement les noms et valeurs des attributs des éléments d'enregistrement.

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

*Services AWS*
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure cloud AWS sous forme de code.
+ [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) est un kit de développement cloud en ligne de commande qui vous permet d'interagir avec votre AWS CDK application.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir Services AWS par le biais de commandes dans votre interface de ligne de commande.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie, de bout Comptes AWS en bout Régions AWS.

*Référentiel de code*

Le code de ce modèle est disponible dans le référentiel GitHub [aws-dynamodb-kinesisfirehose-s3-ingestion](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/).

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

### Configuration et configuration de l'exemple de code
<a name="set-up-and-configure-the-sample-code"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez les dépendances. | Sur votre machine locale, installez les dépendances à partir des `package.json` fichiers des `sample-application` répertoires `pattern/aws-dynamodb-kinesisstreams-s3` et en exécutant les commandes suivantes :<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>  | Développeur d'applications, AWS général | 
| Générez le CloudFormation modèle. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Développeur d'applications, AWS général, AWS DevOps | 

### Déployez les ressources
<a name="deploy-the-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez et déployez les ressources. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Développeur d'applications, AWS général, AWS DevOps | 

### Ingérez des données dans la table DynamoDB pour tester la solution
<a name="ingest-data-into-the-dynamodb-table-to-test-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ingérez vos exemples de données dans la table DynamoDB. | Envoyez une demande à votre table DynamoDB en exécutant la commande suivante dans : AWS CLI`aws dynamodb put-item --table-name <your_table_name> --item '{"<table_partition_key>": {"S": "<partition_key_ID>"},"MessageData":{"S": "<data>"}}'`exemple :`aws dynamodb put-item --table-name SourceData_table --item '{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}'`Par défaut, le `put-item` ne renvoie aucune valeur en sortie si l'opération réussit. Si l'opération échoue, elle renvoie une erreur. Les données sont stockées dans DynamoDB puis envoyées à Kinesis Data Streams et Firehose. Vous utilisez différentes approches pour ajouter des données dans une table DynamoDB. Pour plus d'informations, consultez la section [Charger des données dans des tables](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.LoadData.html) dans la documentation DynamoDB. | Développeur d’applications | 
| Vérifiez qu'un nouvel objet est créé dans le compartiment S3. | Connectez-vous au compartiment S3 AWS Management Console et surveillez-le pour vérifier qu'un nouvel objet a été créé avec les données que vous avez envoyées. Pour plus d'informations, consultez [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)la documentation Amazon S3. | Développeur d'applications, AWS général | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| nettoyer les ressources.  | Exécutez la `cdk destroy` commande pour supprimer toutes les ressources utilisées par ce modèle. | Développeur d'applications, AWS général | 

## Ressources connexes
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-resources"></a>
+ [s-3 static-site-stack .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 dépôt)
+ [aws-apigateway-dynamodb module](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-apigateway-dynamodb) (GitHub référentiel)
+ [aws-kinesisstreams-kinesisfirehose-sModule 3](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-kinesisstreams-kinesisfirehose-s3) (GitHub référentiel)
+ [Modifier la capture des données pour DynamoDB Streams (documentation DynamoDB)](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)
+ [Utilisation de Kinesis Data Streams pour capturer les modifications apportées à DynamoDB (documentation DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html))

# Implémentez la gestion des versions d'API basée sur les chemins en utilisant des domaines personnalisés dans 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 et Abhilash Vinod, Amazon Web Services*

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

Ce modèle montre comment vous pouvez utiliser la fonctionnalité de [mappage d'API](https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-mappings.html) des [domaines personnalisés](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) pour implémenter une solution de gestion des versions d'API basée sur les chemins pour Amazon API Gateway.

Amazon API Gateway est un service entièrement géré que vous pouvez utiliser pour créer, publier, gérer, surveiller et sécuriser APIs à n'importe quelle échelle. En utilisant la fonctionnalité de domaine personnalisé du service, vous pouvez créer des noms de domaine personnalisés plus simples et plus intuitifs URLs que vous pouvez fournir aux utilisateurs de vos API. Vous pouvez utiliser les mappages d'API pour connecter les étapes d'API à un nom de domaine personnalisé. Après avoir créé un nom de domaine et configuré les enregistrements DNS, vous utilisez les mappages d'API pour envoyer du trafic vers vous APIs via votre nom de domaine personnalisé.

Une fois qu'une API est rendue publique, les consommateurs l'utilisent. À mesure qu'une API publique évolue, son contrat de service évolue également pour refléter les nouvelles fonctionnalités et capacités. Cependant, il n'est pas judicieux de modifier ou de supprimer des fonctionnalités existantes. Toute modification importante peut avoir un impact sur les applications du client et les interrompre lors de l'exécution. Le versionnement des API est important pour éviter de rompre la rétrocompatibilité et de rompre un contrat.

Vous avez besoin d'une stratégie claire pour le versionnement des API afin d'aider les consommateurs à les adopter. La gestion APIs des versions basée sur les chemins URLs est l'approche la plus simple et la plus couramment utilisée. Dans ce type de versionnement, les versions sont explicitement définies dans le cadre de l'API URIs. L'exemple suivant URLs montre comment un consommateur peut utiliser l'URI pour spécifier une version d'API pour sa demande :

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

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

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

Ce modèle utilise le AWS Cloud Development Kit (AWS CDK) pour créer, déployer et tester un exemple d'implémentation d'une solution de version évolutive basée sur les chemins pour votre API. AWS CDK est un framework de développement de logiciels open source permettant de modéliser et de provisionner les ressources de vos applications cloud à l'aide de langages de programmation familiers.

## Conditions préalables et limitations
<a name="implement-path-based-api-versioning-by-using-custom-domains-prereqs"></a>

**Prérequis**
+ Un actif Compte AWS.
+ La propriété d'un domaine est requise pour utiliser le référentiel d'exemples de ce modèle et pour utiliser les fonctionnalités de domaine personnalisées d'Amazon API Gateway. Vous pouvez utiliser Amazon Route 53 pour créer et gérer les domaines de votre organisation. Pour plus d'informations sur l'enregistrement ou le transfert d'un domaine avec Route 53, consultez la section [Enregistrement de nouveaux domaines](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register-update.html) dans la documentation Route 53.
+ Avant de configurer un nom de domaine personnalisé pour une API, vous devez disposer d'un [certificat SSL/TLS](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-specify-certificate-for-custom-domain-name.html). AWS Certificate Manager
+ Vous devez créer ou mettre à jour l’enregistrement de ressource de votre fournisseur DNS pour le mapper au point de terminaison de votre API. Sans un tel mappage, les demandes d'API liées au nom de domaine personnalisé ne peuvent pas atteindre API Gateway.

**Limites**
+ Un nom de domaine personnalisé doit être unique au sein d'un Région AWS ensemble Comptes AWS.
+ Pour configurer des mappages d’API à plusieurs niveaux, vous devez utiliser un nom de domaine personnalisé régional et la politique de sécurité TLS 1.2.
+ Dans un mappage d'API, le nom de domaine personnalisé et le nom de domaine mappé APIs doivent être identiques Compte AWS.
+ Les mappages d'API ne doivent contenir que des lettres, des chiffres et les caractères suivants : `$-_.+!*'()/`
+ La longueur maximale du chemin d’un mappage d’API est de 300 caractères.
+ Vous pouvez disposer de 200 mappages d’API à plusieurs niveaux pour chaque nom de domaine.
+ Vous ne pouvez APIs mapper HTTP à un nom de domaine personnalisé régional qu'avec la politique de sécurité TLS 1.2.
+ Vous ne pouvez pas WebSocket APIs mapper vers le même nom de domaine personnalisé qu'une API HTTP ou une API REST.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [AWS Services par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

**Versions du produit**
+ Cet exemple d'implémentation est utilisé [AWS CDK dans la TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) version 2.149.0.

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

Le schéma suivant montre le flux de travail de l'architecture.

![\[Flux de travail utilisant des mappages d'API et des domaines personnalisés pour implémenter une solution de gestion des versions d'API basée sur les chemins.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e1b32d2b-410f-4ace-967e-f0b8aaf0304c/images/fa9f04f1-efa6-4fb1-a541-ae3da4076b00.png)


Le diagramme illustre les éléments suivants :

1. L'utilisateur de l'API envoie une demande à Amazon API Gateway avec un nom de domaine personnalisé.

1. API Gateway achemine dynamiquement la demande de l'utilisateur vers une instance et une étape appropriées d'API Gateway, en fonction du chemin indiqué dans l'URL de la demande. Le tableau suivant montre un exemple de la manière dont les différents chemins basés sur des URL peuvent être routés vers des étapes spécifiques pour différentes instances d'API Gateway.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/implement-path-based-api-versioning-by-using-custom-domains.html)

1. L'instance API Gateway de destination traite la demande et renvoie le résultat à l'utilisateur.

**Automatisation et évolutivité**

Nous vous recommandons d'utiliser des AWS CloudFormation piles distinctes pour chaque version de votre API. Avec cette approche, vous pouvez obtenir une isolation complète entre le backend vers APIs lequel la fonction de mappage d'API de domaine personnalisée peut être acheminée. L'avantage de cette approche est que différentes versions de votre API peuvent être déployées ou supprimées indépendamment sans risque de modification d'une autre API. Cette approche augmente la résilience en isolant les CloudFormation piles. En outre, il vous fournit différentes options de back-end pour votre API AWS Lambda AWS Fargate, telles que les points de terminaison HTTP et les actions de. Services AWS

Vous pouvez utiliser des stratégies de branchement Git, telles que [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/gitflow-branching-strategy.html), en combinaison avec des CloudFormation piles isolées pour gérer le code source déployé sur différentes versions de l'API. En utilisant cette option, vous pouvez gérer différentes versions de votre API sans avoir à dupliquer le code source pour les nouvelles versions. Avec Gitflow, vous pouvez ajouter des balises aux commits dans votre dépôt git au fur et à mesure que les versions sont effectuées. Par conséquent, vous disposez d'un instantané complet du code source associé à une version spécifique. Lorsque des mises à jour doivent être effectuées, vous pouvez extraire le code d'une version spécifique, effectuer des mises à jour, puis déployer le code source mis à jour sur la CloudFormation pile correspondant à la version majeure correspondante. Cette approche réduit le risque de rupture d'une autre version d'API, car chaque version de l'API possède un code source isolé et est déployée sur des CloudFormation piles distinctes.

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

**Services AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) vous aide à créer, publier, gérer, surveiller et sécuriser REST, HTTP, et ce, WebSocket APIs à n'importe quelle échelle.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) vous aide à créer, à stocker et à renouveler des certificats et clés SSL/TLS X.509 publics et privés qui protègent vos AWS sites Web et vos applications.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)est un framework de développement logiciel open source permettant de définir votre infrastructure cloud dans le code et de la provisionner via ce dernier. CloudFormation L'exemple d'implémentation de ce modèle utilise le [AWS CDK in TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html). L'utilisation du AWS CDK in TypeScript utilise des outils familiers, notamment le TypeScript compilateur Microsoft (`tsc`), [Node.js](https://nodejs.org/) et le gestionnaire de packages de nœuds (`npm`). Si vous préférez, vous pouvez utiliser [Yarn](https://yarnpkg.com/), bien que les exemples de ce modèle l'utilisent`npm`. Les modules qui composent la [bibliothèque AWS Construct](https://docs.aws.amazon.com/cdk/v2/guide/libraries.html#libraries-construct) sont distribués via le `npm ` référentiel [npmjs.org](https://docs.npmjs.com/).
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie à travers Comptes AWS et Régions AWS.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) est un service Web DNS hautement disponible et évolutif.
+ [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html)est un pare-feu d'applications Web qui vous aide à surveiller les requêtes HTTP et HTTPS qui sont transmises aux ressources protégées de votre application Web.

**Autres outils**
+ [Bruno](https://www.usebruno.com/) est un client de test d'API open source et convivial pour Git.
+ [cdk-nag](https://github.com/cdklabs/cdk-nag) est un utilitaire open source qui vérifie les meilleures pratiques des AWS CDK applications à l'aide de packs de règles.

**Référentiel de code**

Le code de ce modèle est disponible dans le dépôt GitHub [path-based-versioning-with-api-gateway](https://github.com/aws-samples/path-based-versioning-with-api-gateway).

## Bonnes pratiques
<a name="implement-path-based-api-versioning-by-using-custom-domains-best-practices"></a>
+ Utilisez un pipeline robuste d'intégration continue et de livraison continue (CI/CD) pour automatiser les tests et le déploiement de vos CloudFormation piles conçues avec le. AWS CDK Pour plus d'informations relatives à cette recommandation, consultez le guide [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html).
+ AWS WAF est un pare-feu géré qui s'intègre facilement à des services tels qu'Amazon API Gateway. Bien qu'il AWS WAF ne s'agisse pas d'un composant nécessaire au bon fonctionnement de ce modèle de version, nous vous recommandons de l'inclure dans API Gateway en tant que bonne pratique AWS WAF de sécurité.
+ Encouragez les utilisateurs d'API à passer régulièrement à la dernière version de votre API afin que les anciennes versions de votre API puissent être déconseillées et supprimées efficacement.
+ Avant d'utiliser cette approche dans un environnement de production, implémentez un pare-feu et une stratégie d'autorisation pour votre API.
+ Implémentez l'accès à la gestion de vos AWS ressources Compte AWS en utilisant le modèle d'[accès avec le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ Pour appliquer les meilleures pratiques et les recommandations de sécurité aux applications créées avec le AWS CDK, nous vous recommandons d'utiliser l'utilitaire [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). 

## Épopées
<a name="implement-path-based-api-versioning-by-using-custom-domains-epics"></a>

### Préparez votre environnement local
<a name="prepare-your-local-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner le référentiel d'applications d'exemple, exécutez la commande suivante :<pre>git clone https://github.com/aws-samples/path-based-versioning-with-api-gateway</pre> | Développeur d’applications | 
| Accédez au référentiel cloné. | Pour accéder à l'emplacement du dossier du référentiel cloné, exécutez la commande suivante : <pre>cd api-gateway-custom-domain-versioning</pre> | Développeur d’applications | 
| Installez les dépendances obligatoires. | Pour installer les dépendances requises, exécutez la commande suivante :<pre>npm install </pre> | Développeur d’applications | 

### Déployer la pile CloudFormation de routage
<a name="deploy-the-cfnshort-routing-stack"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Lancez le déploiement de la pile de routage. | Pour lancer le déploiement de la pile de CloudFormation routage`CustomDomainRouterStack`, exécutez la commande suivante, en la `example.com` remplaçant par le nom du domaine que vous possédez :<pre>npx cdk deploy CustomDomainRouterStack --parameters PrerequisiteDomainName=example.com</pre>Le déploiement de la pile ne réussira pas tant que la tâche de validation DNS du domaine suivante n'aura pas été exécutée avec succès. | Développeur d’applications | 

### Vérifier la propriété du domaine
<a name="verify-domain-ownership"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez la propriété de votre domaine. | Le certificat restera dans le statut En **attente de validation** jusqu'à ce que vous prouviez que vous êtes propriétaire du domaine associé. Pour prouver que vous en êtes le propriétaire, ajoutez des enregistrements CNAME à la zone hébergée associée au domaine. Pour plus d'informations, consultez la section [Validation DNS](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) dans la AWS Certificate Manager documentation. L'ajout des enregistrements appropriés permet au `CustomDomainRouterStack` déploiement de réussir. | Développeur d'applications, administrateur système AWS, administrateur réseau | 
| Créez un enregistrement d'alias pour pointer vers votre domaine personnalisé API Gateway. | Une fois le certificat émis et validé avec succès, [créez un enregistrement DNS](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-create.html#apigateway-regional-api-custom-domain-dns-record) qui pointe vers l'URL de votre domaine personnalisé Amazon API Gateway. L'URL du domaine personnalisé est générée de manière unique par le provisionnement du domaine personnalisé et est spécifiée en tant que paramètre CloudFormation de sortie. Voici un [exemple de record](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-basic.html) : **Politique de routage** : routage simple**Nom de l'enregistrement** : `demo.api-gateway-custom-domain-versioning.example.com`**Alias** : Oui**Type d'enregistrement** : enregistrement DNS de type « A » qui pointe vers une AWS ressource**Value (Valeur)** : `d-xxxxxxxxxx.execute-api.xx-xxxx-x.amazonaws.com`**TTL (secondes)** : 300 | Développeur d'applications, administrateur système AWS, administrateur réseau | 

### Déployez CloudFormation des piles et appelez l'API
<a name="deploy-cfnshort-stacks-and-invoke-the-api"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez la `ApiStackV1` pile. | Pour déployer la `ApiStackV1` pile, utilisez la commande suivante :<pre>npm run deploy-v1</pre>Le code CDK suivant ajoute un mappage d'API :<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> | Développeur d’applications | 
| Déployez la `ApiStackV2` pile. | Pour déployer la `ApiStackV2` pile, utilisez la commande suivante :<pre>npm run deploy-v2</pre> | Développeur d’applications | 
| Appelez l'API. | Pour appeler l'API et tester les points de terminaison de l'API à l'aide de Bruno, consultez les instructions de la section [Informations supplémentaires](#implement-path-based-api-versioning-by-using-custom-domains-additional). | Développeur d’applications | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| nettoyer les ressources. | Pour détruire les ressources associées à cet exemple d'application, utilisez la commande suivante :<pre>npx cdk destroy --all</pre>Assurez-vous de nettoyer tous les enregistrements DNS Route 53 ajoutés manuellement pour le processus de vérification de la propriété du domaine. | Développeur d’applications | 

## Résolution des problèmes
<a name="implement-path-based-api-versioning-by-using-custom-domains-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Le déploiement `CustomDomainRouterStack` expire car le certificat ne peut pas être validé. | Assurez-vous d'avoir ajouté les enregistrements CNAME de validation DNS appropriés, comme décrit dans la tâche précédente. Votre nouveau certificat peut continuer à afficher le statut **En attente de validation** jusqu'à 30 minutes après l'ajout des enregistrements de validation DNS. Pour plus d'informations, consultez la section [Validation DNS](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) dans la AWS Certificate Manager documentation. | 

## Ressources connexes
<a name="implement-path-based-api-versioning-by-using-custom-domains-resources"></a>
+ [Implémentation du versionnement d'API Gateway basé sur les en-têtes avec Amazon CloudFront](https://aws.amazon.com/blogs/compute/implementing-header-based-api-gateway-versioning-with-amazon-cloudfront/) — Ce billet de AWS Compute Blog propose une stratégie de gestion des versions basée sur les en-têtes comme alternative à la stratégie de version basée sur les chemins décrite dans ce modèle.
+ [AWS CDK Atelier](https://cdkworkshop.com/20-typescript.html) — Cet atelier d'introduction se concentre sur la création et le déploiement d'applications AWS à l'aide du AWS Cloud Development Kit (AWS CDK). Cet atelier prend en charge Go, Python et TypeScript. 

## Informations supplémentaires
<a name="implement-path-based-api-versioning-by-using-custom-domains-additional"></a>

**Tester votre API avec Bruno**

Nous vous recommandons d'utiliser [Bruno](https://www.usebruno.com/), un outil de test d'API open source, pour vérifier que le routage basé sur le chemin fonctionne correctement pour l'exemple d'application. Ce modèle fournit une collecte d'échantillons pour faciliter le test de votre exemple d'API.

Pour appeler et tester votre API, procédez comme suit :

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

1. Ouvrez Bruno.

1. Dans le [référentiel de code](https://github.com/aws-samples/path-based-versioning-with-api-gateway) de ce modèle, sélectionnez **Bruno/sample-API- Gateway-Custom-Domain-Versioning ** et ouvrez la collection.

1. Pour voir le menu déroulant **Environnements** en haut à droite de l'interface utilisateur (UI), sélectionnez une demande dans la collection.

1. Dans le menu déroulant **Environnements**, sélectionnez **Configurer**.

1. Remplacez la `REPLACE_ME_WITH_YOUR_DOMAIN` valeur par votre domaine personnalisé.

1. Choisissez **Enregistrer**, puis fermez la section **Configuration**.

1. Pour **l'environnement Sandbox**,**** vérifiez que l'option **Active** est sélectionnée.

1. Appelez votre API en utilisant le bouton **->** pour la demande sélectionnée.

1. Prenez note de la façon dont la validation (transmission de valeurs non numériques) est gérée dans V1 par rapport à V2.

Pour voir des captures d'écran d'un exemple d'appel d'API et une comparaison des validations V1 et V2, voir **Tester votre exemple d'API** dans le `README.md` fichier du [référentiel de code](https://github.com/aws-samples/path-based-versioning-with-api-gateway) de ce modèle.

# Importez la bibliothèque psycopg2 pour interagir avec votre base AWS Lambda de données PostgreSQL
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

## Résumé
<a name="import-psycopg2-library-lambda-summary"></a>

[Psycopg](https://www.psycopg.org/docs/) est un adaptateur de base de données PostgressQL pour Python. Les développeurs utilisent la `psycopg2` bibliothèque pour écrire des applications Python qui interagissent avec les bases de données PostgreSQL.

Sur Amazon Web Services (AWS), les développeurs exécutent également du code pour des applications ou des services de backend. [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) Lambda est un service de calcul sans serveur piloté par les événements qui exécute du code sans qu'il soit nécessaire de provisionner ou de gérer des serveurs.

Par défaut, lorsque vous créez une nouvelle fonction qui utilise un environnement [d'exécution Python pris en charge par Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html), l'environnement d'exécution Lambda est créé à partir d'une [image de base pour Lambda](https://github.com/aws/aws-lambda-base-images) fournie par. AWS Les bibliothèques, telles que `pandas` ou`psycopg2`, ne sont pas incluses dans l'image de base. Pour utiliser une bibliothèque, vous devez la regrouper dans un package personnalisé et l'associer à Lambda.

Il existe plusieurs méthodes pour regrouper et associer une bibliothèque, notamment les suivantes :
+ Déployez votre fonction Lambda à partir d'une archive de [fichier .zip.](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html)
+ Déployez votre fonction Lambda à partir d'une image de conteneur personnalisée.
+ Créez une [couche Lambda](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions) et attachez-la à votre fonction Lambda.

Ce modèle illustre les deux premières options.

Avec un package de déploiement .zip, l'ajout de la `pandas` bibliothèque à votre fonction Lambda est relativement simple. Créez un dossier sur votre machine Linux, ajoutez le script Lambda ainsi que la `pandas` bibliothèque et les dépendances de la bibliothèque au dossier, compressez le dossier et fournissez-le comme source pour votre fonction Lambda.

Bien que l'utilisation d'un package de déploiement .zip soit une pratique courante, cette approche ne fonctionne pas pour la `psycopg2` bibliothèque. Ce modèle montre d'abord l'erreur que vous obtenez si vous utilisez un package de déploiement .zip pour ajouter la `psycopg2` bibliothèque à votre fonction Lambda. Le modèle montre ensuite comment déployer Lambda à partir d'un Dockerfile et modifier l'image Lambda pour faire fonctionner la bibliothèque. `psycopg2`

Pour plus d'informations sur les trois ressources déployées par le modèle, consultez la section [Informations supplémentaires](#import-psycopg2-library-lambda-additional).

## Conditions préalables et limitations
<a name="import-psycopg2-library-lambda-prereqs"></a>

**Prérequis**
+ Un actif Compte AWS disposant des autorisations suffisantes pour déployer les AWS ressources utilisées par ce modèle
+ AWS Cloud Development Kit (AWS CDK) installé globalement en exécutant `npm install -g aws-cdk`
+ Un client Git
+ Python
+ Docker

**Limites**
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez la page [Points de terminaison et quotas du service](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien vers le service.

**Versions du produit**
+ Version d'exécution de Python [prise en charge par Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Version 2.9.3 de Psycopg2
+ Version 1.5.2 des Pandas

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

**Présentation de la solution**

Pour illustrer les défis auxquels vous pourriez être confronté lors de l'utilisation de la `psycopg2` bibliothèque dans Lambda, le modèle déploie deux fonctions Lambda :
+ Une fonction Lambda avec le moteur d'exécution Python créée à partir d'un fichier .zip. Les `pandas` bibliothèques `psycopg2` et sont installées dans ce package de déploiement .zip à l'aide de [pip](https://pypi.org/project/pip/).
+ Une fonction Lambda avec le runtime Python créée à partir d'un Dockerfile. Le Dockerfile installe les `pandas` bibliothèques `psycopg2` et dans l'image du conteneur Lambda.

La première fonction Lambda installe la `pandas` bibliothèque et ses dépendances dans un fichier .zip, et Lambda peut utiliser cette bibliothèque.

La deuxième fonction Lambda montre qu'en créant une image de conteneur pour votre fonction Lambda, vous pouvez exécuter les `pandas` bibliothèques `psycopg2` et dans Lambda.

## Outils
<a name="import-psycopg2-library-lambda-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure cloud AWS sous forme de code.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.

**Autres outils**
+ [Docker](https://www.docker.com/) est un ensemble de produits de plateforme en tant que service (PaaS) qui utilisent la virtualisation au niveau du système d'exploitation pour fournir des logiciels dans des conteneurs.
+ [pandas](https://pandas.pydata.org/) est un outil open source basé sur Python pour l'analyse et la manipulation de données.
+ [Psycopg](https://www.psycopg.org/docs/) est un adaptateur de base de données PostgreSQL pour le langage Python conçu pour les applications multithread. Ce modèle utilise Psycopg 2.
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.

**Référentiel de code**

Le code de ce modèle est disponible dans le dépôt [import-psycopg2](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) - - sur. in-lambda-to-interact with-postgres-database GitHub

## Bonnes pratiques
<a name="import-psycopg2-library-lambda-best-practices"></a>

Ce modèle vous fournit un exemple pratique d'utilisation AWS CDK pour créer une fonction Lambda à partir d'un Dockerfile. Si vous réutilisez ce code dans votre application, assurez-vous que les ressources déployées répondent à toutes les exigences de sécurité. Utilisez des outils tels que [Checkov](https://www.checkov.io/), qui analyse les configurations de l'infrastructure cloud pour détecter les erreurs de configuration avant le déploiement de l'infrastructure.

## Épopées
<a name="import-psycopg2-library-lambda-epics"></a>

### Cloner le référentiel et configurer le déploiement
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner le GitHub dépôt sur votre machine locale, exécutez les commandes suivantes :<pre>git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git<br />cd AWS-lambda-psycopg2</pre> | AWS général | 
| Configurez votre déploiement. | Modifiez le `app.py` fichier contenant les informations relatives à Compte AWS :<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> | AWS général | 

### Démarrez votre compte AWS et déployez l'application
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Bootstrap votre. Compte AWS | Si vous n'avez pas encore [amorcé votre environnement AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html), exécutez les commandes suivantes avec les AWS informations d'identification de votre AWS compte :<pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | AWS général | 
| Déployez le code. | Pour déployer l' AWS CDK application, exécutez la commande suivante :<pre>cdk deploy AWSLambdaPyscopg2</pre> | AWS général | 

### Testez les fonctions Lambda depuis l'AWS Management Console
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez la fonction Lambda créée à partir du fichier .zip. | Pour tester la fonction Lambda créée à partir du fichier .zip, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Comme Lambda ne trouve pas les bibliothèques PostgreSQL requises dans l'image par défaut, il ne peut pas utiliser la bibliothèque. `psycopg2` | AWS général | 
| Testez la fonction Lambda créée à partir du Dockerfile. | Pour utiliser la `psycopg2` bibliothèque dans votre fonction Lambda, vous devez modifier l'image Lambda Amazon Machine (AMI).Pour tester la fonction Lambda créée à partir du Dockerfile, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Le code suivant montre le Dockerfile créé par le AWS CDK modèle :<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>Le Dockerfile prend l'image AWS Lambda fournie pour le runtime Python et installe [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/postgresql-devel/), qui contient les bibliothèques nécessaires pour compiler les applications qui interagissent directement avec le serveur de gestion PostgreSQL. Le Dockerfile installe également les `psycopg2` bibliothèques `pandas` et, qui sont indiquées dans le fichier. `requirements.txt` | AWS général | 

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

## Informations supplémentaires
<a name="import-psycopg2-library-lambda-additional"></a>

Dans ce modèle, le AWS CDK modèle fournit une AWS pile de trois ressources :
+ Rôle [Gestion des identités et des accès AWS (IAM) pour les fonctions](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) Lambda.
+ Une fonction Lambda avec un environnement d'exécution Python. La fonction est déployée à partir du package `Constructs/lambda/lambda_deploy.zip` de déploiement.
+ Une fonction Lambda avec un environnement d'exécution Python. La fonction est déployée à partir du Dockerfile situé sous le dossier `Constructs`

Le script des deux fonctions Lambda vérifie si les `psycopg2` bibliothèques `pandas` et sont correctement importées :

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

Le package `lambda_deploy.zip` de déploiement est créé avec le script `Constructs/lambda/build.sh` bash. Ce script crée un dossier, copie le script Lambda, installe les `psycopg2` bibliothèques `pandas` et et génère le fichier .zip. Pour générer vous-même le fichier .zip, exécutez ce script bash et redéployez la pile. AWS CDK 

Le Dockerfile commence par l'image de base AWS fournie pour Lambda avec un environnement d'exécution Python. Le Dockerfile installe les `psycopg2` bibliothèques `pandas` et au-dessus de l'image par défaut.

# Intégrez Amazon API Gateway à Amazon SQS pour gérer le REST asynchrone APIs
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis"></a>

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

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

Lorsque vous déployez REST APIs, vous devez parfois exposer une file de messages que les applications clientes peuvent publier. Par exemple, vous pouvez rencontrer des problèmes liés à la latence des tiers APIs et aux retards dans les réponses, ou vous pouvez vouloir éviter le temps de réponse des requêtes de base de données ou éviter de dimensionner le serveur en cas de grand nombre de requêtes simultanées APIs. Dans ces scénarios, les applications clientes qui publient dans la file d'attente doivent uniquement savoir que l'API a reçu les données, et non pas ce qui se passe après réception des données.

Ce modèle crée un point de terminaison d'API REST en utilisant [Amazon API Gateway](https://aws.amazon.com/api-gateway/) pour envoyer un message à [Amazon Simple Queue Service (Amazon SQS](https://aws.amazon.com/sqs/)). Cela crée une easy-to-implement intégration entre les deux services qui évite l'accès direct à la file d'attente SQS.

## Conditions préalables et limitations
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-prereqs"></a>
+ Un [AWS compte actif](https://portal.aws.amazon.com/billing/signup/iam)

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

![\[Architecture d'intégration d'API Gateway à Amazon SQS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/70984dee-e49f-4446-9d52-49ce826c3909/images/737ba0b2-da8f-4478-8c54-0a4835fd69f9.png)


Le schéma illustre les étapes suivantes :

1. Demandez un point de terminaison d'API POST REST à l'aide d'un outil tel que Postman, d'une autre API ou d'autres technologies.

1. API Gateway publie un message, qui est reçu dans le corps de la demande, dans la file d'attente.

1. Amazon SQS reçoit le message et envoie une réponse à API Gateway avec un code de réussite ou d'échec.

## Outils
<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) vous aide à créer, publier, gérer, surveiller et sécuriser REST, HTTP, et ce, WebSocket APIs à n'importe quelle échelle.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) fournit une file d'attente hébergée sécurisée, durable et disponible qui vous permet d'intégrer et de dissocier les systèmes et composants logiciels distribués.   

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

### Création d'une file d'attente SQS
<a name="create-an-sqs-queue"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une file d'attente. | Pour créer une file d'attente SQS qui reçoit les messages de l'API REST :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Développeur d’applications | 

### Fournir un accès à Amazon SQS
<a name="provide-access-to-sqs"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un rôle IAM. | Ce rôle IAM donne aux ressources d'API Gateway un accès complet à Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Développeur d'applications, administrateur AWS | 

### Création d'une API REST
<a name="create-a-rest-api"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une API REST. | Il s'agit de l'API REST à laquelle les requêtes HTTP sont envoyées.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Développeur d’applications | 
| Connectez API Gateway à Amazon SQS. | Cette étape permet au message de circuler depuis le corps de la requête HTTP vers Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Développeur d’applications | 

### Testez l'API REST
<a name="test-the-rest-api"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez l'API REST. | Exécutez un test pour vérifier s'il n'y a pas de configuration manquante :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Développeur d’applications | 
| Modifiez l'intégration de l'API pour transmettre correctement la demande à Amazon SQS. | Complétez la configuration pour corriger l'erreur d'intégration :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Développeur d’applications | 
| Testez et validez le message dans Amazon SQS. | Exécutez un test pour confirmer qu'il s'est bien déroulé :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Développeur d’applications | 
| Testez API Gateway avec un caractère spécial. | Exécutez un test qui inclut des caractères spéciaux (tels que &) qui ne sont pas acceptables dans un message :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)Cela est dû au fait que les caractères spéciaux ne sont pas pris en charge par défaut dans le corps du message. À l'étape suivante, vous allez configurer API Gateway pour qu'il prenne en charge les caractères spéciaux. Pour plus d'informations sur les conversions par type de contenu, consultez la [documentation d'API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html). | Développeur d’applications | 
| Modifiez la configuration de l'API pour prendre en charge les caractères spéciaux. | Ajustez la configuration pour accepter les caractères spéciaux dans le message :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)Le nouveau message doit inclure le caractère spécial. | Développeur d’applications | 

### Déployer l'API REST
<a name="deploy-the-rest-api"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez l'API. |  Pour déployer l'API REST :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Développeur d’applications | 
| Testez avec un outil externe. | Effectuez un test avec un outil externe pour vérifier que le message a bien été reçu :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Développeur d’applications | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez l'API. | Sur la [console API Gateway](https://console.aws.amazon.com/apigateway/), choisissez l'API que vous avez créée, puis choisissez **Delete**. | Développeur d’applications | 
| Supprimez le rôle IAM. | **Sur la [console IAM](https://console.aws.amazon.com/iam/), dans le volet **Rôles**, sélectionnez **AWSGatewayRoleForSQS**, puis choisissez Supprimer.** | Développeur d’applications | 
| Supprimez la file d'attente SQS. | **Sur la [console Amazon SQS](https://console.aws.amazon.com/sqs/), dans le volet **Queues**, choisissez la file d'attente SQS que vous avez créée, puis choisissez Supprimer.** | Développeur d’applications | 

## Ressources connexes
<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) (documentation API Gateway)
+ [Conversions de type de contenu dans API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html) (documentation API Gateway)
+ [variables \$1util](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#util-template-reference) (documentation API Gateway)
+ [Comment intégrer une API REST API Gateway à Amazon SQS et résoudre les erreurs courantes ?](https://repost.aws/knowledge-center/api-gateway-rest-api-sqs-errors) (AWS Re:publier l'article)

# Traitez les événements de manière asynchrone avec Amazon API Gateway et AWS Lambda
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda"></a>

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

## Résumé
<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) est un service entièrement géré que les développeurs peuvent utiliser pour créer, publier, gérer, surveiller et sécuriser APIs à n'importe quelle échelle. Il gère les tâches liées à l'acceptation et au traitement de centaines de milliers d'appels d'API simultanés.

Le délai d'intégration est un quota de service important pour API Gateway. Le délai d'attente est le délai maximal pendant lequel un service principal doit renvoyer une réponse avant que l'API REST ne renvoie une erreur. La limite stricte de 29 secondes est généralement acceptable pour les charges de travail synchrones. Toutefois, cette limite représente un défi pour les développeurs qui souhaitent utiliser API Gateway avec des charges de travail asynchrones.

Ce modèle montre un exemple d'architecture permettant de traiter les événements de manière asynchrone à l'aide d'API Gateway et. AWS Lambda L'architecture prend en charge l'exécution de tâches de traitement d'une durée maximale de 15 minutes et utilise une API REST de base comme interface.

[Projen](https://pypi.org/project/projen/) [est utilisé pour configurer l'environnement de développement local et pour déployer l'exemple d'architecture sur une cible Compte AWS, en combinaison avec le [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html), [Docker](https://docs.docker.com/get-docker/) et Node.js.](https://nodejs.org/en/download/) Projen configure automatiquement un environnement virtuel [Python](https://www.python.org/downloads/) avec le [pré-commit](https://pre-commit.com/) et les outils utilisés pour l'assurance qualité du code, l'analyse de sécurité et les tests unitaires. Pour plus d'informations, consultez la section [Outils](#process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-tools).

## Conditions préalables et limitations
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-prereqs"></a>

**Prérequis**
+ Un actif Compte AWS
+ Les outils suivants sont installés sur votre poste de travail :
  + [AWS Cloud Development Kit (AWS CDK) Boîte à outils](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) version 2.85.0
  + Version 20.10.21 de [Docker](https://docs.docker.com/get-docker/)
  + Version 18.13.0 de [Node.js](https://nodejs.org/en/download/)
  + Version [du projet 0.71.111](https://pypi.org/project/projen/)
  + Version 3.9.16 de [Python](https://www.python.org/downloads/)

**Limites**
+ Le temps d'exécution maximal d'une tâche est limité par le temps d'exécution maximal des fonctions Lambda (15 minutes).
+ Le nombre maximum de demandes de travail simultanées est limité par la simultanéité réservée de la fonction Lambda.

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

Le schéma suivant montre l'interaction de l'API jobs avec les fonctions Lambda de traitement des événements et de gestion des erreurs, les événements étant stockés dans une archive d'événements Amazon. EventBridge 

![\[AWS Cloud architecture showing user interaction with jobs API, Lambda functions, and EventBridge.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e027130c-44c1-41ab-bbe9-f196a49bd9ac/images/3c437b65-48e3-477d-aeea-6ff938cc3285.png)


Un flux de travail typique comprend les étapes suivantes :

1. Vous vous authentifiez auprès de Gestion des identités et des accès AWS (IAM) et obtenez des informations d'identification de sécurité.

1. Vous envoyez une `POST` requête HTTP au point de terminaison de l'API des `/jobs` tâches, en spécifiant les paramètres de la tâche dans le corps de la demande.

1. L'API jobs, qui est une API REST API Gateway, vous renvoie une réponse HTTP contenant l'identifiant de la tâche.

1. L'API jobs appelle de manière asynchrone la fonction Lambda de traitement des événements.

1. La fonction de traitement des événements traite l'événement, puis place les résultats de la tâche dans la table Amazon DynamoDB de la tâche

1. Vous envoyez une `GET` requête HTTP au point de terminaison de l'API des `/jobs/{jobId}` tâches, avec l'identifiant de tâche de l'étape 3 sous la forme`{jobId}`.

1. L'API des tâches interroge la table `jobs` DynamoDB pour récupérer les résultats des tâches.

1. L'API des tâches renvoie une réponse HTTP contenant les résultats des tâches.

1. Si le traitement des événements échoue, la fonction de traitement des événements envoie l'événement à la fonction de gestion des erreurs.

1. La fonction de gestion des erreurs place les paramètres de la tâche dans la table DynamoDB`jobs`.

1. Vous pouvez récupérer les paramètres des tâches en envoyant une `GET` requête HTTP au point de terminaison de l'API `/jobs/{jobId}` des tâches.

1. Si la gestion des erreurs échoue, la fonction de gestion des erreurs envoie l'événement à une archive d' EventBridge événements.

   Vous pouvez rejouer les événements archivés en utilisant EventBridge.

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

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner AWS Cloud l'infrastructure dans le code.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, les fonctions Lambda, les points de terminaison d'appel HTTP utilisant des destinations d'API ou les bus d'événements dans d'autres domaines. Comptes AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.

**Autres outils**
+ [autopep8 formate](https://github.com/hhatto/autopep8) automatiquement le code Python en fonction du guide de style de la Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) scanne le code Python pour détecter les problèmes de sécurité courants.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) est un vérificateur et un générateur de commit Git. `CHANGELOG`
+ [cfn-lint est un linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) est un outil d'analyse de code statique qui vérifie l'infrastructure en tant que code (IaC) pour détecter les erreurs de configuration liées à la sécurité et à la conformité.
+ [jq](https://stedolan.github.io/jq/download/) est un outil en ligne de commande pour analyser le JSON.
+ [Postman](https://www.postman.com/) est une plateforme d'API.
+ [pre-commit](https://pre-commit.com/) est un gestionnaire de hooks Git.
+ [Projen](https://github.com/projen/projen) est un générateur de projets.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) est un framework Python pour écrire de petits tests lisibles.

**Référentiel de code**

Cet exemple de code d'architecture se trouve dans le référentiel GitHub [Asynchronous Event Processing with API Gateway and Lambda](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk).

## Bonnes pratiques
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-best-practices"></a>
+ Cet exemple d'architecture n'inclut pas la surveillance de l'infrastructure déployée. Si votre cas d'utilisation nécessite une surveillance, évaluez l'ajout de [constructions de surveillance CDK](https://constructs.dev/packages/cdk-monitoring-constructs) ou d'une autre solution de surveillance.
+ Cet exemple d'architecture utilise [les autorisations IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) pour contrôler l'accès à l'API des tâches. Toute personne autorisée à assumer le `JobsAPIInvokeRole` sera en mesure d'invoquer l'API jobs. Le mécanisme de contrôle d'accès est donc binaire. Si votre cas d'utilisation nécessite un modèle d'autorisation plus complexe, évaluez-le à l'aide d'un autre [mécanisme de contrôle d'accès](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html).
+ Lorsqu'un utilisateur envoie une `POST` requête HTTP au point de terminaison de l'API `/jobs` jobs, les données d'entrée sont validées à deux niveaux différents :
  + Amazon API Gateway est chargé de la [validation de la première demande](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La fonction de traitement des événements exécute la deuxième demande.

    Aucune validation n'est effectuée lorsque l'utilisateur envoie une `GET` requête HTTP au point de terminaison de l'API `/jobs/{jobId}` des tâches. Si votre cas d'utilisation nécessite une validation des entrées supplémentaire et un niveau de sécurité accru, évaluez [l'utilisation d'AWS WAF pour protéger votre API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).

## Épopées
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-epics"></a>

### Configuration de l'environnement
<a name="set-up-the-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner le dépôt localement, exécutez la commande suivante :<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk.git</pre> | DevOps ingénieur | 
| Configurez le projet. | Remplacez le répertoire par la racine du référentiel et configurez l'environnement virtuel Python et tous les outils à l'aide de [Projen :](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-lambda-cdk<br />npx projen</pre> | DevOps ingénieur | 
| Installez des hooks de pré-validation. | Pour installer des hooks de pré-validation, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | DevOps ingénieur | 

### Déployez l'exemple d'architecture
<a name="deploy-the-example-architecture"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Pour démarrer votre AWS CDK compte Compte AWS, exécutez la commande suivante :<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Déployez l'exemple d'architecture. | Pour déployer l'exemple d'architecture dans votre Compte AWS, exécutez la commande suivante :<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Testez l'architecture
<a name="test-the-architecture"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez les prérequis de test. | Installez sur votre poste de travail 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/) et [jq](https://jqlang.github.io/jq/).L'utilisation de [Postman](https://www.postman.com/downloads/) pour tester cet exemple d'architecture est suggérée mais pas obligatoire. Si vous choisissez un autre outil de test d'API, assurez-vous qu'il prend en charge l'[authentification AWS Signature version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) et reportez-vous aux points de terminaison d'API exposés qui peuvent être inspectés en [exportant l'API REST](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html). | DevOps ingénieur | 
| Supposons que`JobsAPIInvokeRole`. | [Supposons](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) que `JobsAPIInvokeRole` ce qui a été imprimé en tant que sortie de la commande de déploiement :<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 | 
| Configurez Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | AWS DevOps | 
| Testez l'exemple d'architecture. | Pour tester l'exemple d'architecture, [envoyez des demandes](https://learning.postman.com/docs/sending-requests/requests/#next-steps) à l'API jobs. Pour plus d'informations, consultez la [documentation de Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingénieur | 

## Résolution des problèmes
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| La destruction puis le redéploiement de l'architecture d'exemple échouent car le [groupe de CloudWatch journaux Amazon Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) existe `/aws/apigateway/JobsAPIAccessLogs` déjà. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | 

## Ressources connexes
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-resources"></a>
+ [Modèle de mappage API Gateway et référence à la variable de journalisation des accès](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Configurer l'invocation asynchrone de la fonction Lambda du backend](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-integration-async.html)

# Traitez les événements de manière asynchrone avec Amazon API Gateway et Amazon DynamoDB Streams
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams"></a>

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

## Résumé
<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) est un service entièrement géré que les développeurs peuvent utiliser pour créer, publier, gérer, surveiller et sécuriser APIs à n'importe quelle échelle. Il gère les tâches liées à l'acceptation et au traitement de centaines de milliers d'appels d'API simultanés.

Le délai d'intégration est un quota de service important pour API Gateway. Le délai d'attente est le délai maximal pendant lequel un service principal doit renvoyer une réponse avant que l'API REST ne renvoie une erreur. La limite stricte de 29 secondes est généralement acceptable pour les charges de travail synchrones. Toutefois, cette limite représente un défi pour les développeurs qui souhaitent utiliser API Gateway avec des charges de travail asynchrones.

Ce modèle montre un exemple d'architecture permettant de traiter des événements de manière asynchrone à l'aide d'API Gateway, d'Amazon DynamoDB Streams et. AWS Lambda L'architecture prend en charge l'exécution de tâches de traitement parallèle avec les mêmes paramètres d'entrée et utilise une API REST de base comme interface. Dans cet exemple, l'utilisation de Lambda comme backend limite la durée des tâches à 15 minutes. Vous pouvez éviter cette limite en utilisant un autre service pour traiter les événements entrants (par exemple, AWS Fargate).

[Projen](https://pypi.org/project/projen/) [est utilisé pour configurer l'environnement de développement local et pour déployer l'exemple d'architecture sur une cible Compte AWS, en combinaison avec le [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html), [Docker et Node.js](https://docs.docker.com/get-docker/).](https://nodejs.org/en/download/) Projen configure automatiquement un environnement virtuel [Python](https://www.python.org/downloads/) avec le [pré-commit](https://pre-commit.com/) et les outils utilisés pour l'assurance qualité du code, l'analyse de sécurité et les tests unitaires. Pour plus d'informations, consultez la section [Outils](#processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-tools).

## Conditions préalables et limitations
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-prereqs"></a>

**Prérequis**
+ Un actif Compte AWS
+ Les outils suivants sont installés sur votre poste de travail :
  + [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) version 2.85.0 ou ultérieure
  + [Docker](https://docs.docker.com/get-docker/) version 20.10.21 ou ultérieure
  + [Node.js](https://nodejs.org/en/download/) version 18 ou ultérieure
  + [Projen](https://pypi.org/project/projen/) version 0.71.111 ou ultérieure
  + [Python](https://www.python.org/downloads/) version 3.9.16 ou ultérieure

**Limites**
+ Le nombre maximum de lecteurs recommandé pour DynamoDB Streams est de deux afin d'éviter toute limitation.
+ Le temps d'exécution maximal d'une tâche est limité par le temps d'exécution maximal des fonctions Lambda (15 minutes).
+ Le nombre maximum de demandes de travail simultanées est limité par la simultanéité réservée des fonctions Lambda.

## Architecture
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-architecture"></a>

**Architecture**

Le schéma suivant montre l'interaction de l'API jobs avec DynamoDB Streams et les fonctions Lambda de traitement des événements et de gestion des erreurs, avec les événements stockés dans une archive d'événements Amazon. EventBridge 

![\[Schéma de l'architecture et du processus, avec les étapes répertoriées après le schéma.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/68a46501-16e5-48e4-99c6-fc67a8b4133a/images/29fe6982-ad81-4099-9c65-08b17c96e78f.png)


Un flux de travail typique comprend les étapes suivantes :

1. Vous vous authentifiez auprès de Gestion des identités et des accès AWS (IAM) et obtenez des informations d'identification de sécurité.

1. Vous envoyez une `POST` requête HTTP au point de terminaison de l'API des `/jobs` tâches, en spécifiant les paramètres de la tâche dans le corps de la demande.

1. L'API des tâches vous renvoie une réponse HTTP contenant l'identifiant de la tâche.

1. L'API des tâches place les paramètres des tâches dans la table `jobs_table` Amazon DynamoDB.

1. Le flux `jobs_table` DynamoDB de la table DynamoDB invoque les fonctions Lambda de traitement des événements.

1. Les fonctions Lambda de traitement des événements traitent l'événement puis placent les résultats de la tâche dans la table DynamoDB. `jobs_table` Pour garantir des résultats cohérents, les fonctions de traitement des événements mettent en œuvre un mécanisme de [verrouillage optimiste](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html).

1. Vous envoyez une `GET` requête HTTP au point de terminaison de l'API des `/jobs/{jobId}` tâches, avec l'identifiant de tâche de l'étape 3 sous la forme`{jobId}`.

1. L'API des tâches interroge la table `jobs_table` DynamoDB pour récupérer les résultats des tâches.

1. L'API des tâches renvoie une réponse HTTP contenant les résultats des tâches.

1. Si le traitement des événements échoue, le mappage source de la fonction de traitement des événements envoie l'événement à la rubrique Amazon Simple Notification Service (Amazon SNS) consacrée à la gestion des erreurs.

1. La rubrique SNS de gestion des erreurs transmet l'événement de manière asynchrone à la fonction de gestion des erreurs.

1. La fonction de gestion des erreurs place les paramètres de la tâche dans la table DynamoDB`jobs_table`.

   Vous pouvez récupérer les paramètres des tâches en envoyant une `GET` requête HTTP au point de terminaison de l'API `/jobs/{jobId}` des tâches.

1. Si la gestion des erreurs échoue, la fonction de gestion des erreurs envoie l'événement à une archive Amazon EventBridge .

   Vous pouvez rejouer les événements archivés en utilisant EventBridge.

## Outils
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure cloud AWS sous forme de code.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, les fonctions AWS Lambda, les points de terminaison d'appel HTTP utilisant des destinations d'API ou les bus d'événements dans d'autres comptes AWS.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) vous aide à coordonner et à gérer l'échange de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail.

**Autres outils**
+ [autopep8 formate](https://github.com/hhatto/autopep8) automatiquement le code Python en fonction du guide de style de la Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) scanne le code Python pour détecter les problèmes de sécurité courants.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) est un vérificateur et un générateur de commit Git. `CHANGELOG`
+ [cfn-lint est un linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) est un outil d'analyse de code statique qui vérifie l'infrastructure en tant que code (IaC) pour détecter les erreurs de configuration liées à la sécurité et à la conformité.
+ [jq](https://stedolan.github.io/jq/download/) est un outil en ligne de commande pour analyser le JSON.
+ [Postman](https://www.postman.com/) est une plateforme d'API.
+ [pre-commit](https://pre-commit.com/) est un gestionnaire de hooks Git.
+ [Projen](https://github.com/projen/projen) est un générateur de projets.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) est un framework Python pour écrire de petits tests lisibles.

**Référentiel de code**

Cet exemple de code d'architecture se trouve dans le référentiel GitHub [Asynchronous Processing with API Gateway et DynamoDB Streams](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk).

## Bonnes pratiques
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-best-practices"></a>
+ Cet exemple d'architecture n'inclut pas la surveillance de l'infrastructure déployée. Si votre cas d'utilisation nécessite une surveillance, évaluez l'ajout de [constructions de surveillance CDK](https://constructs.dev/packages/cdk-monitoring-constructs) ou d'une autre solution de surveillance.
+ Cet exemple d'architecture utilise [les autorisations IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) pour contrôler l'accès à l'API des tâches. Toute personne autorisée à assumer le `JobsAPIInvokeRole` sera en mesure d'invoquer l'API jobs. Le mécanisme de contrôle d'accès est donc binaire. Si votre cas d'utilisation nécessite un modèle d'autorisation plus complexe, évaluez-le à l'aide d'un autre [mécanisme de contrôle d'accès](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html).
+ Lorsqu'un utilisateur envoie une `POST` requête HTTP au point de terminaison de l'API `/jobs` jobs, les données d'entrée sont validées à deux niveaux différents :
  + API Gateway est en charge de la [validation de la première demande](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La fonction de traitement des événements exécute la deuxième demande.

    Aucune validation n'est effectuée lorsque l'utilisateur envoie une `GET` requête HTTP au point de terminaison de l'API `/jobs/{jobId}` des tâches. Si votre cas d'utilisation nécessite une validation des entrées supplémentaire et un niveau de sécurité accru, évaluez [l'utilisation AWS WAF pour protéger votre API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).
+ Pour éviter toute limitation, la documentation [DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Processing) déconseille aux utilisateurs de lire avec plus de deux utilisateurs d'une même partition de flux. Pour augmenter le nombre de consommateurs, nous vous recommandons d'utiliser [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html).
+ Le [verrouillage optimiste](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html) a été utilisé dans cet exemple pour garantir des mises à jour cohérentes des éléments de la table `jobs_table` DynamoDB. Selon les exigences du cas d'utilisation, vous devrez peut-être mettre en œuvre des mécanismes de verrouillage plus fiables, tels que le verrouillage pessimiste.

## Épopées
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-epics"></a>

### Configuration de l'environnement
<a name="set-up-the-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner le dépôt localement, exécutez la commande suivante :<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk.git</pre> | DevOps ingénieur | 
| Configurez le projet. | Remplacez le répertoire par la racine du référentiel et configurez l'environnement virtuel Python et tous les outils à l'aide de [Projen :](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-dynamodb-streams-cdk<br />npx projen</pre> | DevOps ingénieur | 
| Installez des hooks de pré-validation. | Pour installer des hooks de pré-validation, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | DevOps ingénieur | 

### Déployez l'exemple d'architecture
<a name="deploy-the-example-architecture"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Pour démarrer votre [AWS CDK](https://aws.amazon.com/cdk/)compte Compte AWS, exécutez la commande suivante :<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Déployez l'exemple d'architecture. | Pour déployer l'exemple d'architecture dans votre Compte AWS, exécutez la commande suivante :<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Testez l'architecture
<a name="test-the-architecture"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez les prérequis de test. | Installez sur votre poste de travail 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/) et [jq](https://jqlang.github.io/jq/).L'utilisation de [Postman](https://www.postman.com/downloads/) pour tester cet exemple d'architecture est suggérée mais pas obligatoire. Si vous choisissez un autre outil de test d'API, assurez-vous qu'il prend en charge l'[authentification AWS Signature version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) et reportez-vous aux points de terminaison d'API exposés qui peuvent être inspectés en [exportant l'API REST](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html). | DevOps ingénieur | 
| Supposons que`JobsAPIInvokeRole`. | [Supposons](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) que `JobsAPIInvokeRole` ce qui a été imprimé en tant que sortie de la `deploy` commande :<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 | 
| Configurez Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | AWS DevOps | 
| Testez l'exemple d'architecture. | Pour tester l'exemple d'architecture, envoyez des demandes à l'API jobs. Pour plus d'informations, consultez la [documentation de Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingénieur | 

## Résolution des problèmes
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| La destruction puis le redéploiement de l'architecture d'exemple échouent car le [groupe de CloudWatch journaux Amazon Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) existe `/aws/apigateway/JobsAPIAccessLogs` déjà. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | 

## Ressources connexes
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-resources"></a>
+ [Modèle de mappage API Gateway et référence à la variable de journalisation des accès](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Modifier la capture de données pour DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)
+ [Verrouillage optimiste avec numéro de version](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html)
+ [Utilisation de Kinesis Data Streams pour capturer les modifications apportées à DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html)

# Traitez les événements de manière asynchrone avec Amazon API Gateway, Amazon SQS et AWS Fargate
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate"></a>

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

## Résumé
<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) est un service entièrement géré que les développeurs peuvent utiliser pour créer, publier, gérer, surveiller et sécuriser APIs à n'importe quelle échelle. Il gère les tâches liées à l'acceptation et au traitement de centaines de milliers d'appels d'API simultanés.

Le délai d'intégration est un quota de service important pour API Gateway. Le délai d'attente est le délai maximal pendant lequel un service principal doit renvoyer une réponse avant que l'API REST ne renvoie une erreur. La limite stricte de 29 secondes est généralement acceptable pour les charges de travail synchrones. Toutefois, cette limite représente un défi pour les développeurs qui souhaitent utiliser API Gateway avec des charges de travail asynchrones.

Ce modèle montre un exemple d'architecture permettant de traiter les événements de manière asynchrone à l'aide d'API Gateway, d'Amazon Simple Queue Service (Amazon SQS) et de. AWS Fargate L'architecture prend en charge l'exécution de tâches de traitement sans restriction de durée et utilise une API REST de base comme interface.

[Projen](https://pypi.org/project/projen/) [est utilisé pour configurer l'environnement de développement local et pour déployer l'exemple d'architecture sur une cible Compte AWS, en combinaison avec [Docker](https://docs.docker.com/get-docker/) et Node.js. [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)](https://nodejs.org/en/download/) Projen configure automatiquement un environnement virtuel [Python](https://www.python.org/downloads/) avec le [pré-commit](https://pre-commit.com/) et les outils utilisés pour l'assurance qualité du code, l'analyse de sécurité et les tests unitaires. Pour plus d'informations, consultez la section [Outils](#process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-tools).

## Conditions préalables et limitations
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Les outils suivants sont installés sur votre poste de travail :
  + [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) version 2.85.0 ou ultérieure
  + [Docker](https://docs.docker.com/get-docker/) version 20.10.21 ou ultérieure
  + [Node.js](https://nodejs.org/en/download/) version 18 ou ultérieure
  + [Projen](https://pypi.org/project/projen/) version 0.71.111 ou ultérieure
  + [Python](https://www.python.org/downloads/) version 3.9.16 ou ultérieure

**Limites**
+ Les tâches simultanées sont limitées à 500 tâches par minute, ce qui correspond au nombre maximum de tâches que Fargate peut fournir.

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

Le schéma suivant montre l'interaction de l'API jobs avec la table `jobs` Amazon DynamoDB, le service Fargate de traitement des événements et la fonction de gestion des erreurs. AWS Lambda Les événements sont stockés dans une archive d' EventBridge événements Amazon.

![\[Schéma d'architecture avec description à la suite du schéma.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/8a03149c-8f34-4593-84d5-accc1800a0a2/images/5e1071aa-4fbc-495c-bc22-8e62a32a136b.png)


Un flux de travail typique comprend les étapes suivantes :

1. Vous vous authentifiez auprès de Gestion des identités et des accès AWS (IAM) et obtenez des informations d'identification de sécurité.

1. Vous envoyez une `POST` requête HTTP au point de terminaison de l'API des `/jobs` tâches, en spécifiant les paramètres de la tâche dans le corps de la demande.

1. L'API jobs, qui est une API REST API Gateway, vous renvoie une réponse HTTP contenant l'identifiant de la tâche.

1. L'API jobs envoie un message à la file d'attente SQS.

1. Fargate extrait le message de la file d'attente SQS, traite l'événement, puis place les résultats de la tâche dans la table DynamoDB. `jobs`

1. Vous envoyez une `GET` requête HTTP au point de terminaison de l'API des `/jobs/{jobId}` tâches, avec l'identifiant de tâche de l'étape 3 sous la forme`{jobId}`.

1. L'API des tâches interroge la table `jobs` DynamoDB pour récupérer les résultats des tâches.

1. L'API des tâches renvoie une réponse HTTP contenant les résultats des tâches.

1. Si le traitement de l'événement échoue, la file d'attente SQS envoie l'événement à la file d'attente des lettres mortes (DLQ).

1. Un EventBridge événement déclenche la fonction de gestion des erreurs.

1. La fonction de gestion des erreurs place les paramètres de la tâche dans la table DynamoDB`jobs`.

1. Vous pouvez récupérer les paramètres des tâches en envoyant une `GET` requête HTTP au point de terminaison de l'API `/jobs/{jobId}` des tâches.

1. Si la gestion des erreurs échoue, la fonction de gestion des erreurs envoie l'événement à une EventBridge archive.

   Vous pouvez rejouer les événements archivés en utilisant EventBridge.

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

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner AWS Cloud l'infrastructure dans le code.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)vous permet d'exécuter des conteneurs sans avoir à gérer de serveurs ou d'instances Amazon Elastic Compute Cloud (Amazon EC2). Il est utilisé conjointement avec Amazon Elastic Container Service (Amazon ECS).
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, les fonctions Lambda, les points de terminaison d'appel HTTP utilisant des destinations d'API ou les bus d'événements dans d'autres domaines. Comptes AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) fournit une file d'attente hébergée sécurisée, durable et disponible qui vous permet d'intégrer et de dissocier les systèmes et composants logiciels distribués.

**Autres outils**
+ [autopep8 formate](https://github.com/hhatto/autopep8) automatiquement le code Python en fonction du guide de style de la Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) scanne le code Python pour détecter les problèmes de sécurité courants.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) est un vérificateur et un générateur de commit Git. `CHANGELOG`
+ [cfn-lint est un linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) est un outil d'analyse de code statique qui vérifie l'infrastructure en tant que code (IaC) pour détecter les erreurs de configuration liées à la sécurité et à la conformité.
+ [jq](https://stedolan.github.io/jq/download/) est un outil en ligne de commande pour analyser le JSON.
+ [Postman](https://www.postman.com/) est une plateforme d'API.
+ [pre-commit](https://pre-commit.com/) est un gestionnaire de hooks Git.
+ [Projen](https://github.com/projen/projen) est un générateur de projets.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) est un framework Python pour écrire de petits tests lisibles.

**Référentiel de code**

Cet exemple de code d'architecture se trouve dans le référentiel GitHub [Asynchronous Processing with API Gateway et SQS](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk).

## Bonnes pratiques
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-best-practices"></a>
+ Cet exemple d'architecture n'inclut pas la surveillance de l'infrastructure déployée. Si votre cas d'utilisation nécessite une surveillance, évaluez l'ajout de [constructions de surveillance CDK](https://constructs.dev/packages/cdk-monitoring-constructs) ou d'une autre solution de surveillance.
+ Cet exemple d'architecture utilise [les autorisations IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) pour contrôler l'accès à l'API des tâches. Toute personne autorisée à assumer le `JobsAPIInvokeRole` sera en mesure d'invoquer l'API jobs. Le mécanisme de contrôle d'accès est donc binaire. Si votre cas d'utilisation nécessite un modèle d'autorisation plus complexe, évaluez-le à l'aide d'un autre [mécanisme de contrôle d'accès](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html).
+ Lorsqu'un utilisateur envoie une `POST` requête HTTP au point de terminaison de l'API `/jobs` jobs, les données d'entrée sont validées à deux niveaux différents :
  + API Gateway est en charge de la [validation de la première demande](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La fonction de traitement des événements exécute la deuxième demande.

    Aucune validation n'est effectuée lorsque l'utilisateur envoie une `GET` requête HTTP au point de terminaison de l'API `/jobs/{jobId}` des tâches. Si votre cas d'utilisation nécessite une validation des entrées supplémentaire et un niveau de sécurité accru, évaluez [l'utilisation AWS WAF pour protéger votre API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).

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

### Configuration de l'environnement
<a name="set-up-the-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner le dépôt localement, exécutez la commande suivante :<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk.git</pre> | DevOps ingénieur | 
| Configurez le projet. | Remplacez le répertoire par la racine du référentiel et configurez l'environnement virtuel Python et tous les outils à l'aide de [Projen :](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-sqs-cdk<br />npx projen</pre> | DevOps ingénieur | 
| Installez des hooks de pré-validation. | Pour installer des hooks de pré-validation, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | DevOps ingénieur | 

### Déployez l'exemple d'architecture
<a name="deploy-the-example-architecture"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Pour démarrer votre [AWS CDK](https://aws.amazon.com/cdk/)compte Compte AWS, exécutez la commande suivante :<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Déployez l'exemple d'architecture. | Pour déployer l'exemple d'architecture dans votre Compte AWS, exécutez la commande suivante :<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Testez l'architecture
<a name="test-the-architecture"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez les prérequis de test. | Installez sur votre poste de travail 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/) et [jq](https://jqlang.github.io/jq/).L'utilisation de [Postman](https://www.postman.com/downloads/) pour tester cet exemple d'architecture est suggérée mais pas obligatoire. Si vous choisissez un autre outil de test d'API, assurez-vous qu'il prend en charge l'[authentification AWS Signature version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) et reportez-vous aux points de terminaison d'API exposés qui peuvent être inspectés en [exportant l'API REST](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html). | DevOps ingénieur | 
| Supposons que`JobsAPIInvokeRole`. | [Supposons](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) que `JobsAPIInvokeRole` ce qui a été imprimé en tant que sortie de la `deploy` commande :<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 | 
| Configurez Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | AWS DevOps | 
| Testez l'exemple d'architecture. | Pour tester l'exemple d'architecture, envoyez des demandes à l'API jobs. Pour plus d'informations, consultez la [documentation de Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingénieur | 

## Résolution des problèmes
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| La destruction puis le redéploiement de l'architecture d'exemple échouent car le [groupe de CloudWatch journaux Amazon Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) existe `/aws/apigateway/JobsAPIAccessLogs` déjà. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 
| La destruction puis le redéploiement de l'architecture d'exemple échouent car le [groupe de CloudWatch journaux Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) existe `/aws/ecs/EventProcessingServiceLogs` déjà. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 

## Ressources connexes
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-resources"></a>
+ [Modèle de mappage API Gateway et référence à la variable de journalisation des accès](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Comment intégrer une API REST API Gateway à Amazon SQS et résoudre les erreurs courantes ?](https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-rest-api-sqs-errors/)

# Exécutez les tâches d'automatisation d'AWS Systems Manager de manière synchrone depuis AWS Step Functions
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions"></a>

*Élie El Khoury, Amazon Web Services*

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

Ce modèle explique comment intégrer AWS Step Functions à AWS Systems Manager. Il utilise les intégrations de services du AWS SDK pour appeler l'**startAutomationExecution**API Systems Manager à l'aide d'un jeton de tâche issu d'un flux de travail basé sur une machine à états, et fait une pause jusqu'à ce que le jeton revienne en cas de réussite ou d'échec d'un appel. Pour démontrer l'intégration, ce modèle implémente un wrapper de document d'automatisation (runbook) autour du `AWS-RunPowerShellScript` document `AWS-RunShellScript` or, et l'utilise `.waitForTaskToken` pour appeler ou de manière synchrone. `AWS-RunShellScript` `AWS-RunPowerShellScript` Pour plus d'informations sur les intégrations de services AWS SDK dans Step Functions, consultez le guide du [AWS Step Functions développeur](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html).

Step Functions**** est un service de flux de travail visuel à faible code que vous pouvez utiliser pour créer des applications distribuées, automatiser les processus informatiques et commerciaux, et créer des pipelines de données et d'apprentissage automatique à l'aide de AWS services. Les flux de travail gèrent les échecs, les nouvelles tentatives, la parallélisation, les intégrations de services et l'observabilité afin que vous puissiez vous concentrer sur une logique métier à plus forte valeur ajoutée.

L'automatisation, une fonctionnalité de AWS Systems Manager, simplifie les tâches courantes de maintenance, de déploiement et de correction pour Services AWS Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS), Amazon Redshift et Amazon Simple Storage Service (Amazon S3). L'automatisation vous permet de contrôler de manière précise la simultanéité de vos automatisations. Par exemple, vous pouvez spécifier le nombre de ressources à cibler simultanément et le nombre d'erreurs susceptibles de se produire avant l'arrêt d'une automatisation.

Pour les détails de mise en œuvre, y compris les étapes du runbook, les paramètres et les exemples, consultez la section [Informations supplémentaires](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).

## Conditions préalables et limitations
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-prereqs"></a>

**Conditions préalables**
+ Un AWS compte actif
+ Gestion des identités et des accès AWS Autorisations (IAM) pour accéder à Step Functions et Systems Manager
+ Une EC2 instance sur laquelle l'agent Systems Manager (agent SSM) [est installé](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html)
+ [Un profil d'instance IAM pour Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html) attaché à l'instance sur laquelle vous prévoyez d'exécuter le runbook
+ Un rôle Step Functions doté des autorisations IAM suivantes (selon le principe du moindre privilège) :

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

**Versions du produit**
+ Schéma de document SSM version 0.3 ou ultérieure
+ Agent SSM version 2.3.672.0 ou ultérieure

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

**Pile technologique cible**
+ AWS Step Functions
+ AWS Systems Manager  Automatisation

**Architecture cible**

![\[Architecture permettant d'exécuter les tâches d'automatisation de Systems Manager de manière synchrone à partir de Step Functions\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/47c19e4f-d68d-4f91-bb68-202098757529/images/2d248aae-d858-4565-8af2-593cde0da780.png)


**Automatisation et mise à l'échelle**
+ Ce modèle fournit un AWS CloudFormation modèle que vous pouvez utiliser pour déployer les runbooks sur plusieurs instances. (Voir le référentiel d'[implémentation de GitHub Step Functions et Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken).)

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

**Services AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie dans toutes Comptes AWS les régions.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)est un service d'orchestration sans serveur qui vous aide à combiner des AWS Lambda fonctions et d'autres fonctions Services AWS pour créer des applications critiques pour l'entreprise.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)vous aide à gérer vos applications et votre infrastructure exécutées dans le AWS Cloud. Il simplifie la gestion des applications et des ressources, réduit le délai de détection et de résolution des problèmes opérationnels et vous aide à gérer vos AWS ressources en toute sécurité à grande échelle.

**Code**

Le code de ce modèle est disponible dans le référentiel d'[implémentation de GitHub Step Functions and Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken). 

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

### Créez des runbooks
<a name="create-runbooks"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Téléchargez le CloudFormation modèle. | Téléchargez le `ssm-automation-documents.cfn.json` modèle depuis le `cloudformation ` dossier du GitHub référentiel. | AWS DevOps | 
| Créez des runbooks. | Connectez-vous au AWS Management Console, ouvrez la [CloudFormation console](https://console.aws.amazon.com/cloudformation/) et déployez le modèle. Pour plus d'informations sur le déploiement CloudFormation de modèles, consultez [la section Création d'une pile sur la CloudFormation console](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) dans la CloudFormation documentation. Le CloudFormation modèle déploie trois ressources :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.html) | AWS DevOps | 

### Création d'un exemple de machine à états
<a name="create-a-sample-state-machine"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une machine à états de test.  | Suivez les instructions du [guide du AWS Step Functions développeur](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) pour créer et exécuter une machine à états. Pour la définition, utilisez le code suivant. Assurez-vous de mettre à jour la `InstanceIds` valeur avec l'ID d'une instance valide compatible avec Systems Manager dans votre compte.<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>Ce code appelle le runbook pour exécuter deux commandes illustrant l'`waitForTaskToken`appel à Systems Manager Automation.La valeur du `shell` paramètre (`Shell`ou`PowerShell`) détermine si le document d'automatisation s'exécute `AWS-RunShellScript` ou`AWS-RunPowerShellScript`.La tâche écrit « Ceci est un waitForTask jeton d'automatisation de test » dans le `/home/ssm-user/automation.log` fichier, puis s'arrête pendant 100 secondes avant de répondre avec le jeton de tâche et de libérer la tâche suivante dans le flux de travail.Si vous souhaitez plutôt appeler le `SfnRunCommandByTargets` runbook, remplacez la `Parameters` section du code précédent par la suivante :<pre>"Parameters": {<br />          "Targets": [<br />            {<br />              "Key": "InstanceIds",<br />              "Values": [<br />                "i-02573cafcfEXAMPLE",<br />                "i-0471e04240EXAMPLE"<br />              ]<br />            }<br />          ],</pre> | AWS DevOps | 
| Mettez à jour le rôle IAM pour la machine d'état. | L'étape précédente crée automatiquement un rôle IAM dédié pour la machine à états. Cependant, il n'accorde pas l'autorisation d'appeler le runbook. Mettez à jour le rôle en ajoutant les autorisations suivantes :<pre>{<br />      "Effect": "Allow",<br />      "Action": "ssm:StartAutomationExecution",<br />      "Resource": "*"<br /> }</pre> | AWS DevOps | 
| Validez les appels synchrones. | Exécutez la machine d'état pour valider l'appel synchrone entre Step Functions et Systems Manager Automation. Pour un exemple de sortie, consultez la section [Informations supplémentaires](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).  | AWS DevOps | 

## Ressources connexes
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-resources"></a>
+ [Mise en route avec AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) (*Guide AWS Step Functions du développeur*)
+ [Attendez un rappel avec le jeton de tâche](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token) (*guide du AWS Step Functions développeur*, modèles d'intégration des services)
+ Appels d'[API send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) et [send\$1task\$1failure (documentation Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html)) 
+ [AWS Systems Manager Automatisation](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) (*guide de AWS Systems Manager l'utilisateur*)

## Informations supplémentaires
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional"></a>

**Détails de l'implémentation**

Ce modèle fournit un CloudFormation modèle qui déploie deux runbooks de Systems Manager :
+ `SfnRunCommandByInstanceIds`exécute la `AWS-RunPowerShellScript` commande `AWS-RunShellScript` or en utilisant l'instance IDs.
+ `SfnRunCommandByTargets`exécute la `AWS-RunPowerShellScript` commande `AWS-RunShellScript` or en utilisant des cibles.

Chaque runbook met en œuvre quatre étapes pour obtenir un appel synchrone lors de l'utilisation de l'`.waitForTaskToken`option dans Step Functions.


| 
| 
| Step (Étape) | Action | Description | 
| --- |--- |--- |
| **1** | `Branch` | Vérifie la valeur du `shell` paramètre (`Shell`ou`PowerShell`) pour décider s'il convient de l'exécuter `AWS-RunShellScript` pour Linux ou `AWS-RunPowerShellScript` pour Windows. | 
| **2** | `RunCommand_Shell` ou `RunCommand_PowerShell` | Prend plusieurs entrées et exécute la `RunPowerShellScript` commande `RunShellScript` or. Pour plus d'informations, consultez l'onglet **Détails** du document `RunCommand_Shell` ou `RunCommand_PowerShell` Automation sur la console Systems Manager. | 
| **3** | `SendTaskFailure` | S'exécute lorsque l'étape 2 est abandonnée ou annulée. Il appelle l'API [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) de Step Functions, qui accepte trois paramètres en entrée : le jeton transmis par la machine d'état, l'erreur d'échec et une description de la cause de l'échec. | 
| **4** | `SendTaskSuccess` | S'exécute lorsque l'étape 2 est réussie. Il appelle l'API [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) de Step Functions, qui accepte le jeton transmis par la machine d'état en entrée. | 

**Paramètres du Runbook**

`SfnRunCommandByInstanceIds`carnet de course :


| 
| 
| Nom du paramètre | Type | Facultatif ou obligatoire | Description | 
| --- |--- |--- |--- |
| `shell` | String | Obligatoire | L'interpréteur de commandes des instances permet de décider s'ils `AWS-RunShellScript` doivent être exécutés sous Linux ou `AWS-RunPowerShellScript` sous Windows. | 
| `deliveryTimeout` | Entier | Facultatif | Temps d'attente, en secondes, avant qu'une commande soit délivrée à l'agent SSM sur une instance. Ce paramètre a une valeur minimale de 30 (0,5 minute) et une valeur maximale de 2592000 (720 heures). | 
| `executionTimeout` | String | Facultatif | Durée, en secondes, nécessaire à l'exécution d'une commande avant qu'elle ne soit considérée comme ayant échoué. La valeur par défaut est 3 600 (1 heure). La valeur maximale est 172800 (48 heures). | 
| `workingDirectory` | String | Facultatif | Chemin d'accès au répertoire de travail sur votre instance. | 
| `Commands` | StringList | Obligatoire | Le script ou la commande shell à exécuter. | 
| `InstanceIds` | StringList | Obligatoire | Les IDs instances dans lesquelles vous souhaitez exécuter la commande. | 
| `taskToken` | String | Obligatoire | Le jeton de tâche à utiliser pour les réponses de rappel. | 

`SfnRunCommandByTargets`carnet de course :


| 
| 
| Name | Type | Facultatif ou obligatoire | Description | 
| --- |--- |--- |--- |
| `shell` | String | Obligatoire | L'interpréteur de commandes des instances permet de décider s'ils `AWS-RunShellScript` doivent être exécutés sous Linux ou `AWS-RunPowerShellScript` sous Windows. | 
| `deliveryTimeout` | Entier | Facultatif | Temps d'attente, en secondes, avant qu'une commande soit délivrée à l'agent SSM sur une instance. Ce paramètre a une valeur minimale de 30 (0,5 minute) et une valeur maximale de 2592000 (720 heures). | 
| `executionTimeout` | Entier | Facultatif | Durée, en secondes, nécessaire à l'exécution d'une commande avant qu'elle ne soit considérée comme ayant échoué. La valeur par défaut est 3 600 (1 heure). La valeur maximale est 172800 (48 heures). | 
| `workingDirectory` | String | Facultatif | Chemin d'accès au répertoire de travail sur votre instance. | 
| `Commands` | StringList | Obligatoire | Le script ou la commande shell à exécuter. | 
| `Targets` | MapList | Obligatoire | Tableau de critères de recherche qui identifie les instances à l'aide de paires clé-valeur que vous spécifiez. Par exemple : `[{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]` | 
| `taskToken` | String | Obligatoire | Le jeton de tâche à utiliser pour les réponses de rappel. | 

**Exemple de sortie**

Le tableau suivant fournit un exemple de sortie de la fonction step. Cela montre que le temps d'exécution total est supérieur à 100 secondes entre l'étape 5 (`TaskSubmitted`) et l'étape 6 (`TaskSucceeded`). Cela montre que la fonction step a attendu la fin de la `sleep 100` commande avant de passer à la tâche suivante du flux de travail.


| 
| 
| ID | Type | Step (Étape) | Ressource | Temps écoulé (ms) | Horodatage | 
| --- |--- |--- |--- |--- |--- |
| **1** | `ExecutionStarted` |  | - | 0 | 11 mars 2022 14h50:34 ,303 | 
| **2** | `TaskStateEntered` | `StartAutomationWaitForCallBack` | - | 40 | 11 mars 2022 14 h 50 : 34 .343 | 
| **3** | `TaskScheduled` | `StartAutomationWaitForCallBack` | - | 40 | 11 mars 2022 14 h 50 : 34 .343 | 
| **4** | `TaskStarted` | `StartAutomationWaitForCallBack` | - | 154 | 11 mars 2022 14 h 50 : 34 .457 | 
| **5** | `TaskSubmitted` | `StartAutomationWaitForCallBack` | - | 657 | 11 mars 2022 14 h 50 : 34 960 | 
| **6** | `TaskSucceeded` | `StartAutomationWaitForCallBack` | - | 103835 | 11 mars 2022 14h52:18 138 | 
| **7** | `TaskStateExited` | `StartAutomationWaitForCallBack` | - | 103860 | 11 mars 2022 14h52:18 163 | 
| **8** | `ExecutionSucceeded` |  | - | 103897 | 11 mars 2022 14h52:18 200 | 

# Exécuter des lectures parallèles d'objets S3 en utilisant Python dans une AWS Lambda fonction
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function"></a>

*Eduardo Bortoluzzi, Amazon Web Services*

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

Vous pouvez utiliser ce modèle pour récupérer et résumer une liste de documents à partir des buckets Amazon Simple Storage Service (Amazon S3) en temps réel. Le modèle fournit un exemple de code pour lire en parallèle des objets à partir de compartiments S3 sur Amazon Web Services (AWS). Le modèle montre comment exécuter efficacement des tâches I/O liées avec des AWS Lambda fonctions utilisant Python.

Une société financière a utilisé ce modèle dans une solution interactive pour approuver ou rejeter manuellement les transactions financières corrélées en temps réel. Les documents relatifs aux transactions financières étaient stockés dans un compartiment S3 lié au marché. Un opérateur a sélectionné une liste de documents dans le compartiment S3, a analysé la valeur totale des transactions calculées par la solution et a décidé d'approuver ou de rejeter le lot sélectionné.

Les tâches liées aux E/S prennent en charge plusieurs threads. Dans cet exemple de code, le fichier [concurrent.futures. ThreadPoolExecutor](https://docs.python.org/3.13/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)est utilisé avec un maximum de 30 threads simultanés, même si les fonctions Lambda prennent en charge jusqu'à 1 024 threads (l'un de ces threads étant votre processus principal). Cette limite est due au fait qu'un trop grand nombre de threads crée des problèmes de latence en raison du changement de contexte et de l'utilisation des ressources informatiques. Vous devez également augmenter le nombre maximum de connexions au pool `botocore` afin que tous les threads puissent effectuer le téléchargement de l'objet S3 simultanément.

L'exemple de code utilise un objet de 8,3 Ko, avec des données JSON, dans un compartiment S3. L'objet est lu plusieurs fois. Une fois que la fonction Lambda a lu l'objet, les données JSON sont décodées en un objet Python. En décembre 2024, le résultat après l'exécution de cet exemple était de 1 000 lectures traitées en 2,3 secondes et de 10 000 lectures traitées en 27 secondes à l'aide d'une fonction Lambda configurée avec 2 304 Mo de mémoire. AWS Lambda prend en charge les configurations de mémoire de 128 Mo à 10 240 Mo (10 Go), mais l'augmentation de la mémoire Lambda au-delà de 2 304 Mo n'a pas contribué à réduire le temps d'exécution de cette tâche spécifique liée aux E/S.

L'outil [AWS Lambda Power Tuning](https://github.com/alexcasalboni/aws-lambda-power-tuning) a été utilisé pour tester différentes configurations de mémoire Lambda et vérifier le meilleur performance-to-cost ratio pour la tâche. Pour les résultats des tests, consultez la section [Informations supplémentaires](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional).

## Conditions préalables et limitations
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Maîtrise du développement en Python

**Limites**
+ Une fonction Lambda peut comporter au maximum [1 024 processus ou threads d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution).
+  Comptes AWS Les nouveaux ont une limite de mémoire Lambda de 3 008 Mo. Réglez l'outil AWS Lambda Power Tuning en conséquence. Pour plus d'informations, consultez la section [Dépannage](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting).
+ Amazon S3 impose une limite de [5 500 GET/HEAD demandes par seconde et par préfixe partitionné](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html).

**Versions du produit**
+ Python 3.9 ou version ultérieure
+ AWS Cloud Development Kit (AWS CDK) v2
+ AWS Command Line Interface (AWS CLI) version 2
+ AWS Lambda Power Tuning 4.3.6 (en option)

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

**Pile technologique cible**
+ AWS Lambda
+ Amazon S3
+ AWS Step Functions (si AWS Lambda Power Tuning est déployé)

**Architecture cible**

Le schéma suivant montre une fonction Lambda qui lit des objets depuis un compartiment S3 en parallèle. Le diagramme contient également un flux de travail Step Functions pour l'outil AWS Lambda Power Tuning afin d'affiner la mémoire des fonctions Lambda. Ce réglage précis permet d'atteindre un bon équilibre entre les coûts et les performances.

![\[Schéma illustrant la fonction Lambda, le compartiment S3 et les fonctions AWS Step.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/828696e2-6df7-4536-9205-951c99449f4e.png)


**Automatisation et mise à l'échelle**

Les fonctions Lambda évoluent rapidement lorsque cela est nécessaire. Pour éviter 503 erreurs de ralentissement causées par Amazon S3 en cas de forte demande, nous vous recommandons de limiter le dimensionnement.

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

**Services AWS**
+ AWS Cloud Development Kit (AWS CDK) La [v2](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) est un framework de développement logiciel qui vous aide à définir et à provisionner AWS Cloud l'infrastructure dans le code. L'exemple d'infrastructure a été créé pour être déployé avec AWS CDK.
+ [AWS Command Line InterfaceAWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)est un outil open source qui vous permet d'interagir Services AWS par le biais de commandes dans votre interface de ligne de commande. Dans ce modèle, AWS CLI la version 2 est utilisée pour télécharger un exemple de fichier JSON.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Simple Storage Service Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)est un service d'orchestration sans serveur qui vous permet de combiner des AWS Lambda fonctions et d'autres services AWS pour créer des applications critiques pour l'entreprise.

**Autres outils**
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent. La [réutilisation des threads de](https://docs.python.org/3.8/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor) travail inactifs a été introduite dans la version 3.8 de Python, et le code de fonction Lambda de ce modèle a été créé pour Python version 3.9 et versions ultérieures.

**Référentiel de code**

Le code de ce modèle est disponible dans le [aws-lambda-parallel-download](https://github.com/aws-samples/aws-lambda-parallel-download) GitHub référentiel.

## Bonnes pratiques
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-best-practices"></a>
+ Cette AWS CDK construction repose sur les autorisations Compte AWS utilisateur dont vous disposez pour déployer l'infrastructure. Si vous envisagez d'utiliser des AWS CDK pipelines ou des déploiements entre comptes, consultez la section Synthétiseurs [Stack](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-synthesizers).
+ Dans cet exemple d'application, les journaux d'accès ne sont pas activés dans le compartiment S3. Il est recommandé d'activer les journaux d'accès dans le code de production.

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

### Préparer l'environnement de développement
<a name="prepare-the-development-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez la version de Python installée. | Ce code a été testé spécifiquement sur Python 3.9 et Python 3.13, et il devrait fonctionner sur toutes les versions entre ces versions. Pour vérifier votre version de Python, `python3 -V` lancez-la dans votre terminal et installez une version plus récente si nécessaire.Pour vérifier que les modules requis sont installés, exécutez`python3 -c "import pip, venv"`. L'absence de message d'erreur signifie que les modules sont correctement installés et que vous êtes prêt à exécuter cet exemple.  | Architecte du cloud | 
| Installez AWS CDK. | Pour installer le AWS CDK s'il n'est pas déjà installé, suivez les instructions de la section [Mise en route avec le AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). Pour vérifier que la AWS CDK version installée est 2.0 ou ultérieure, exécutez`cdk –version`. | Architecte du cloud | 
| Bootstrap votre environnement. | Pour démarrer votre environnement, si ce n'est pas déjà fait, suivez les instructions de la section [Bootstrap votre environnement pour une utilisation avec](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping-env.html) le. AWS CDK | Architecte du cloud | 

### Cloner le référentiel d'exemple
<a name="clone-the-example-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner la dernière version du référentiel, exécutez la commande suivante :<pre>git clone --depth 1 --branch v1.2.0 \<br />git@github.com:aws-samples/aws-lambda-parallel-download.git</pre> | Architecte du cloud | 
| Remplacez le répertoire de travail par le référentiel cloné. | Exécutez la commande suivante :<pre>cd aws-lambda-parallel-download</pre> | Architecte du cloud | 
| Créez l'environnement virtuel Python. | Pour créer un environnement virtuel Python, exécutez la commande suivante :<pre>python3 -m venv .venv</pre> | Architecte du cloud | 
| Activez l’environnement virtuel. | Pour activer l'environnement virtuel, exécutez la commande suivante :<pre>source .venv/bin/activate</pre> | Architecte du cloud | 
| Installez les dépendances. | Pour installer les dépendances Python, exécutez la `pip` commande suivante :<pre>pip install -r requirements.txt</pre> | Architecte du cloud | 
| Parcourez le code. | (Facultatif) L'exemple de code qui télécharge un objet depuis le compartiment S3 se trouve sur`resources/parallel.py`.Le code d'infrastructure se trouve dans le `parallel_download` dossier. | Architecte du cloud | 

### Déployez et testez l'application
<a name="deploy-and-test-the-app"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez l’application. | Exécutez `cdk deploy`.Notez les AWS CDK sorties :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Architecte du cloud | 
| Téléchargez un exemple de fichier JSON. | Le référentiel contient un exemple de fichier JSON d'environ 9 Ko. Pour télécharger le fichier dans le compartiment S3 de la pile créée, exécutez la commande suivante :<pre>aws s3 cp sample.json s3://<ParallelDownloadStack.SampleS3BucketName></pre>Remplacez `<ParallelDownloadStack.SampleS3BucketName>` par la valeur correspondante de la AWS CDK sortie. | Architecte du cloud | 
| Lancez l'application. | Pour exécuter l'application, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Architecte du cloud | 
| Ajoutez le nombre de téléchargements. | (Facultatif) Pour exécuter 1 500 appels d'objets get, utilisez le code JSON suivant dans le **JSON d'événement** du `Test` paramètre :<pre>{"repeat": 1500, "objectKey": "sample.json"}</pre> | Architecte du cloud | 

### Facultatif : exécutez AWS Lambda Power Tuning
<a name="optional-run-lamlong-power-tuning"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez l'outil AWS Lambda Power Tuning. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html)À la fin de l'exécution, le résultat sera affiché dans l'onglet **d'entrée et de sortie de l'exécution**. | Architecte du cloud | 
| Affichez les résultats du AWS Lambda Power Tuning sous forme de graphique. | Dans l'onglet **Entrée et sortie d'exécution**, copiez le lien de `visualization` propriété et collez-le dans un nouvel onglet du navigateur. | Architecte du cloud | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les objets du compartiment S3. | Avant de détruire les ressources déployées, vous devez supprimer tous les objets du compartiment S3 :<pre>aws s3 rm s3://<ParallelDownloadStack.SampleS3BucketName> \<br />--recursive</pre>N'oubliez pas `<ParallelDownloadStack.SampleS3BucketName>` de remplacer par la valeur des AWS CDK sorties. | Architecte du cloud | 
| Détruisez les ressources. | Pour détruire toutes les ressources créées pour ce pilote, exécutez la commande suivante :<pre>cdk destroy</pre> | Architecte du cloud | 

## Résolution des problèmes
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| `'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008` | Pour les nouveaux comptes, il se peut que vous ne puissiez pas configurer plus de 3 008 Mo dans vos fonctions Lambda. Pour tester l'utilisation de AWS Lambda Power Tuning, ajoutez la propriété suivante au JSON d'entrée lorsque vous démarrez l'exécution de Step Functions :<pre>"powerValues": [<br />    512,<br />    1024,<br />    1536,<br />    2048,<br />    2560,<br />    3008<br />  ]</pre> | 

## Ressources connexes
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-resources"></a>
+ [Python — concurrent.futures. ThreadPoolExecutor](https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)
+ [Quotas Lambda : configuration, déploiement et exécution des fonctions](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution)
+ [Travailler avec le AWS CDK en Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Fonctions de profilage avec AWS Lambda Power Tuning](https://docs.aws.amazon.com/lambda/latest/operatorguide/profile-functions.html)

## Informations supplémentaires
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional"></a>

**Code**

L'extrait de code suivant effectue le traitement parallèle I/O  :

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

Les fils `ThreadPoolExecutor` de discussion sont réutilisés lorsqu'ils sont disponibles.

**Tests et résultats**

Ces tests ont été réalisés en décembre 2024.

Le premier test a traité 2 500 lectures d'objets, avec le résultat suivant.

![\[Le temps d'invocation diminue et le coût de l'invocation augmente à mesure que la mémoire augmente.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f6743412-1e52-4c4c-a51c-ac0f75b3b998.png)


À partir de 3 009 Mo, le temps de traitement est resté pratiquement le même quelle que soit l'augmentation de la mémoire, mais le coût a augmenté à mesure que la taille de la mémoire augmentait.

Un autre test a examiné la plage comprise entre 1 536 Mo et 3 072 Mo de mémoire, en utilisant des valeurs multiples de 256 Mo et en traitant 10 000 lectures d'objets, avec les résultats suivants.

![\[Diminution de la différence entre la diminution du temps d'invocation et l'augmentation du coût de l'invocation.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/c75d4443-74d8-4b93-9b4d-b2640869381e.png)


Le meilleur performance-to-cost ratio a été obtenu avec la configuration Lambda de 2 304 Mo de mémoire.

À titre de comparaison, un processus séquentiel de 2 500 lectures d'objets a pris 47 secondes. Le processus parallèle utilisant la configuration Lambda de 2 304 Mo a pris 7 secondes, soit 85 % de moins.

![\[Graphique illustrant la diminution du temps lors du passage du traitement séquentiel au traitement parallèle.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f3dcc44d-ac20-4b75-897d-1d71f0d59781.png)


# Envoyez des données de télémétrie de AWS Lambda vers OpenSearch pour des analyses et des visualisations en temps réel
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization"></a>

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

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

Les applications modernes sont de plus en plus distribuées et axées sur les événements, ce qui renforce le besoin de surveillance et d'observabilité en temps réel. AWS Lambda est un service informatique sans serveur qui joue un rôle crucial dans la création d'architectures évolutives et axées sur les événements. Cependant, la surveillance et le dépannage des fonctions Lambda peuvent s'avérer difficiles si vous vous fiez uniquement à Amazon CloudWatch Logs, ce qui peut entraîner une latence et des périodes de rétention limitées.

Pour relever ce défi, nous avons AWS introduit l'API de télémétrie Lambda, qui permet aux fonctions Lambda d'envoyer des données de télémétrie directement à des outils de surveillance et d'observabilité tiers. Cette API prend en charge le streaming en temps réel des journaux, des métriques et des traces, et fournit une vue complète et opportune des performances et de l'état de vos fonctions Lambda.

Ce modèle explique comment intégrer l'API de télémétrie Lambda à un moteur [OpenSearch](https://opensearch.org/docs/latest/)de recherche et d'analyse distribué open source. OpenSearch propose une plate-forme puissante et évolutive pour l'ingestion, le stockage et l'analyse de gros volumes de données, ce qui en fait un choix idéal pour les données de télémétrie Lambda. Plus précisément, ce modèle montre comment envoyer des journaux à partir d'une fonction Lambda écrite en Python directement à un OpenSearch cluster en utilisant une extension Lambda fournie par. AWS Cette solution est flexible et personnalisable. Vous pouvez donc créer votre propre extension Lambda ou modifier l'exemple de code source pour modifier le format de sortie comme vous le souhaitez.

Le modèle explique comment configurer l'intégration de l'API de télémétrie Lambda avec OpenSearch, et inclut les meilleures pratiques en matière de sécurité, d'optimisation des coûts et d'évolutivité. L'objectif est de vous aider à mieux comprendre vos fonctions Lambda et à améliorer l'observabilité globale de vos applications sans serveur.


| 
| 
| Remarque : Ce modèle se concentre sur l'intégration de l'API de télémétrie Lambda à Managed. OpenSearch Toutefois, les principes et techniques présentés sont également applicables à l'autogestion OpenSearch et à Elasticsearch. | 
| --- |

## Conditions préalables et limitations
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-prereqs"></a>

Avant de commencer le processus d'intégration, assurez-vous que les conditions préalables suivantes sont réunies :

**Compte AWS**: un actif Compte AWS doté des autorisations appropriées pour créer et gérer les AWS ressources suivantes :
+ AWS Lambda
+ Gestion des identités et des accès AWS (JE SUIS)
+ Amazon OpenSearch Service (si vous utilisez un OpenSearch cluster géré)

**OpenSearch grappe** :
+ Vous pouvez utiliser un OpenSearch cluster autogéré existant ou un service géré tel que OpenSearch Service.
+ Si vous utilisez OpenSearch Service, configurez votre OpenSearch cluster en suivant les instructions de la section [Getting started with Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/gsg.html) dans la documentation du OpenSearch Service.
+ Assurez-vous que le OpenSearch cluster est accessible depuis votre fonction Lambda et qu'il est configuré avec les paramètres de sécurité nécessaires, tels que les politiques d'accès, le chiffrement et l'authentification.
+ Configurez le OpenSearch cluster avec les mappages d'index et les paramètres nécessaires pour ingérer les données de télémétrie Lambda. Pour plus d'informations, consultez la section [Chargement de données de streaming dans Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/integrations.html) dans la documentation du OpenSearch service.

**Connectivité réseau** :
+ Assurez-vous que votre fonction Lambda dispose de la connectivité réseau nécessaire pour accéder au OpenSearch cluster. Pour obtenir des conseils sur la configuration des paramètres du cloud privé virtuel (VPC), consultez la section [Lancement de vos domaines Amazon OpenSearch Service au sein d'un VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html) dans la documentation du service. OpenSearch 

**Rôles et politiques IAM** :
+ Créez un rôle IAM avec les autorisations nécessaires pour que votre fonction Lambda puisse accéder au cluster et accéder OpenSearch à vos informations d'identification qui y sont stockées. AWS Secrets Manager
+ Associez les politiques IAM appropriées au rôle, telles que la `AWSLambdaBasicExecutionRole` politique et les autorisations supplémentaires requises pour interagir avec OpenSearch.
+ Vérifiez que les autorisations IAM accordées à votre fonction Lambda lui permettent d'écrire des données dans le cluster. OpenSearch Pour plus d'informations sur la gestion des autorisations IAM, consultez la section [Définition des autorisations de fonction Lambda avec un rôle d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) dans la documentation Lambda.

**Connaissances du langage de programmation** :
+ Vous devez avoir des connaissances de base en Python (ou le langage de programmation de votre choix) pour comprendre et modifier l'exemple de code de la fonction Lambda et de l'extension Lambda.

**Environnement de développement** :
+ Configurez un environnement de développement local avec les outils et les dépendances nécessaires pour créer et déployer des fonctions et des extensions Lambda. 

**AWS CLI ou AWS Management Console** :
+ Installez et configurez le [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) ou utilisez-le AWS Management Console avec les informations d'identification appropriées pour interagir avec les informations requises Services AWS.

**Surveillance et journalisation** :
+ Familiarisez-vous avec les meilleures pratiques en matière de surveillance et de journalisation AWS, notamment sur des services tels qu'Amazon CloudWatch et à des AWS CloudTrail fins de surveillance et d'audit.
+ Consultez les CloudWatch journaux de votre fonction Lambda afin d'identifier les erreurs ou exceptions liées à l'intégration de l'API de télémétrie Lambda. Pour obtenir des conseils de dépannage, consultez la documentation de l'[API de télémétrie Lambda](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html).

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

Ce modèle utilise le OpenSearch service pour stocker les journaux et les données de télémétrie générés par les fonctions Lambda. Cette approche vous permet de diffuser rapidement les journaux directement vers votre OpenSearch cluster, ce qui réduit la latence et les coûts associés à l'utilisation CloudWatch des journaux comme intermédiaire.


| 
| 
| [Votre code d'extension Lambda peut transférer la télémétrie à OpenSearch Service, soit en utilisant directement l' OpenSearch API, soit en utilisant une bibliothèque cliente. OpenSearch ](https://opensearch.org/docs/latest/clients/index/) L'extension Lambda peut utiliser les opérations en masse prises en charge par l' OpenSearch API pour regrouper des événements de télémétrie et les envoyer au OpenSearch Service en une seule demande. | 
| --- |

Le schéma de flux de travail suivant illustre le flux de travail de journalisation des fonctions Lambda lorsque vous utilisez un OpenSearch cluster comme point de terminaison.

![\[Flux de travail pour envoyer des données de télémétrie à un OpenSearch cluster.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/57fe8796-9f36-46cf-8304-f506242b9f04/images/283ccdcd-a0e1-40a2-a95a-3bd046bfa8ca.png)


L'architecture inclut les composants suivants :
+ Fonction Lambda : fonction sans serveur qui génère des journaux et des données de télémétrie lors de l'exécution.
+ Extension Lambda : extension basée sur Python qui utilise l'API de télémétrie Lambda pour s'intégrer directement au cluster. OpenSearch Cette extension s'exécute parallèlement à la fonction Lambda dans le même environnement d'exécution.
+ API de télémétrie Lambda : API qui permet aux extensions Lambda d'envoyer des données de télémétrie, notamment des journaux, des métriques et des traces, directement à des outils de surveillance et d'observabilité tiers.
+ Cluster Amazon OpenSearch Service : OpenSearch cluster géré hébergé sur AWS. Ce cluster est chargé d'ingérer, de stocker et d'indexer les données de journal diffusées par la fonction Lambda via l'extension Lambda.

Le flux de travail comprend les étapes suivantes :

1. La fonction Lambda est appelée et génère des journaux et des données de télémétrie lors de son exécution.

1. L'extension Lambda s'exécute parallèlement à la fonction permettant de capturer les journaux et les données de télémétrie à l'aide de l'API de télémétrie Lambda.

1. L'extension Lambda établit une connexion sécurisée avec le cluster de OpenSearch services et diffuse les données du journal en temps réel.

1. Le cluster de OpenSearch services ingère, indexe et stocke les données du journal pour les rendre disponibles à des fins de recherche, d'analyse et de visualisation à l'aide d'outils tels que Kibana ou d'autres applications compatibles.

En contournant les CloudWatch journaux et en envoyant les données des journaux directement au OpenSearch cluster, cette solution offre plusieurs avantages :
+ Streaming et analyse des journaux en temps réel, permettant un dépannage plus rapide et une meilleure observabilité.
+ Réduction de la latence et des limites de rétention potentielles associées aux CloudWatch journaux.
+ Possibilité de personnaliser l'extension Lambda ou de créer votre propre extension pour des formats de sortie spécifiques ou des traitements supplémentaires.
+ Intégration aux fonctionnalités de recherche, d'analyse et de visualisation de OpenSearch Service pour l'analyse et la surveillance des journaux.

La section [Epics](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics) fournit des step-by-step instructions pour configurer l'extension Lambda, configurer la fonction Lambda et intégrer le cluster de services. OpenSearch Pour les considérations relatives à la sécurité, les stratégies d'optimisation des coûts et les conseils de surveillance et de dépannage de la solution, consultez la section [Bonnes pratiques](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices).

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

**Services AWS**
+ [AWS Lambda](https://aws.amazon.com/lambda/) est un service informatique qui vous permet d’exécuter un code sans demander la mise en service ou la gestion des serveurs. Lambda exécute le code uniquement lorsque cela est nécessaire et se met à l’échelle automatiquement, qu’il s’agisse de quelques requêtes par jour ou de milliers de requêtes par seconde.
+ [Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/) est un service entièrement géré fourni par AWS qui facilite le déploiement, l'exploitation et le dimensionnement des OpenSearch clusters dans le cloud.
+ Les [extensions Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html) étendent les fonctionnalités de vos fonctions Lambda en exécutant du code personnalisé à côté de celles-ci. Vous pouvez utiliser les extensions Lambda pour intégrer Lambda à divers outils de surveillance, d'observabilité, de sécurité et de gouvernance.
+ [AWS Lambda L'API de télémétrie](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) vous permet d'utiliser des extensions pour capturer des données de surveillance et d'observabilité améliorées directement depuis Lambda et les envoyer vers la destination de votre choix.
+ [CloudFormation](https://aws.amazon.com/cloudformation/)vous aide à modéliser et à configurer vos AWS ressources afin que vous puissiez passer moins de temps à gérer ces ressources et plus de temps à vous concentrer sur vos applications.

**Référentiels de code**
+ [AWS Lambda Les extensions](https://github.com/aws-samples/aws-lambda-extensions) incluent des démos et des exemples de projets élaborés par des AWS partenaires AWS et destinés à vous aider à créer vos propres extensions.
+ [Example Lambda Telemetry Integrations for fournit OpenSearch](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) un exemple d'extension Lambda qui montre comment envoyer des journaux depuis une fonction Lambda vers un cluster. OpenSearch 

**Autres outils**
+ [OpenSearch](https://opensearch.org/faq/)est un moteur de recherche et d'analyse distribué open source qui fournit une plate-forme puissante pour l'ingestion, le stockage et l'analyse de gros volumes de données.
+ Kibana est un outil de visualisation et d'exploration de données open source que vous pouvez utiliser. OpenSearch Notez que la mise en œuvre de la visualisation et de l'analyse dépasse le cadre de ce modèle. Pour plus d'informations, consultez la [documentation de Kibana](https://www.elastic.co/guide/en/kibana/current/index.html) et d'autres ressources.

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

Lorsque vous intégrez l'API de télémétrie Lambda à OpenSearch, tenez compte des meilleures pratiques suivantes.

**Sécurité et contrôle d'accès**
+ **Communication sécurisée** : chiffrez toutes les communications entre vos fonctions Lambda et OpenSearch le cluster à l'aide du protocole HTTPS. Configurez les SSL/TLS paramètres nécessaires dans votre extension et OpenSearch votre configuration Lambda.
+ **Autorisations IAM** :
  + Les extensions s'exécutent dans le même environnement d'exécution que la fonction Lambda. Elles héritent donc du même niveau d'accès aux ressources telles que le système de fichiers, le réseau et les variables d'environnement.
  + Accordez les autorisations IAM minimales nécessaires à vos fonctions Lambda pour accéder à l'API de télémétrie Lambda et écrire des données dans le cluster. OpenSearch Utilisez le [principe du moindre privilège](https://docs.aws.amazon.com/lambda/latest/operatorguide/least-privilege.html) pour limiter l'étendue des autorisations.
+ **OpenSearch contrôle d'accès** : implémentez un contrôle d'accès précis dans votre OpenSearch cluster afin de restreindre l'accès aux données sensibles. Utilisez les fonctionnalités de sécurité intégrées, telles que l'authentification des utilisateurs, le contrôle d'accès basé sur les rôles et les autorisations au niveau de l'index, dans. OpenSearch
+ **Extensions fiables** : installez toujours les extensions provenant d'une source fiable uniquement. Utilisez des outils d'infrastructure en tant que code (IaC) CloudFormation pour simplifier le processus consistant à associer la même configuration d'extension, y compris les autorisations IAM, à plusieurs fonctions Lambda. Les outils IaC fournissent également un enregistrement d'audit des extensions et des versions utilisées précédemment.
+ **Gestion des données sensibles** : lors de la création d'extensions, évitez de consigner des données sensibles. Nettoyez les charges utiles et les métadonnées avant de les enregistrer ou de les conserver à des fins d'audit.

**Optimisation des coûts**
+ **Surveillance et alertes** : configurez des mécanismes de surveillance et d'alerte pour suivre le volume de données envoyées OpenSearch depuis vos fonctions Lambda. Cela vous aidera à identifier les éventuels dépassements de coûts et à y remédier.
+ **Conservation des données** : réfléchissez soigneusement à la période de conservation des données appropriée pour vos données de télémétrie Lambda dans. OpenSearch Des périodes de rétention plus longues peuvent augmenter les coûts de stockage. Trouvez donc un équilibre entre vos besoins d'observabilité et l'optimisation des coûts.
+ **Compression et indexation** : activez la compression des données et optimisez votre stratégie d' OpenSearch indexation afin de réduire l'encombrement de stockage de vos données de télémétrie Lambda.
+ **Réduction de la dépendance** à l'égard de CloudWatch : en intégrant directement l'API de télémétrie Lambda OpenSearch, vous pouvez potentiellement réduire votre dépendance à l'égard des CloudWatch journaux, ce qui peut entraîner des économies de coûts. En effet, l'API de télémétrie Lambda vous permet d'envoyer des journaux directement à OpenSearch, ce qui évite d'avoir à stocker et à traiter les données. CloudWatch

**Évolutivité et fiabilité**
+ Traitement **asynchrone : utilisez des modèles de traitement** asynchrones, tels qu'Amazon Simple Queue Service (Amazon SQS) ou Amazon Kinesis, pour dissocier l'exécution de la fonction Lambda de l'ingestion de données. OpenSearch Cela permet de maintenir la réactivité de vos fonctions Lambda et d'améliorer la fiabilité globale du système.
+ **OpenSearch dimensionnement du cluster** : surveillez les performances et l'utilisation des ressources de votre OpenSearch cluster, et augmentez-le ou diminuez-le selon les besoins pour gérer le volume croissant de données de télémétrie Lambda.
+ **Basculement et reprise après sinistre** : mettez en œuvre une stratégie de reprise après sinistre robuste pour votre OpenSearch cluster, notamment des sauvegardes régulières et la capacité de restaurer rapidement les données en cas de panne.

**Observabilité et surveillance**
+ **Tableaux de bord et visualisations** : utilisez Kibana ou d'autres outils de tableau de bord pour créer des tableaux de bord et des visualisations personnalisés qui fournissent des informations sur les performances et l'état de vos fonctions Lambda en fonction des données de télémétrie contenues dans. OpenSearch
+ **Alertes et notifications** : configurez des alertes et des notifications pour surveiller de manière proactive les anomalies, les erreurs ou les problèmes de performance dans vos fonctions Lambda. Intégrez ces alertes et notifications à vos processus de gestion des incidents existants.
+ **Suivi et corrélation** : assurez-vous que vos données de télémétrie Lambda incluent des informations de suivi pertinentes, telles que les demandes IDs ou les corrélations IDs, afin de permettre l' end-to-endobservabilité et le dépannage dans l'ensemble de vos applications distribuées sans serveur.

En suivant ces bonnes pratiques, vous pouvez vous assurer que votre intégration de l'API de télémétrie Lambda OpenSearch est sécurisée, rentable et évolutive, et qu'elle fournit une observabilité complète pour vos applications sans serveur.

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

### Création et déploiement de la couche d'extension Lambda
<a name="build-and-deploy-the-lam-extension-layer"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Téléchargez le code source. | Téléchargez les exemples d'extensions depuis le référentiel d'[AWS Lambda extensions](https://github.com/aws-samples/aws-lambda-extensions). | Développeur d'applications, architecte cloud | 
| Accédez au dossier `python-example-telemetry-opensearch-extension`. | Le référentiel d'[AWS Lambda extensions](https://github.com/aws-samples/aws-lambda-extensions) que vous avez téléchargé contient de nombreux exemples relatifs à plusieurs cas d'utilisation et à plusieurs environnements d'exécution de langage. Accédez au dossier [python-example-telemetry-opensearch-extension](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) pour utiliser l' OpenSearch extension Python, qui envoie les journaux à OpenSearch. | Développeur d'applications, architecte cloud | 
| Ajoutez des autorisations pour exécuter le point de terminaison de l'extension. | Exécutez la commande suivante pour rendre le point de terminaison de l'extension exécutable :<pre>chmod +x python-example-telemetry-opensearch-extension/extension.py</pre> | Développeur d'applications, architecte cloud | 
| Installez les dépendances de l'extension localement. | Exécutez la commande suivante pour installer les dépendances locales pour le code Python :<pre>pip3 install -r python-example-telemetry-opensearch-extension/requirements.txt -t ./python-example-telemetry-opensearch-extension/</pre>Ces dépendances seront montées avec le code d'extension. | Développeur d'applications, architecte cloud | 
| Créez un package .zip pour l'extension afin de la déployer en tant que couche. | Le fichier d'extension .zip doit contenir un répertoire racine appelé`extensions/`, où se trouve le fichier exécutable de l'extension, et un autre répertoire racine appelé`python-example-telemetry-opensearch-extension/`, où se trouvent la logique de base de l'extension et ses dépendances.Créez le package .zip pour l'extension :<pre>chmod +x extensions/python-example-telemetry-opensearch-extension<br />zip -r extension.zip extensions python-example-telemetry-opensearch-extension</pre> | Développeur d'applications, architecte cloud | 
| Déployez l'extension en tant que couche Lambda. | Publiez la couche à l'aide de votre fichier d'extension .zip et de la commande suivante :<pre>aws lambda publish-layer-version \<br />--layer-name "python-example-telemetry-opensearch-extension" \<br />--zip-file "fileb://extension.zip"</pre> | Développeur d'applications, architecte cloud | 

### Intégrez l'extension dans votre fonction
<a name="integrate-the-extension-into-your-function"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez la couche à votre fonction. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)[Pour plus d'informations sur l'ajout d'une couche à votre fonction Lambda, consultez la documentation Lambda.](https://docs.aws.amazon.com/lambda/latest/dg/adding-layers.html) | Développeur d'applications, architecte cloud | 
| Définissez les variables d'environnement pour la fonction. | Sur la page des fonctions, choisissez l'onglet **Configuration** et ajoutez les variables d'environnement suivantes à votre fonction :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | Développeur d'applications, architecte cloud | 

### Ajoutez des instructions de journalisation et testez votre fonction
<a name="add-logging-statements-and-test-your-function"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez des instructions de journalisation à votre fonction. | Ajoutez des instructions de journalisation à votre fonction en utilisant l'un des [mécanismes de journalisation intégrés](https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html) ou le module de journalisation de votre choix. Voici des exemples de journalisation de messages en 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> | Développeur d'applications, architecte cloud | 
| Testez votre fonction . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)Vous devriez voir **Exécution de la fonction : réussi** si tout fonctionne correctement. | Développeur d'applications, architecte cloud | 

### Afficher vos identifiants OpenSearch
<a name="view-your-logs-in-opensearch"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Interrogez vos index. | Dans OpenSearch, exécutez la commande suivante pour interroger vos index :<pre>SELECT * FROM index-name</pre>Vos journaux devraient être affichés dans les résultats de la requête. | Architecte du cloud | 

## Résolution des problèmes
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Problèmes de connectivité | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 
| Erreurs d'ingestion de données | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 

## Ressources connexes
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-resources"></a>
+ [Exemple d'intégrations de télémétrie Lambda](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) pour (référentiel) OpenSearch GitHub 
+ [Augmentez les fonctions Lambda à l'aide d'extensions Lambda (documentation Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html))
+ [API de télémétrie Lambda (documentation Lambda)](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html)
+ [Présentation de l'API de AWS Lambda télémétrie](https://aws.amazon.com/blogs/compute/introducing-the-aws-lambda-telemetry-api/) (AWS article de blog)
+ [Intégration de l'API de AWS Lambda télémétrie à Prometheus et (article de blog](https://aws.amazon.com/blogs/opensource/integrating-the-aws-lambda-telemetry-api-with-prometheus-and-opensearch)) OpenSearch AWS 

## Informations supplémentaires
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-additional"></a>

**Modification de la structure du journal**

Par défaut, l'extension envoie les journaux sous forme de document OpenSearch imbriqué à. Cela vous permet d'effectuer des requêtes imbriquées pour récupérer des valeurs de colonnes individuelles.

Si la sortie du journal par défaut ne répond pas à vos besoins spécifiques, vous pouvez la personnaliser en modifiant le code source de l'extension Lambda fournie par. AWS AWS encourage les clients à adapter le résultat aux besoins de leur entreprise. Pour modifier la sortie du journal, localisez la `dispatch_to_opensearch` fonction dans le `telemetry_dispatcher.py` fichier dans le code source de l'extension et apportez les modifications nécessaires.

# Configuration d'un routeur cellulaire sans serveur pour une architecture cellulaire
<a name="serverless-cell-router-architecture"></a>

*Mian Tariq et Ioannis Lioupras, Amazon Web Services*

## Résumé
<a name="serverless-cell-router-architecture-summary"></a>

En tant que point d'entrée du système global d'une application cellulaire, le routeur cellulaire est chargé d'affecter efficacement les utilisateurs aux cellules appropriées et de fournir les points de terminaison aux utilisateurs. Le routeur cellulaire gère des fonctions telles que le stockage des user-to-cell mappages, la surveillance de la capacité des cellules et la demande de nouvelles cellules en cas de besoin. Il est important de maintenir le fonctionnement du routeur cellulaire en cas d'interruption potentielle.

Dans ce modèle, le cadre de conception des routeurs cellulaires met l'accent sur la résilience, l'évolutivité et l'optimisation des performances globales. Le modèle utilise un routage statique, dans lequel les clients mettent en cache les points de terminaison lors de la connexion initiale et communiquent directement avec les cellules. Ce découplage améliore la résilience du système en garantissant le fonctionnement ininterrompu de l'application cellulaire en cas de défaillance d'un routeur cellulaire.

Ce modèle utilise un AWS CloudFormation modèle pour déployer l'architecture. Pour plus de détails sur ce que le modèle déploie, ou pour déployer la même configuration à l'aide du AWS Management Console, consultez la section [Informations supplémentaires](#serverless-cell-router-architecture-additional).

**Important**  
La démonstration, le code et le CloudFormation modèle présentés dans ce modèle sont uniquement destinés à des fins explicatives. Le matériel fourni est uniquement destiné à illustrer le modèle de conception et à faciliter la compréhension. La démo et le code ne sont pas prêts pour la production et ne doivent pas être utilisés pour des activités de production en direct. Toute tentative d'utilisation du code ou de la démo dans un environnement de production est fortement déconseillée et se fait à vos propres risques. Nous vous recommandons de consulter les professionnels appropriés et d'effectuer des tests approfondis avant d'implémenter ce modèle ou l'un de ses composants dans un environnement de production.

## Conditions préalables et limitations
<a name="serverless-cell-router-architecture-prereqs"></a>

**Conditions préalables**
+ Un compte Amazon Web Services (AWS) actif
+ La dernière version de [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ [Informations d'identification AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) avec les autorisations nécessaires pour créer la CloudFormation pile, AWS Lambda les fonctions et les ressources associées

**Versions du produit**
+ Python 3.12

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

Le schéma suivant montre une conception de haut niveau du routeur cellulaire.

![\[Le processus en cinq étapes du routeur cellulaire.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/feb90b51-dd91-483b-b5a3-b0a5359686e3.png)


Le diagramme décrit le flux de travail suivant :

1. L'utilisateur contacte Amazon API Gateway, qui sert de façade aux points de terminaison de l'API du routeur cellulaire.

1. Amazon Cognito gère l'authentification et l'autorisation.

1. Le AWS Step Functions flux de travail comprend les éléments suivants :
   + **Orchestrateur** ‒ `Orchestrator` Utilisations AWS Step Functions pour créer un flux de travail ou une machine à états. Le flux de travail est déclenché par l'API du routeur cellulaire. `Orchestrator`Exécute les fonctions Lambda en fonction du chemin de la ressource.
   + **Dispatcher** ‒ La fonction `Dispatcher` Lambda identifie et affecte une cellule statique par nouvel utilisateur enregistré. La fonction recherche la cellule comportant le moins d'utilisateurs, l'affecte à l'utilisateur et renvoie les points de terminaison.
   + **Mappeur** ‒ L'`Mapper`opération gère les user-to-cell mappages au sein de la `RoutingDB` base de données Amazon DynamoDB créée par le modèle. CloudFormation Lorsqu'elle est déclenchée, la `Mapper` fonction fournit aux utilisateurs déjà assignés leurs points de terminaison.
   + **Scaler** ‒ La `Scaler` fonction assure le suivi de l'occupation des cellules et de la capacité disponible. En cas de besoin, la `Scaler` fonction peut envoyer une demande via Amazon Simple Queue Service (Amazon SQS) à la couche Provision and Deploy pour demander de nouvelles cellules.
   + **Validateur** ‒ La `Validator` fonction valide les extrémités des cellules et détecte tout problème potentiel.

1. `RoutingDB`Stocke les informations et les attributs des cellules (points de terminaison de l'API Région AWS, état, métriques).

1. Lorsque la capacité disponible des cellules dépasse un seuil, le routeur cellulaire demande des services de provisionnement et de déploiement via Amazon SQS pour créer de nouvelles cellules.

Lorsque de nouvelles cellules sont créées, elles sont mises `RoutingDB` à jour à partir de la couche Provision and Deploy. Toutefois, ce processus dépasse le cadre de ce modèle. Pour un aperçu des prémisses de conception de l'architecture basée sur les cellules et des détails sur la conception du routeur cellulaire utilisée dans ce modèle, consultez la section [Informations supplémentaires](#serverless-cell-router-architecture-additional).

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

**Services AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) vous aide à créer, publier, gérer, surveiller et sécuriser REST, HTTP, et ce, WebSocket APIs à n'importe quelle échelle.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie à travers Comptes AWS et Régions AWS.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fournit des fonctionnalités d'authentification, d'autorisation et de gestion des utilisateurs pour les applications Web et mobiles.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) fournit une file d'attente hébergée sécurisée, durable et disponible qui vous permet d'intégrer et de dissocier les systèmes et composants logiciels distribués.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)est un service d'orchestration sans serveur qui vous aide à combiner des fonctions Lambda et d'autres fonctions pour créer des applications critiques Services AWS pour l'entreprise.

**Autres outils**
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [Serverless-Cell-Router](https://github.com/aws-samples/Serverless-Cell-Router/). 

## Bonnes pratiques
<a name="serverless-cell-router-architecture-best-practices"></a>

Pour connaître les meilleures pratiques en matière de création d'architectures basées sur des cellules, consultez le guide AWS Well-Architected suivant :
+ [Réduction de la portée de l'impact grâce à une architecture basée sur les cellules](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 Pilier de fiabilité du framework Well-Architected REL1 : 0-BP04 Utiliser des architectures de cloisons pour limiter la portée de l'impact](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)

## Épopées
<a name="serverless-cell-router-architecture-epics"></a>

### Préparation des fichiers source
<a name="prepare-source-files"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le référentiel d'exemples de code. | Pour cloner le Serverless-Cell-Router GitHub dépôt sur votre ordinateur, utilisez la commande suivante :<pre>git clone https://github.com/aws-samples/Serverless-Cell-Router/</pre> | Developer | 
| Configurez des informations d'identification AWS CLI temporaires. | Configurez le AWS CLI avec des informations d'identification pour votre Compte AWS. Cette procédure pas à pas utilise les informations d'identification temporaires fournies par la **ligne de commande ou l'option d'accès programmatique** d' AWS IAM Identity Center. Cela définit les variables`AWS_ACCESS_KEY_ID`,`AWS_SECRET_ACCESS_KEY`, et d'`AWS_SESSION_TOKEN` AWS environnement avec les informations d'identification appropriées à utiliser avec le AWS CLI. | Developer | 
| Créez un compartiment S3. | Créez un compartiment S3 qui sera utilisé pour stocker et accéder aux fonctions Serverless-Cell-Router Lambda à déployer par le CloudFormation modèle. Pour créer le compartiment S3, utilisez la commande suivante : <pre>aws s3api create-bucket --bucket <bucket name> --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1</pre> | Developer | 
| Créez des fichiers .zip. | Créez un fichier .zip pour chaque fonction Lambda située dans [le](https://github.com/aws-samples/Serverless-Cell-Router/tree/main/Functions) répertoire Functions. Ces fichiers .zip seront utilisés pour déployer les fonctions Lambda. Sur un Mac, utilisez les `zip` commandes suivantes :<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 | 
| Copiez les fichiers .zip dans le compartiment S3. | Pour copier tous les fichiers .zip de la fonction Lambda dans le compartiment S3, utilisez les commandes suivantes :<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 | 

### Créez la CloudFormation pile
<a name="create-the-cfn-stack"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez le CloudFormation modèle. | Pour déployer le CloudFormation modèle, exécutez la AWS CLI commande suivante :<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 | 
| Vérifiez les progrès. | Connectez-vous au AWS Management Console, ouvrez la CloudFormation console sur [https://console.aws.amazon.com/cloudformation/]()et vérifiez la progression du développement de la pile. Lorsque le statut est défini`CREATE_COMPLETE`, la pile a été déployée avec succès. | Developer | 

### Évaluer et vérifier
<a name="assess-and-verify"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Attribuez des cellules à l'utilisateur. | Pour lancer le`Orchestrator`, exécutez la commande curl suivante :<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>`Orchestrator`Déclenche l'exécution de la `Dispatcher` fonction. À son tour`Dispatcher`, il vérifie l'existence de l'utilisateur. Si l'utilisateur est trouvé, il `Dispatcher` renvoie l'ID de cellule et le point de terminaison associés URLs. Si l'utilisateur n'est pas trouvé, une cellule `Dispatcher` lui est attribuée et envoie l'identifiant de la cellule à la `Scaler` fonction pour évaluer la capacité résiduelle de la cellule attribuée.La réponse de la `Scaler` fonction est la suivante :`"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 | 
| Récupérez les cellules des utilisateurs. | Pour exécuter la `Orchestrator` `Mapper` fonction, exécutez la commande suivante :<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>`Orchestrator`Recherche la cellule assignée à l'utilisateur et renvoie l'ID de la cellule ainsi URLs que la réponse suivante :`"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 | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez les ressources. | Pour éviter d'encourir des frais supplémentaires sur votre compte, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/serverless-cell-router-architecture.html) | Développeur d’applications | 

## Ressources connexes
<a name="serverless-cell-router-architecture-resources"></a>

**Références**
+ [Stabilité statique avec les zones de disponibilité](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)
+ [Limites d'isolation des pannes AWS : stabilité statique](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html)

**Vidéo**

[Physalia : architecture basée sur les cellules pour améliorer la disponibilité sur Amazon EBS](https://www.youtube.com/watch?v=6IknqRZMFic) 




[https://www.youtube-nocookie.com/embed/6 Tu sais ? RZMFic contrôles = 0](https://www.youtube-nocookie.com/embed/6IknqRZMFic?controls=0)

## Informations supplémentaires
<a name="serverless-cell-router-architecture-additional"></a>

**Locaux de conception d'une architecture basée sur les cellules**

Bien que ce modèle se concentre sur le routeur cellulaire, il est important de comprendre l'environnement dans son ensemble. L'environnement est structuré en trois couches distinctes :
+ La couche de routage, ou couche mince, qui contient le routeur cellulaire
+ La couche cellulaire, composée de différentes cellules
+ La couche de mise à disposition et de déploiement, qui approvisionne les cellules et déploie l'application

Chaque couche conserve ses fonctionnalités même en cas de détérioration affectant les autres couches. Comptes AWS servent de limite d'isolation des défauts.

Le schéma suivant montre les couches à un niveau élevé. La couche Cell et la couche Provision and Deploy ne sont pas concernées par ce modèle.

![\[La couche de routage, la couche de cellule avec plusieurs comptes de cellules et la couche de fourniture et de déploiement.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/137ac34d-43c3-42b6-95de-a365ff611ce8.png)


Pour plus d'informations sur l'architecture basée sur les cellules, voir [Réduction de la portée de l'impact grâce à l'architecture basée sur les cellules : routage des cellules](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-routing.html).

**Modèle de conception du routeur cellulaire**

Le routeur cellulaire est un composant partagé entre les cellules. Pour atténuer les impacts potentiels, il est important que la couche de routage utilise une conception simpliste et évolutive horizontalement aussi fine que possible. En tant que point d'entrée du système, la couche de routage comprend uniquement les composants nécessaires pour affecter efficacement les utilisateurs aux cellules appropriées. Les composants de cette couche ne participent pas à la gestion ou à la création de cellules.

Ce modèle utilise un routage statique, ce qui signifie que le client met en cache les points de terminaison lors de la connexion initiale et établit ensuite une communication directe avec la cellule. Des interactions périodiques entre le client et le routeur cellulaire sont initiées pour confirmer l'état actuel ou récupérer des mises à jour. Ce découplage intentionnel permet aux utilisateurs existants de fonctionner sans interruption en cas d'indisponibilité du routeur cellulaire, tout en garantissant la continuité des fonctionnalités et de la résilience au sein du système.

Dans ce modèle, le routeur cellulaire prend en charge les fonctionnalités suivantes :
+ Extraction des données cellulaires de la base de données de cellules dans la couche Provision and Deploy et stockage ou mise à jour de la base de données locale.
+ Affectation d'une cellule à chaque nouvel utilisateur enregistré de l'application à l'aide de l'algorithme d'attribution de cellule.
+  user-to-cellsStockage du mappage dans la base de données locale.
+ Vérification de la capacité des cellules lors de l'affectation des utilisateurs et activation d'un événement pour le distributeur automatique dans la couche Provision and Deploy afin de créer des cellules.
+ Utilisation de l'algorithme des critères de création de cellules pour fournir cette fonctionnalité.
+ Répondre aux demandes des utilisateurs nouvellement enregistrés en fournissant URLs les cellules statiques. Ils URLs seront mis en cache sur le client avec une durée de vie (TTL).
+ Répondre aux demandes d'utilisateurs existantes concernant une URL non valide en fournissant une URL nouvelle ou mise à jour.

Pour mieux comprendre le routeur cellulaire de démonstration configuré par le CloudFormation modèle, passez en revue les composants et les étapes suivants :

1. Configurez et configurez le groupe d'utilisateurs Amazon Cognito.

1. Configurez et configurez l'API API Gateway pour le routeur cellulaire.

1. Créez une table DynamoDB.

1. Créez et configurez une file d'attente SQS.

1. Implémentez le`Orchestrator`.

1. Implémentez les fonctions Lambda :`Dispatcher`,,`Scaler`,`Mapper`. `Validator`

1. Évaluez et vérifiez.

Le présupposé est que la couche Provision and Deploy est déjà établie. Les détails de sa mise en œuvre dépassent le cadre de cet artefact.

Ces composants étant définis et configurés par un CloudFormation modèle, les étapes suivantes sont présentées de manière descriptive et détaillée. L'hypothèse est que vous possédez les AWS compétences requises pour effectuer l'installation et la configuration.

*1. Configuration et configuration du groupe d'utilisateurs Amazon Cognito*

Connectez-vous à la AWS Management Console console Amazon Cognito et ouvrez-la à l'adresse. [https://console.aws.amazon.com/cognito/]() Configurez et configurez un groupe d'utilisateurs Amazon Cognito nommé`CellRouterPool`, avec intégration d'applications, interface utilisateur hébergée et autorisations nécessaires.

*2. Installation et configuration de l'API API Gateway pour le routeur cellulaire*

Ouvrez la console API Gateway à l'adresse [https://console.aws.amazon.com/apigateway/](). Configurez et configurez une API nommée `CellRouter` à l'aide d'un autorisateur Amazon Cognito intégré au groupe d'utilisateurs Amazon Cognito. `CellRouterPool` Implémentez les éléments suivants :
+ `CellRouter`Ressources d'API, y compris `POST` les méthodes
+ Intégration au flux de travail Step Functions implémenté à l'étape 5
+ Autorisation via l'autorisateur Amazon Cognito
+ Mappages de demandes et de réponses d'intégration
+ Attribution des autorisations nécessaires

*3. Création d'une table DynamoDB*

Ouvrez la console DynamoDB [https://console.aws.amazon.com/dynamodb/]()à l'adresse et créez une table DynamoDB standard appelée avec la configuration suivante : `tbl_router`
+ **Clé de partition** ‒ `marketId`
+ **Clé de tri** ‒ `cellId`
+ **Mode capacité** ‒ Provisionné
+ **Point-in-time restauration (PITR) ‒ Désactivé**

Dans l'onglet **Indexes**, créez un index secondaire global appelé`marketId-currentCapacity-index`. La fonction `Scaler` Lambda utilisera l'index pour effectuer des recherches efficaces dans la cellule ayant le plus petit nombre d'utilisateurs assignés.

Créez la structure du tableau avec les attributs suivants :
+ `marketId`‒ L'Europe
+ `cellId`‒ cellule-0002
+ `currentCapacity`‒ 2
+ `endPoint_1`‒ <your endpoint for the first Region>
+ `endPoint_2`‒ <your endpoint for the second Region>
+ `IsHealthy`‒ Vrai
+ `maxCapacity`‒ 10
+ `regionCode_1` ‒ `eu-north-1`
+ `regionCode_2` ‒ `eu-central-1`
+ `userIds`‒ <your email address>

*4. Création et configuration d'une file d'attente SQS*

Ouvrez la console Amazon SQS à [https://console.aws.amazon.com/sqs/]()l'adresse et créez une file d'attente SQS standard appelée `CellProvisioning` configurée avec le chiffrement par clé **Amazon** SQS.

*5. Implémenter l'orchestrateur*

Développez un flux de travail Step Functions qui servira `Orchestrator` de fil au routeur. Le flux de travail est appelable via l'API du routeur cellulaire. Le flux de travail exécute les fonctions Lambda désignées en fonction du chemin de ressource. Intégrez la fonction step à l'API API Gateway du routeur `CellRouter` cellulaire et configurez les autorisations nécessaires pour appeler les fonctions Lambda.

Le schéma suivant montre le flux de travail. L'état du choix invoque l'une des fonctions Lambda. Si la fonction Lambda est réussie, le flux de travail se termine. Si la fonction Lambda échoue, l'état fail est appelé.

![\[Schéma du flux de travail avec les quatre fonctions et se terminant par un état d'échec.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/cfe8d029-6f30-49a1-aaad-cad503bdcbae.png)


*6. Implémenter les fonctions Lambda*

`Dispatcher`Implémentez les `Validator` fonctions `Mapper``Scaler`,, et. Lorsque vous configurez et configurez chaque fonction dans la démonstration, définissez un rôle pour la fonction et attribuez les autorisations nécessaires pour effectuer les opérations requises sur la table DynamoDB`tbl_router`. Intégrez également chaque fonction dans le flux de travail`Orchestrator`.

*Fonction Dispatcher*

La `Dispatcher` fonction est chargée d'identifier et d'attribuer une seule cellule statique à chaque nouvel utilisateur enregistré. Lorsqu'un nouvel utilisateur s'enregistre auprès de l'application globale, la demande est envoyée à la `Dispatcher` fonction. La fonction traite la demande en utilisant des critères d'évaluation prédéfinis tels que les suivants :

1. **Région** ‒ Sélectionnez la cellule du marché où se trouve l'utilisateur. Par exemple, si l'utilisateur accède à l'application globale depuis l'Europe, sélectionnez une cellule qui utilise Régions AWS en Europe.

1. **Proximité ou latence** ‒ Sélectionnez la cellule la plus proche de l'utilisateur Par exemple, si l'utilisateur accède à l'application depuis les Pays-Bas, la fonction considère une cellule qui utilise Francfort et l'Irlande. La décision concernant la cellule la plus proche est basée sur des métriques telles que le temps de latence entre l'emplacement de l'utilisateur et les régions de la cellule. Pour cet exemple de modèle, les informations sont alimentées de manière statique à partir de la couche Provision and Deploy.

1. **Santé** ‒ La `Dispatcher` fonction vérifie si la cellule sélectionnée est saine en fonction de l'état de cellule indiqué (Healthy = vrai ou faux).

1. **Capacité** ‒ La distribution des utilisateurs est basée sur le *nombre minimal d'utilisateurs dans une logique de cellule*, de sorte que l'utilisateur est affecté à la cellule qui compte le moins d'utilisateurs.

**Note**  
Ces critères sont présentés uniquement pour expliquer cet exemple de modèle. Pour une implémentation réelle d'un routeur cellulaire, vous pouvez définir des critères plus précis et utiliser des critères basés sur des cas.

`Orchestrator`Invoque la fonction Dispatcher pour affecter les utilisateurs aux cellules. Dans cette fonction de démonstration, la valeur de marché est un paramètre statique défini comme`europe`.

La `Dispatcher` fonction détermine si une cellule est déjà attribuée à l'utilisateur. Si la cellule est déjà affectée, la `Dispatcher` fonction renvoie les extrémités de la cellule. Si aucune cellule n'est attribuée à l'utilisateur, la fonction recherche la cellule qui compte le moins d'utilisateurs, l'affecte à l'utilisateur et renvoie les points de terminaison. L'efficacité de la requête de recherche de cellules est optimisée en utilisant l'index secondaire global.

*Fonction de mappage*

La `Mapper` fonction supervise le stockage et la maintenance des user-to-cell mappages dans la base de données. Une cellule singulière est attribuée à chaque utilisateur enregistré. Chaque cellule possède deux cellules distinctes URLs, une pour chaque région AWS. Servant de points de terminaison d'API hébergés sur API Gateway, URLs ils fonctionnent comme des points entrants vers l'application globale.

Lorsque la `Mapper` fonction reçoit une demande de l'application cliente, elle exécute une requête sur la `tbl_router` table DynamoDB pour récupérer user-to-cell le mappage associé à l'identifiant e-mail fourni. Si elle trouve une cellule assignée, la `Mapper` fonction fournit rapidement les deux cellules URLs. La `Mapper` fonction surveille également activement les modifications apportées à la cellule URLs et lance des notifications ou des mises à jour des paramètres utilisateur.

*Fonction Scaler*

La `Scaler` fonction gère la capacité résiduelle de la cellule. Pour chaque nouvelle demande d'enregistrement d'utilisateur, la `Scaler` fonction évalue la capacité disponible de la cellule que la `Dispatcher` fonction a attribuée à l'utilisateur. Si la cellule a atteint sa limite prédéterminée conformément aux critères d'évaluation spécifiés, la fonction lance une demande via une file d'attente Amazon SQS vers la couche Provision and Deploy, sollicitant le provisionnement et le déploiement de nouvelles cellules. La mise à l'échelle des cellules peut être exécutée en fonction d'un ensemble de critères d'évaluation tels que les suivants :

1. **Nombre maximum d'utilisateurs** ‒ Chaque cellule peut avoir un nombre maximum de 500 utilisateurs.

1. **Capacité tampon** ‒ La capacité tampon de chaque cellule est de 20 %, ce qui signifie que chaque cellule peut être affectée à 400 utilisateurs à tout moment. Les 20 % de capacité tampon restants sont réservés aux futurs cas d'utilisation et à la gestion de scénarios inattendus (par exemple, lorsque les services de création et de provisionnement de cellules ne sont pas disponibles).

1. **Création de cellules** ‒ Dès qu'une cellule existante atteint 70 % de sa capacité, une demande est déclenchée pour créer une cellule supplémentaire.

**Note**  
Ces critères sont présentés uniquement pour expliquer cet exemple de modèle. Pour une implémentation réelle d'un routeur cellulaire, vous pouvez définir des critères plus précis et utiliser des critères basés sur des cas.

Le `Scaler` code de démonstration est exécuté `Orchestrator` après avoir attribué `Dispatcher` avec succès une cellule à l'utilisateur nouvellement enregistré. Sur réception de l'identifiant de cellule du`Dispatcher`, évalue si la cellule désignée a une capacité suffisante pour accueillir des utilisateurs supplémentaires, sur la base de critères d'évaluation prédéfinis. `Scaler` Si la capacité de la cellule est insuffisante, la `Scaler` fonction envoie un message au service Amazon SQS. Ce message est récupéré par le service dans la couche Provision and Deploy, ce qui lance le provisionnement d'une nouvelle cellule.

**Fonction de validation**

La `Validator` fonction identifie et résout les problèmes relatifs à l'accès aux cellules. Lorsqu'un utilisateur se connecte à l'application globale, l'application extrait les cellules des paramètres URLs du profil utilisateur et achemine les demandes des utilisateurs vers l'une des deux régions attribuées dans la cellule. S' URLs ils sont inaccessibles, l'application peut envoyer une demande d'URL de validation au routeur cellulaire. Le routeur cellulaire `Orchestrator` invoque le. `Validator` `Validator`Lance le processus de validation. La validation peut inclure, entre autres, les vérifications suivantes :
+ Référencement croisé entre la cellule URLs de la demande et la cellule URLs stockée dans la base de données pour identifier et traiter les mises à jour potentielles
+ Exécution d'un bilan de santé approfondi (par exemple, une `HTTP GET` demande adressée au point de terminaison de la cellule)

En conclusion, la `Validator` fonction fournit des réponses aux demandes des applications clientes, en fournissant le statut de validation ainsi que les étapes de correction requises.

`Validator`Il est conçu pour améliorer l'expérience utilisateur. Imaginons un scénario dans lequel certains utilisateurs rencontrent des difficultés pour accéder à l'application globale en raison d'un incident qui rend les cellules temporairement indisponibles. Au lieu de présenter des erreurs génériques, la `Validator` fonction peut fournir des étapes de correction instructives. Ces étapes peuvent inclure les actions suivantes :
+ Informez les utilisateurs de l'incident.
+ Indiquez le temps d'attente approximatif avant la disponibilité du service.
+ Indiquez le numéro de téléphone du service d'assistance pour obtenir des informations supplémentaires.

Le code de démonstration de la `Validator` fonction vérifie que la cellule fournie par l'utilisateur URLs dans la demande correspond aux enregistrements stockés dans la `tbl_router` table. La `Validator` fonction vérifie également si les cellules sont saines.

# Configurer un accès privé à un compartiment Amazon S3 via un point de terminaison VPC
<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 et Joaquin Rinaudo, Amazon Web Services*

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

Dans Amazon Simple Storage Service (Amazon S3), les fichiers URLs présignés vous permettent de partager des fichiers de taille arbitraire avec des utilisateurs cibles. Par défaut, les Amazon S3 presigned URLs sont accessibles depuis Internet dans un délai d'expiration, ce qui les rend pratiques à utiliser. Cependant, les environnements d'entreprise nécessitent souvent que l'accès à Amazon S3 présigné URLs soit limité à un réseau privé uniquement.

Ce modèle présente une solution sans serveur pour interagir en toute sécurité avec les objets S3 en utilisant une signature préalable URLs depuis un réseau privé sans traversée d'Internet. Dans l'architecture, les utilisateurs accèdent à un Application Load Balancer via un nom de domaine interne. Le trafic est acheminé en interne via Amazon API Gateway et un point de terminaison de cloud privé virtuel (VPC) pour le compartiment S3. La AWS Lambda fonction génère des fichiers présignés URLs pour les téléchargements via le point de terminaison VPC privé, ce qui permet d'améliorer la sécurité et la confidentialité des données sensibles.

## Conditions préalables et limitations
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-prereqs"></a>

**Conditions préalables**
+ Un VPC qui inclut un sous-réseau déployé dans un réseau Compte AWS d'entreprise connecté (par exemple, via). AWS Direct Connect

**Limites**
+ Le compartiment S3 doit porter le même nom que le domaine. Nous vous recommandons donc de vérifier les [règles de dénomination des compartiments Amazon S3.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)
+ Cet exemple d'architecture n'inclut pas de fonctionnalités de surveillance pour l'infrastructure déployée. Si votre cas d'utilisation nécessite une surveillance, pensez à ajouter [AWS des services de surveillance](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html).
+ Cet exemple d'architecture n'inclut pas la validation des entrées. Si votre cas d'utilisation nécessite une validation des entrées et un niveau de sécurité accru, envisagez de [l'utiliser AWS WAF pour protéger votre API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).
+ Cet exemple d'architecture n'inclut pas la journalisation des accès avec l'Application Load Balancer. Si votre cas d'utilisation nécessite la journalisation des accès, pensez à activer les [journaux d'accès de l'équilibreur de charge](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html).

**Versions**
+ Python version 3.11 ou ultérieure
+ Terraform version 1.6 ou ultérieure

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

**Pile technologique cible**

Les services AWS suivants sont utilisés dans la pile technologique cible :
+ **Amazon S3** est le service de stockage principal utilisé pour charger, télécharger et stocker des fichiers en toute sécurité.
+ **Amazon API Gateway** expose les ressources et les points de terminaison permettant d'interagir avec le compartiment S3. Ce service joue un rôle dans la génération de données présignées URLs pour le téléchargement ou le chargement de données.
+ **AWS Lambda**génère des fichiers présignés URLs pour le téléchargement de fichiers depuis Amazon S3. La fonction Lambda est appelée par API Gateway.
+ **Amazon VPC** déploie des ressources au sein d'un VPC pour isoler le réseau. Le VPC inclut des sous-réseaux et des tables de routage pour contrôler le flux de trafic.
+ **Application Load Balancer** achemine le trafic entrant soit vers API Gateway, soit vers le point de terminaison VPC du compartiment S3. Il permet aux utilisateurs du réseau d'entreprise d'accéder aux ressources en interne.
+ Le point de **terminaison VPC pour Amazon S3** permet une communication directe et privée entre les ressources du VPC et Amazon S3 sans passer par l'Internet public.
+ **Gestion des identités et des accès AWS (IAM)** contrôle l'accès aux AWS ressources. Les autorisations sont configurées pour garantir des interactions sécurisées avec l'API et les autres services.

**Architecture cible**

![\[Configuration de l'accès privé à un compartiment S3 via un point de terminaison VPC\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/683ca6a1-789c-4444-bcbf-e4e80d253df3/images/1ca7ee17-d346-4eb9-bf61-ccf42528a401.png)


Le diagramme illustre les éléments suivants :

1. Les utilisateurs du réseau d'entreprise peuvent accéder à l'Application Load Balancer via un nom de domaine interne. Nous supposons qu'une connexion existe entre le réseau d'entreprise et le sous-réseau intranet dans le Compte AWS (par exemple, via une Direct Connect connexion).

1. L'Application Load Balancer achemine le trafic entrant soit vers API Gateway pour générer des données présignées URLs pour le téléchargement ou le chargement vers Amazon S3, soit vers le point de terminaison VPC du compartiment S3. Dans les deux scénarios, les demandes sont acheminées en interne et n'ont pas besoin de passer par Internet.

1. API Gateway expose les ressources et les points de terminaison pour interagir avec le compartiment S3. Dans cet exemple, nous fournissons un point de terminaison pour télécharger des fichiers depuis le compartiment S3, mais cela pourrait également être étendu pour fournir une fonctionnalité de téléchargement.

1. La fonction Lambda génère l'URL présignée pour télécharger un fichier depuis Amazon S3 en utilisant le nom de domaine de l'Application Load Balancer au lieu du domaine public Amazon S3.

1. L'utilisateur reçoit l'URL présignée et l'utilise pour télécharger le fichier depuis Amazon S3 à l'aide de l'Application Load Balancer. L'équilibreur de charge inclut une route par défaut pour envoyer le trafic qui n'est pas destiné à l'API vers le point de terminaison VPC du compartiment S3.

1. Le point de terminaison VPC achemine l'URL présignée avec le nom de domaine personnalisé vers le compartiment S3. Le compartiment S3 doit porter le même nom que le domaine.

**Automatisation et mise à l'échelle**

Ce modèle utilise Terraform pour déployer l'infrastructure depuis le référentiel de code dans un. Compte AWS

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

**Outils**
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les AWS services par le biais de commandes dans votre interface de ligne de commande.

**Référentiel de code**

Le code de ce modèle est disponible dans un GitHub dépôt sur [https://github.com/aws-samples/private-s3-vpce](https://github.com/aws-samples/private-s3-vpce).

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

L'exemple d'architecture de ce modèle utilise les [autorisations IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) pour contrôler l'accès à l'API. Toute personne disposant d'informations d'identification IAM valides peut appeler l'API. Si votre cas d'utilisation nécessite un modèle d'autorisation plus complexe, vous souhaiterez peut-être [utiliser un autre mécanisme de contrôle d'accès](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html).

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

### Déployez la solution dans un Compte AWS
<a name="deploy-the-solution-in-an-aws-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Obtenez des AWS informations d'identification. | Vérifiez vos AWS informations d'identification et votre accès à votre compte. Pour obtenir des instructions, consultez [la section Configuration et paramètres des fichiers d'identification](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) dans la AWS CLI documentation. | AWS DevOps, AWS en général | 
| Pour cloner le référentiel. | Clonez le GitHub référentiel fourni avec ce modèle :<pre>git clone https://github.com/aws-samples/private-s3-vpce</pre> | AWS DevOps, AWS en général | 
| Configurez les variables. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS en général | 
| Déployez la solution. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS en général | 

### Tester la solution
<a name="test-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un fichier de test. | Chargez un fichier sur Amazon S3 afin de créer un scénario de test pour le téléchargement du fichier. Vous pouvez utiliser la [console Amazon S3](https://console.aws.amazon.com/s3/) ou la AWS CLI commande suivante :<pre>aws s3 cp /path/to/testfile s3://your-bucket-name/testfile</pre> | AWS DevOps, AWS en général | 
| Testez la fonctionnalité des URL présignées. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS en général | 
| Nettoyer. | Assurez-vous de supprimer les ressources lorsqu'elles ne sont plus nécessaires :<pre>terraform destroy</pre> | AWS DevOps, AWS en général | 

## Résolution des problèmes
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Les noms de clés d'objets S3 comportant des caractères spéciaux tels que des signes numériques (\$1) interrompent les paramètres d'URL et génèrent des erreurs. | Codez correctement les paramètres d'URL et assurez-vous que le nom de la clé de l'objet S3 est conforme [aux directives d'Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html). | 

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

Amazon S3 :
+ [Partage d'objets avec présigné URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html)
+ [Contrôle de l'accès depuis les points de terminaison VPC à l'aide de politiques de compartiment](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html)

Amazon API Gateway :
+ [Utiliser les politiques de point de terminaison VPC pour le mode privé APIs dans API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-vpc-endpoint-policies.html)

Application Load Balancer :
+ [Hébergement de sites Web statiques HTTPS internes avec ALB, S3 et PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) (article de AWS blog)

# Résoudre les problèmes liés aux états en AWS Step Functions utilisant Amazon Bedrock
<a name="troubleshooting-states-in-aws-step-functions"></a>

*Aniket Kurzadkar et Sangam Kushwaha, Amazon Web Services*

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

AWS Step Functions les fonctionnalités de gestion des erreurs peuvent vous aider à détecter une erreur qui se produit pendant un état dans un [flux de travail](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html), mais il peut toujours être difficile de trouver la cause première d'une erreur et de la déboguer. Ce modèle répond à ce défi et montre comment Amazon Bedrock peut vous aider à résoudre les erreurs qui se produisent pendant les états dans Step Functions. 

Step Functions assure l'orchestration des flux de travail, ce qui permet aux développeurs d'automatiser plus facilement les processus. Step Functions propose également une fonctionnalité de gestion des erreurs qui offre les avantages suivants :
+ Les développeurs peuvent créer des applications plus résilientes qui n'échouent pas complètement en cas de problème.
+ Les flux de travail peuvent inclure une logique conditionnelle pour gérer différemment les différents types d'erreurs.
+ Le système peut réessayer automatiquement les opérations qui ont échoué, peut-être avec un retard exponentiel.
+ Des chemins d'exécution alternatifs peuvent être définis pour les scénarios d'erreur, ce qui permet au flux de travail de s'adapter et de poursuivre le traitement.

Lorsqu'une erreur se produit dans un flux de travail Step Functions, ce modèle montre comment le message d'erreur et le contexte peuvent être envoyés à un modèle de base (FM) tel que Claude 3 qui est pris en charge par Step Functions. Le FM peut analyser l'erreur, la classer et suggérer des mesures correctives potentielles.

## Conditions préalables et limitations
<a name="troubleshooting-states-in-aws-step-functions-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Compréhension de base [AWS Step Functions des flux](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html) de travail
+ Connectivité à l'[API](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html) Amazon Bedrock

**Limites**
+ Vous pouvez utiliser l'approche de ce modèle pour différents Services AWS. Cependant, les résultats peuvent varier en fonction de l'invite créée AWS Lambda qui est ensuite évaluée par Amazon Bedrock.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

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

Le schéma suivant montre les composants du flux de travail et de l'architecture de ce modèle.

![\[Flux de travail pour la gestion des erreurs et la notification à l'aide de Step Functions, Amazon Bedrock et Amazon SNS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/78f86c74-c9de-4562-adcc-105b87a77a54/images/d8eda499-ea1d-45e5-8a36-e04a44ad5c4b.png)


Le schéma montre le flux de travail automatisé pour la gestion des erreurs et la notification dans une machine à états Step Functions :

1. Le développeur lance l'exécution d'une machine à états.

1. La machine à états Step Functions commence à traiter ses états. Deux résultats sont possibles :
   + (a) Si tous les états s'exécutent correctement, le flux de travail est transmis directement à Amazon SNS pour recevoir une notification de réussite par e-mail.
   + (b) Si un état échoue, le flux de travail passe à la fonction Lambda de gestion des erreurs.

1. En cas d'erreur, les événements suivants se produisent :
   + (a) La fonction Lambda (gestionnaire d'erreurs) est déclenchée. La fonction Lambda extrait le message d'erreur à partir des données d'événement que la machine d'état Step Functions lui a transmises. La fonction Lambda prépare ensuite une invite basée sur ce message d'erreur et envoie l'invite à Amazon Bedrock. L'invite demande des solutions et des suggestions relatives à l'erreur spécifique rencontrée.
   + (b) Amazon Bedrock, qui héberge le modèle d'IA génératif, traite l'invite de saisie. (Ce modèle utilise le modèle de fondation Anthropic Claude 3 (FM), qui est l'un des nombreux FMs modèles proposés par Amazon Bedrock.) Le modèle d'IA analyse le contexte d'erreur. Le modèle génère ensuite une réponse qui peut inclure des explications expliquant pourquoi l'erreur s'est produite, des solutions potentielles pour résoudre l'erreur et des suggestions pour éviter de refaire les mêmes erreurs à l'avenir.

     Amazon Bedrock renvoie sa réponse générée par l'IA à la fonction Lambda. La fonction Lambda traite la réponse, éventuellement en la formatant ou en extrayant des informations clés. La fonction Lambda envoie ensuite la réponse à la sortie de la machine à états.

1. Après la gestion des erreurs ou une exécution réussie, le flux de travail se termine en déclenchant l'envoi d'une notification par e-mail par Amazon SNS.

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

**Services AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) est un service entièrement géré qui met à votre disposition des modèles de base très performants (FMs) issus des principales startups d'IA et d'Amazon via une API unifiée.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) vous aide à coordonner et à gérer l'échange de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)est un service d'orchestration sans serveur qui vous aide à combiner des AWS Lambda fonctions et d'autres fonctions Services AWS pour créer des applications critiques pour l'entreprise.

## Bonnes pratiques
<a name="troubleshooting-states-in-aws-step-functions-best-practices"></a>
+ Amazon Bedrock étant un modèle d'intelligence artificielle génératif qui apprend à partir de données entraînées, il utilise également ces données pour former et générer du contexte. Il est recommandé de dissimuler toute information privée susceptible d'entraîner des problèmes de fuite de données. 
+ Bien que l'IA générative puisse fournir des informations précieuses, les décisions critiques en matière de gestion des erreurs doivent tout de même impliquer une supervision humaine, en particulier dans les environnements de production.

## Épopées
<a name="troubleshooting-states-in-aws-step-functions-epics"></a>

### Créez une machine à états pour votre flux de travail
<a name="create-a-state-machine-for-your-workflow"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une machine d'état . | Pour créer une machine à états adaptée à votre flux de travail, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Création d’une fonction Lambda
<a name="create-a-lam-function"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| créer une fonction Lambda ;  | Pour créer une fonction Lambda, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 
| Configurez la logique requise dans le code Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/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/fr_fr/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Intégrez Step Functions à Lambda
<a name="integrate-sfn-with-lam"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez Lambda pour gérer les erreurs dans Step Functions. | Pour configurer Step Functions afin de gérer les erreurs sans perturber le flux de travail, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

## Résolution des problèmes
<a name="troubleshooting-states-in-aws-step-functions-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Lambda ne peut pas accéder à l'API Amazon Bedrock (utilisation non autorisée) | Cette erreur se produit lorsque le rôle Lambda n'est pas autorisé à accéder à l'API Amazon Bedrock. Pour résoudre ce problème, ajoutez la `AmazonBedrockFullAccess` politique pour le rôle Lambda. Pour plus d'informations, consultez [AmazonBedrockFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html)le *Guide de référence des politiques AWS gérées*. | 
| Erreur de temporisation Lambda | Parfois, cela peut prendre plus de 30 secondes pour générer une réponse et la renvoyer, selon l'invite. Pour résoudre ce problème, augmentez le temps de configuration. *Pour plus d'informations, voir [Configurer le délai d'expiration de la fonction Lambda dans le Guide](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html) du AWS Lambda développeur.* | 

## Ressources connexes
<a name="troubleshooting-states-in-aws-step-functions-resources"></a>
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [Accès à l'API Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html)
+ [Créez votre première fonction Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)
+ [Développement de flux de travail avec 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) 

# Plus de modèles
<a name="serverless-more-patterns-pattern-list"></a>

**Topics**
+ [Accédez aux tables Amazon DynamoDB, interrogez-les et joignez-les à l'aide d'Athena](access-query-and-join-amazon-dynamodb-tables-using-athena.md)
+ [Automatisez les CodeGuru révisions Amazon pour les applications AWS CDK Python à l'aide d' GitHub Actions](automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.md)
+ [Automatisez l'évaluation des ressources AWS](automate-aws-resource-assessment.md)
+ [Automatisez le déploiement d'applications imbriquées à l'aide d'AWS SAM](automate-deployment-of-nested-applications-using-aws-sam.md)
+ [Automatisez le déploiement de lacs de AWS Supply Chain données dans une configuration multi-référentiels à l'aide d' GitHub Actions, Artifactory et Terraform](automate-the-deployment-of-aws-supply-chain-data-lakes.md)
+ [Automatisez la réplication des instances Amazon RDS sur Comptes AWS](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [Archivez automatiquement les éléments sur Amazon S3 à l'aide de DynamoDB TTL](automatically-archive-items-to-amazon-s3-using-dynamodb-ttl.md)
+ [Détectez automatiquement les modifications et lancez différents CodePipeline pipelines pour un monorepo dans CodeCommit](automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.md)
+ [Créez une architecture sans serveur multi-locataires dans Amazon Service OpenSearch](build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.md)
+ [Créez un visualiseur de fichiers mainframe avancé dans le cloud AWS](build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.md)
+ [Calculez la valeur à risque (VaR) à l'aide des services AWS](calculate-value-at-risk-var-by-using-aws-services.md)
+ [Copiez les produits AWS Service Catalog sur différents comptes AWS et régions AWS](copy-aws-service-catalog-products-across-different-aws-accounts-and-aws-regions.md)
+ [Créez automatiquement des pipelines CI dynamiques pour les projets Java et Python](create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.md)
+ [Décomposez les monolithes en microservices en utilisant le CQRS et le sourcing d'événements](decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.md)
+ [Déployez une application monopage basée sur React sur Amazon S3 et CloudFront](deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.md)
+ [Déployez une API Amazon API Gateway sur un site Web interne à l'aide de points de terminaison privés et d'un Application Load Balancer](deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.md)
+ [Déployez et gérez un lac de données sans serveur sur le cloud AWS en utilisant l'infrastructure sous forme de code](deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code.md)
+ [Déployez un cas d'utilisation de RAG AWS en utilisant Terraform et Amazon Bedrock](deploy-rag-use-case-on-aws.md)
+ [Développez un assistant entièrement automatisé basé sur le chat en utilisant les agents et les bases de connaissances Amazon Bedrock](develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.md)
+ [Développez des assistants avancés basés sur l'IA générative basés sur le chat en utilisant RAG et des instructions ReAct](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [Générez dynamiquement une politique IAM avec IAM Access Analyzer à l'aide de Step Functions](dynamically-generate-an-iam-policy-with-iam-access-analyzer-by-using-step-functions.md)
+ [Intégrez des composants visuels Amazon Quick Sight dans des applications Web à l'aide d'Amazon Cognito et de l'automatisation iAc](embed-quick-sight-visual-components-into-web-apps-cognito-iac.md)
+ [Assurez-vous que la connexion Amazon EMR à Amazon S3 est activée au lancement](ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch.md)
+ [Estimation du coût d'une table DynamoDB pour une capacité à la demande](estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.md)
+ [Générez des recommandations personnalisées et reclassées à l'aide d'Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Génération de données de test à l'aide d'une tâche AWS Glue et de Python](generate-test-data-using-an-aws-glue-job-and-python.md)
+ [SHA1 Implémenter le hachage des données personnelles lors de la migration de SQL Server vers PostgreSQL](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [Implémentez le modèle de saga sans serveur à l'aide d'AWS Step Functions](implement-the-serverless-saga-pattern-by-using-aws-step-functions.md)
+ [Améliorez les performances opérationnelles en activant Amazon DevOps Guru dans plusieurs régions AWS, sur plusieurs comptes et OUs avec le kit AWS CDK](improve-operational-performance-by-enabling-amazon-devops-guru-across-multiple-aws-regions-accounts-and-ous-with-the-aws-cdk.md)
+ [Lancez un CodeBuild projet sur des comptes AWS à l'aide de Step Functions et d'une fonction proxy Lambda](launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.md)
+ [Migrez les charges de travail Apache Cassandra vers Amazon Keyspaces à l'aide d'AWS Glue](migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.md)
+ [Surveillez l'utilisation d'une Amazon Machine Image partagée sur plusieurs Comptes AWS](monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.md)
+ [Optimisez les déploiements multicomptes sans serveur en utilisant les flux de travail et AWS CDK Actions GitHub](optimize-multi-account-serverless-deployments.md)
+ [Orchestrez un pipeline ETL avec validation, transformation et partitionnement à l'aide de AWS Step Functions](orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.md)
+ [Interrogez les tables Amazon DynamoDB avec SQL à l'aide d'Amazon Athena](query-amazon-dynamodb-tables-sql-amazon-athena.md)
+ [Exécutez des charges de travail planifiées et pilotées par des événements à grande échelle avec AWS Fargate](run-event-driven-and-scheduled-workloads-at-scale-with-aws-fargate.md)
+ [Envoyez des attributs personnalisés à Amazon Cognito et injectez-les dans des jetons](send-custom-attributes-cognito.md)
+ [Diffusez du contenu statique dans un compartiment Amazon S3 via un VPC à l'aide d'Amazon CloudFront](serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.md)
+ [Simplifiez le développement et le déploiement des robots Amazon Lex à l'aide d'un flux de travail automatisé](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [Structurer un projet Python dans une architecture hexagonale à l'aide d'AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Translate le langage naturel en requêtes DSL pour OpenSearch et requêtes Elasticsearch](translate-natural-language-query-dsl-opensearch-elasticsearch.md)
+ [Déchargez les données d'un cluster Amazon Redshift entre différents comptes vers Amazon S3](unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.md)
+ [Coordonnez la dépendance des ressources et l'exécution des tâches à l'aide de la structure AWS Fargate WaitCondition hook](use-the-aws-fargate-waitcondition-hook-construct.md)
+ [Utilisez les agents Amazon Bedrock pour automatiser la création de contrôles d'accès dans Amazon EKS via des instructions textuelles](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)