

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.

# Calcul
<a name="compute-pattern-list"></a>

**Topics**
+ [Conteneurs et microservices](containersandmicroservices-pattern-list.md)
+ [sans serveur](serverless-pattern-list.md)
+ [Réseaux](networking-pattern-list.md)
+ [Diffusion de contenu](contentdelivery-pattern-list.md)

# Conteneurs et microservices
<a name="containersandmicroservices-pattern-list"></a>

**Topics**
+ [Accédez à une base de données Amazon Neptune depuis un conteneur Amazon EKS](access-amazon-neptune-database-from-amazon-eks-container.md)
+ [Accédez à des applications de conteneur en privé sur Amazon ECS à l'aide d'AWS PrivateLink et d'un Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Accédez à des applications de conteneur en privé sur Amazon ECS à l'aide d'AWS Fargate, d' PrivateLinkAWS et d'un Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.md)
+ [Accédez à des applications de conteneur en privé sur Amazon EKS à l'aide d'AWS PrivateLink et d'un Network Load Balancer](access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Automatisez les sauvegardes pour les instances de base de données Amazon RDS for PostgreSQL à l'aide d'AWS Batch](automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch.md)
+ [Automatisez le déploiement du gestionnaire de terminaison de nœuds dans Amazon EKS à l'aide d'un pipeline CI/CD](automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.md)
+ [Créez et déployez automatiquement une application Java sur Amazon EKS à l'aide d'un CI/CD pipeline](automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.md)
+ [Copiez les images des conteneurs Amazon ECR sur et Comptes AWS Régions AWS](copy-ecr-container-images-across-accounts-regions.md)
+ [Créez une définition de tâche Amazon ECS et montez un système de fichiers sur des EC2 instances à l'aide d'Amazon EFS](create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.md)
+ [Déployer des fonctions Lambda avec des images de conteneurs](deploy-lambda-functions-with-container-images.md)
+ [Déployez des microservices Java sur Amazon ECS à l'aide d'AWS Fargate](deploy-java-microservices-on-amazon-ecs-using-aws-fargate.md)
+ [Déployez des ressources et des packages Kubernetes à l'aide d'Amazon EKS et d'un référentiel de diagrammes Helm dans Amazon S3](deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3.md)
+ [Déployez un cluster CockroachDB dans Amazon EKS à l'aide de Terraform](deploy-cockroachdb-on-eks-using-terraform.md)
+ [Déployez un exemple de microservice Java sur Amazon EKS et exposez le microservice à l'aide d'un Application Load Balancer](deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.md)
+ [Déployez une application basée sur GRPC sur un cluster Amazon EKS et accédez-y à l'aide d'un Application Load Balancer](deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.md)
+ [Déployez des applications conteneurisées lorsqu'elles AWS IoT Greengrass V2 s'exécutent en tant que conteneur Docker](deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.md)
+ [Déployez des conteneurs à l'aide d'Elastic Beanstalk](deploy-containers-by-using-elastic-beanstalk.md)
+ [Générez une adresse IP sortante statique à l'aide d'une fonction Lambda, d'Amazon VPC et d'une architecture sans serveur](generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.md)
+ [Identifiez automatiquement les images de conteneur dupliquées lors de la migration vers un référentiel Amazon ECR](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.md)
+ [Installation de l'agent SSM sur les nœuds de travail Amazon EKS à l'aide de Kubernetes DaemonSet](install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset.md)
+ [Installez l'agent SSM et l' CloudWatch agent sur les nœuds de travail Amazon EKS à l'aide de preBootstrapCommands](install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.md)
+ [Migrer les contrôleurs d'entrée NGINX lors de l'activation du mode automatique Amazon EKS](migrate-nginx-ingress-controller-eks-auto-mode.md)
+ [Migrez vos charges de travail de conteneurs d'Azure Red Hat OpenShift (ARO) vers Red Hat OpenShift Service on AWS (ROSA)](migrate-container-workloads-from-aro-to-rosa.md)
+ [Exécutez des tâches Amazon ECS sur Amazon WorkSpaces avec Amazon ECS Anywhere](run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.md)
+ [Exécuter un conteneur Docker d'API Web ASP.NET Core sur une instance Amazon Linux EC2](run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.md)
+ [Exécutez des charges de travail dynamiques avec un stockage de données persistant en utilisant Amazon EFS sur Amazon EKS avec AWS Fargate](run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.md)
+ [Configurez le dimensionnement automatique piloté par les événements dans Amazon EKS à l'aide d'Amazon EKS Pod Identity et KEDA](event-driven-auto-scaling-with-eks-pod-identity-and-keda.md)
+ [Simplifiez les déploiements de PostgreSQL sur Amazon EKS à l'aide de PGO](streamline-postgresql-deployments-amazon-eks-pgo.md)
+ [Simplifiez l'authentification des applications avec le protocole TLS mutuel dans Amazon ECS en utilisant Application Load Balancer](simplify-application-authentication-with-mutual-tls-in-amazon-ecs.md)
+ [Plus de modèles](containersandmicroservices-more-patterns-pattern-list.md)

# Accédez à une base de données Amazon Neptune depuis un conteneur Amazon EKS
<a name="access-amazon-neptune-database-from-amazon-eks-container"></a>

*Ramakrishnan Palaninathan, Amazon Web Services*

## Résumé
<a name="access-amazon-neptune-database-from-amazon-eks-container-summary"></a>

Ce modèle établit une connexion entre Amazon Neptune, qui est une base de données de graphes entièrement gérée, et Amazon Elastic Kubernetes Service (Amazon EKS), un service d'orchestration de conteneurs, pour accéder à une base de données Neptune. Les clusters de base de données Neptune sont confinés dans un cloud privé virtuel (VPC) sur. AWS Pour cette raison, l'accès à Neptune nécessite une configuration minutieuse du VPC pour permettre la connectivité.

Contrairement à Amazon Relational Database Service (Amazon RDS) pour PostgreSQL, Neptune ne s'appuie pas sur les informations d'identification d'accès classiques à la base de données. Il utilise plutôt des rôles Gestion des identités et des accès AWS (IAM) pour l'authentification. Par conséquent, la connexion à Neptune depuis Amazon EKS implique de configurer un rôle IAM doté des autorisations nécessaires pour accéder à Neptune.

De plus, les points de terminaison Neptune ne sont accessibles que dans le VPC où réside le cluster. Cela signifie que vous devez configurer les paramètres réseau pour faciliter la communication entre Amazon EKS et Neptune. En fonction de vos besoins spécifiques et de vos préférences réseau, il existe [différentes approches pour configurer le VPC](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-vpc.html) afin de permettre une connectivité fluide entre Neptune et Amazon EKS. Chaque méthode présente des avantages et des considérations distincts, qui offrent une certaine flexibilité dans la conception de l'architecture de votre base de données en fonction des besoins de votre application.

## Conditions préalables et limitations
<a name="access-amazon-neptune-database-from-amazon-eks-container-prereqs"></a>

**Prérequis**
+ Installez la dernière version de **kubectl** (voir [les instructions](https://kubernetes.io/docs/tasks/tools/#kubectl)). Pour vérifier votre version, exécutez : 

  ```
  kubectl version --short
  ```
+ Installez la dernière version d'**eksctl** (voir [les instructions](https://eksctl.io/installation/)). Pour vérifier votre version, exécutez : 

  ```
  eksctl info
  ```
+ Installez la dernière version de AWS Command Line Interface (AWS CLI) version 2 (voir [les instructions](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). Pour vérifier votre version, exécutez : 

  ```
  aws --version
  ```
+ Créez un cluster de base de données Neptune (voir [les instructions](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-create.html)). Assurez-vous d'établir des communications entre le VPC du cluster et Amazon EKS via le [peering VPC ou](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) une autre méthode. [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html) Assurez-vous également que l'état du cluster est « disponible » et qu'il dispose d'une règle entrante sur le port 8182 pour le groupe de sécurité.
+ Configurez un fournisseur IAM OpenID Connect (OIDC) sur un cluster Amazon EKS existant [(](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)voir les instructions).

**Versions du produit**
+ [Amazon EKS 1.27](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Version 1.3.0.0 du moteur Amazon Neptune (15/11/2023)](https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.3.0.0.html)

## Architecture
<a name="access-amazon-neptune-database-from-amazon-eks-container-architecture"></a>

Le schéma suivant montre la connexion entre les pods Kubernetes d'un cluster Amazon EKS et Neptune pour permettre l'accès à une base de données Neptune.

![\[Connecter les pods d'un nœud Kubernetes à Amazon Neptune.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/2fcf9e00-1664-462a-825e-b0fdd962f478/images/86da67e5-340e-4b29-acc6-2da416ce57eb.png)


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

Vous pouvez utiliser l'[autoscaler horizontal Amazon](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) EKS pour adapter cette solution.

## Outils
<a name="access-amazon-neptune-database-from-amazon-eks-container-tools"></a>

**Services**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [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 Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) est un service de base de données graphique qui vous permet de créer et d'exécuter des applications qui fonctionnent avec des ensembles de données hautement connectés.

## Bonnes pratiques
<a name="access-amazon-neptune-database-from-amazon-eks-container-best-practices"></a>

Pour connaître les meilleures pratiques, consultez [Identity and Access Management](https://aws.github.io/aws-eks-best-practices/security/docs/iam/) dans les *guides des meilleures pratiques Amazon EKS*.

## Épopées
<a name="access-amazon-neptune-database-from-amazon-eks-container-epics"></a>

### Définir les variables d'environnement
<a name="set-environment-variables"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez le contexte du cluster. | Avant d'interagir avec votre cluster Amazon EKS à l'aide de Helm ou d'autres outils de ligne de commande, vous devez définir des variables d'environnement qui encapsulent les détails de votre cluster. Ces variables sont utilisées dans les commandes suivantes pour garantir qu'elles ciblent le bon cluster et les bonnes ressources.Tout d'abord, vérifiez que vous opérez dans le bon contexte de cluster. Cela garantit que toutes les commandes suivantes sont envoyées au cluster Kubernetes prévu. Pour vérifier le contexte actuel, exécutez la commande suivante.<pre>kubectl config current-context</pre> | Administrateur AWS, administrateur du cloud | 
| Définissez la `CLUSTER_NAME` variable. | Définissez la variable d'`CLUSTER_NAME`environnement pour votre cluster Amazon EKS. Dans la commande suivante, remplacez la valeur d'échantillon `us-west-2` par la valeur correcte Région AWS pour votre cluster. Remplacez la valeur d'échantillon `eks-workshop` par le nom de votre cluster existant.<pre>export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)</pre> | Administrateur AWS, administrateur du cloud | 
| Validez la sortie. | Pour vérifier que les variables ont été correctement définies, exécutez la commande suivante.<pre>echo $CLUSTER_NAME</pre>Vérifiez que le résultat de cette commande correspond à l'entrée que vous avez spécifiée à l'étape précédente. | Administrateur AWS, administrateur du cloud | 

### Créez un rôle IAM et associez-le à Kubernetes
<a name="create-iam-role-and-associate-it-with-kubernetes"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Création d'un compte de service . | Vous utilisez [les rôles IAM pour les comptes de service](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) afin de mapper vos comptes de service Kubernetes aux rôles IAM, afin de permettre une gestion précise des autorisations pour vos applications qui s'exécutent sur Amazon EKS. Vous pouvez utiliser [eksctl](https://eksctl.io/) pour créer et associer un rôle IAM à un compte de service Kubernetes spécifique au sein de votre cluster Amazon EKS. La politique AWS gérée `NeptuneFullAccess` permet d'accéder en écriture et en lecture au cluster Neptune que vous avez spécifié.Un point de [terminaison OIDC](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) doit être associé à votre cluster avant d'exécuter ces commandes.Créez un compte de service que vous souhaitez associer à une politique AWS gérée nommée`NeptuneFullAccess`.<pre>eksctl create iamserviceaccount --name eks-neptune-sa --namespace default --cluster $CLUSTER_NAME --attach-policy-arn arn:aws:iam::aws:policy/NeptuneFullAccess --approve --override-existing-serviceaccounts</pre>où `eks-neptune-sa ` est le nom du compte de service que vous souhaitez créer.Une fois terminée, cette commande affiche la réponse suivante :<pre>2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"</pre> | Administrateur AWS, administrateur du cloud | 
| Vérifiez que le compte est correctement configuré. | Assurez-vous que le compte de `eks-neptune-sa` service est correctement configuré dans l'espace de noms par défaut de votre cluster.<pre>kubectl get sa eks-neptune-sa -o yaml</pre>La sortie doit se présenter comme suit :<pre>apiVersion: v1<br />kind: ServiceAccount<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::123456789123:role/eksctl-eks-workshop-addon-iamserviceaccount-d-Role1-Q35yKgdQOlmM<br />  creationTimestamp: "2024-02-07T01:12:39Z"<br />  labels:<br />    app.kubernetes.io/managed-by: eksctl<br />  name: eks-neptune-sa<br />  namespace: default<br />  resourceVersion: "5174750"<br />  uid: cd6ba2f7-a0f5-40e1-a6f4-4081e0042316</pre> | Administrateur AWS, administrateur du cloud | 
| Vérifiez la connectivité. | Déployez un module d'échantillonnage appelé `pod-util` et vérifiez la connectivité avec Neptune.<pre>apiVersion: v1<br />kind: Pod<br />metadata:<br />  name: pod-util<br />  namespace: default<br />spec:<br />  serviceAccountName: eks-neptune-sa<br />  containers:<br />  - name: pod-util<br />    image: public.ecr.aws/patrickc/troubleshoot-util<br />    command:<br />      - sleep<br />      - "3600"<br />    imagePullPolicy: IfNotPresent</pre><pre>kubectl apply -f pod-util.yaml</pre><pre>kubectl exec --stdin --tty pod-util -- /bin/bash<br />bash-5.1# curl -X POST -d '{"gremlin":"g.V().limit(1)"}' https://db-neptune-1.cluster-xxxxxxxxxxxx.us-west-2.neptune.amazonaws.com:8182/gremlin<br />{"requestId":"a4964f2d-12b1-4ed3-8a14-eff511431a0e","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":[]},"meta":{"@type":"g:Map","@value":[]}}}<br />bash-5.1# exit<br />exit</pre> | Administrateur AWS, administrateur du cloud | 

### Valider l'activité de connexion
<a name="validate-connection-activity"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Activez l'authentification de base de données IAM. | Par défaut, l'authentification de base de données IAM est désactivée lorsque vous créez un cluster de base de données Neptune. Vous pouvez activer ou désactiver l'authentification de base de données IAM à l'aide du AWS Management Console.Suivez les étapes décrites dans la AWS documentation pour [activer l'authentification de base de données IAM dans Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html). | Administrateur AWS, administrateur du cloud | 
| Vérifiez les connexions. | Au cours de cette étape, vous interagissez avec le `pod-util` conteneur, qui est déjà en cours d'exécution, pour installer **awscurl** et vérifier la connexion.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-amazon-neptune-database-from-amazon-eks-container.html) | Administrateur AWS, administrateur du cloud | 

## Résolution des problèmes
<a name="access-amazon-neptune-database-from-amazon-eks-container-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Impossible d'accéder à la base de données Neptune. | Consultez la politique IAM associée au compte de service. Assurez-vous qu'il autorise les actions nécessaires (par exemple,`neptune:Connec,neptune:DescribeDBInstances`) pour les opérations que vous souhaitez exécuter. | 

## Ressources connexes
<a name="access-amazon-neptune-database-from-amazon-eks-container-resources"></a>
+ [Autoriser les charges de travail Kubernetes à AWS utiliser les comptes de service Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html) (documentation Amazon EKS)
+ [Rôles IAM pour les comptes de service](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) (documentation Amazon EKS)
+ [Création d'un nouveau cluster de base de données Neptune (documentation](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-create-cluster.html) Amazon Neptune)

# Accédez à des applications de conteneur en privé sur Amazon ECS à l'aide d'AWS PrivateLink et d'un Network Load Balancer
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Résumé
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Ce modèle décrit comment héberger en privé une application de conteneur Docker sur Amazon Elastic Container Service (Amazon ECS) derrière un Network Load Balancer et accéder à l'application via AWS. PrivateLink Vous pouvez ensuite utiliser un réseau privé pour accéder en toute sécurité aux services sur le cloud Amazon Web Services (AWS). Amazon Relational Database Service (Amazon RDS) héberge la base de données relationnelle de l'application exécutée sur Amazon ECS avec haute disponibilité (HA). Amazon Elastic File System (Amazon EFS) est utilisé si l'application nécessite un stockage permanent.

Le service Amazon ECS exécutant les applications Docker, avec un Network Load Balancer sur le front-end, peut être associé à un point de terminaison de cloud privé virtuel (VPC) pour un accès via AWS. PrivateLink Ce service de point de terminaison VPC peut ensuite être partagé avec d'autres utilisateurs VPCs en utilisant leurs points de terminaison VPC.

Vous pouvez également utiliser [AWS Fargate au lieu d'](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)un groupe Amazon Auto EC2 Scaling. Pour plus d'informations, consultez [Accéder aux applications de conteneur de manière privée sur Amazon ECS à l'aide d'AWS Fargate, d' PrivateLinkAWS et d'un Network Load Balancer](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html?did=pg_card).

## Conditions préalables et limitations
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ [Interface de ligne de commande AWS (AWS CLI) version](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 2, installée et configurée sous Linux, macOS ou Windows
+ [Docker](https://www.docker.com/), installé et configuré sous Linux, macOS ou Windows
+ Une application s'exécutant sur Docker

## Architecture
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Utiliser AWS PrivateLink pour accéder à une application de conteneur sur Amazon ECS via un Network Load Balancer.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a316bf46-24db-4514-957d-abc60f8f6962/images/573951ed-74bb-4023-9d9c-43e77e4f8eda.png)


 

**Pile technologique**
+ Amazon CloudWatch
+ Amazon Elastic Compute Cloud (Amazon EC2)
+ Amazon EC2 Auto Scaling
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Lambda
+ AWS PrivateLink
+ AWS Secrets Manager
+ Application Load Balancer
+ Network Load Balancer
+ VPC

*Automatisation et mise à l'échelle*
+ Vous pouvez utiliser [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) pour créer ce modèle en utilisant l'[infrastructure en tant que code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

## Outils
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) — Amazon Elastic Compute Cloud (Amazon EC2) fournit une capacité de calcul évolutive dans le cloud AWS.
+ [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) — Amazon EC2 Auto Scaling vous aide à vous assurer que vous disposez du nombre correct d' EC2 instances Amazon disponibles pour gérer la charge de votre application.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) — Amazon Elastic Container Service (Amazon ECS) est un service de gestion de conteneurs rapide et hautement évolutif qui facilite l'exécution, l'arrêt et la gestion des conteneurs sur un cluster.
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) — Amazon Elastic Container Registry (Amazon ECR) est un service de registre d'images de conteneurs AWS géré qui est sécurisé, évolutif et fiable.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) — Amazon Elastic File System (Amazon EFS) fournit un système de fichiers NFS élastique simple, évolutif et entièrement géré à utiliser avec les services cloud AWS et les ressources sur site.
+ [AWS Lambda — Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul permettant d'exécuter du code sans provisionner ni gérer de serveurs.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/) — Amazon Relational Database Service (Amazon RDS) est un service Web qui facilite la configuration, l'exploitation et le dimensionnement d'une base de données relationnelle dans le cloud AWS.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) — Amazon Simple Storage Service (Amazon S3) est un service de stockage pour Internet. Il est conçu pour faciliter l'informatique à l'échelle d'Internet pour les développeurs.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) — Secrets Manager vous aide à remplacer les informations d'identification codées en dur dans votre code, y compris les mots de passe, en fournissant un appel d'API à Secrets Manager pour récupérer le secret par programmation.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) — Amazon Virtual Private Cloud (Amazon VPC) vous aide à déployer des ressources AWS dans un réseau virtuel que vous avez défini.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) — Elastic Load Balancing distribue le trafic applicatif ou réseau entrant sur plusieurs cibles, telles que EC2 les instances Amazon, les conteneurs et les adresses IP, dans plusieurs zones de disponibilité.
+ [Docker](https://www.docker.com/) — Docker aide les développeurs à emballer, expédier et exécuter n'importe quelle application sous la forme d'un conteneur léger, portable et autonome.

## Épopées
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Création de composants réseau
<a name="create-networking-components"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 

### Création des équilibreurs de charge
<a name="create-the-load-balancers"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un Network Load Balancer.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 
| Créez un Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 

### Créer un système de fichiers Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un système de fichiers Amazon EFS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 
| Montez des cibles pour les sous-réseaux. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 
| Vérifiez que les sous-réseaux sont montés en tant que cibles.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 

### Création d’un compartiment S3
<a name="create-an-s3-bucket"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un compartiment S3.  | Ouvrez la console Amazon S3 et créez un compartiment S3 pour stocker les actifs statiques de votre application, si nécessaire. | Administrateur du cloud | 

### Création d'un secret dans le Gestionnaire de Secrets
<a name="create-a-secrets-manager-secret"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une clé AWS KMS pour chiffrer le secret du Secrets Manager. | Ouvrez la console AWS Key Management Service (AWS KMS) et créez une clé KMS. | Administrateur du cloud | 
|  Créez un secret Secrets Manager pour stocker le mot de passe Amazon RDS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud  | 

### Création d'une instance Amazon RDS
<a name="create-an-amazon-rds-instance"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un groupe de sous-réseaux de base de données.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 
| Créez une instance Amazon RDS. | Créez et configurez une instance Amazon RDS dans les sous-réseaux privés. Assurez-vous que le mode **Multi-AZ** est activé pour HA. | Administrateur du cloud | 
| Chargez les données sur l'instance Amazon RDS.  | Chargez les données relationnelles requises par votre application dans votre instance Amazon RDS. Ce processus varie en fonction des besoins de votre application, ainsi que de la façon dont le schéma de votre base de données est défini et conçu. | Administrateur cloud, DBA | 

### Création des composants Amazon ECS
<a name="create-the-amazon-ecs-components"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un cluster ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 
| Créez les images Docker.  | Créez les images Docker en suivant les instructions de la section *Ressources associées*. | Administrateur du cloud | 
| Créez des référentiels Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrateur cloud, DevOps ingénieur | 
| Authentifiez votre client Docker pour le référentiel Amazon ECR.  | Pour authentifier votre client Docker pour le référentiel Amazon ECR, exécutez la `aws ecr get-login-password` commande « » dans l'AWS CLI. | Administrateur du cloud | 
| Transférez les images Docker vers le référentiel Amazon ECR.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 
| Créez une définition de tâche Amazon ECS.  | Une définition de tâche est requise pour exécuter des conteneurs Docker dans Amazon ECS. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)Pour obtenir de l'aide sur la configuration de votre définition de tâche, consultez la section « Création d'une définition de tâche » dans la section *Ressources connexes*. Assurez-vous de fournir les images Docker que vous avez transmises à Amazon ECR. | Administrateur du cloud | 
| Créez un service Amazon ECS service.  | Créez un service Amazon ECS en utilisant le cluster ECS que vous avez créé précédemment. Assurez-vous de choisir Amazon EC2 comme type de lancement, de choisir la définition de tâche créée à l'étape précédente, ainsi que le groupe cible de l'Application Load Balancer. | Administrateur du cloud | 

### Création d'un groupe Amazon EC2 Auto Scaling
<a name="create-an-amazon-ec2-auto-scaling-group"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une configuration du lancement. | Ouvrez la EC2 console Amazon et créez une configuration de lancement. Assurez-vous que les données utilisateur contiennent le code permettant aux EC2 instances de rejoindre le cluster ECS souhaité. Pour un exemple du code requis, consultez la section *Ressources connexes*. | Administrateur du cloud | 
| Créez un groupe Amazon EC2 Auto Scaling.  | Revenez à la EC2 console Amazon et sous **Auto Scaling**, sélectionnez **Auto Scaling groups**. Configurez un groupe Amazon EC2 Auto Scaling. Assurez-vous de choisir les sous-réseaux privés et la configuration de lancement que vous avez créés précédemment. | Administrateur du cloud | 

### Configuration d'AWS PrivateLink
<a name="set-up-aws-privatelink"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le point de PrivateLink terminaison AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)Pour plus d'informations, consultez la section *Ressources connexes*. | Administrateur du cloud | 

### Création d'un point de terminaison de VPC
<a name="create-a-vpc-endpoint"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un point de terminaison de VPC. | Créez un point de terminaison VPC pour le point de PrivateLink terminaison AWS que vous avez créé précédemment. Le nom de domaine complet (FQDN) du point de terminaison VPC pointera vers le nom de domaine complet du point de terminaison AWS PrivateLink . Cela crée une interface réseau élastique vers le service de point de terminaison VPC à laquelle les points de terminaison DNS peuvent accéder. | Administrateur du cloud | 

### Créer la fonction Lambda
<a name="create-the-lambda-function"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez la fonction Lambda. | Sur la console AWS Lambda, créez une fonction Lambda pour mettre à jour les adresses IP de l'Application Load Balancer en tant que cibles pour le Network Load Balancer. Pour plus d'informations à ce sujet, consultez le billet de [blog Utiliser AWS Lambda pour activer les adresses IP statiques pour les équilibreurs de charge d'application](https://aws.amazon.com/blogs/networking-and-content-delivery/using-aws-lambda-to-enable-static-ip-addresses-for-application-load-balancers/). | Développeur d’applications | 

## Ressources connexes
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Créez les équilibreurs de charge :**
+ [Utiliser un Network Load Balancer pour Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Création d'un Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Utiliser un Application Load Balancer pour Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Création d'un Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Créez un système de fichiers Amazon EFS :**
+ [Création d'un système de fichiers Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Création de cibles de montage dans Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Créez un compartiment S3 :**
+ [Création d'un compartiment S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket)

**Créez un secret du Gestionnaire de Secrets :**
+ [Création de clés dans AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Création d'un secret dans AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

**Créez une instance Amazon RDS :**
+ [Création d'une instance de base de données Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Créez les composants Amazon ECS :**
+ [Création d'un cluster Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-ec2-cluster-console-v2.html)
+ [Création d'une image Docker](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Création d'un référentiel Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Authentifier Docker avec le référentiel Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Transférer une image vers un référentiel Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Création d'une définition de tâche Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Création d'un service Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Créez un groupe Amazon EC2 Auto Scaling :**
+ [Création d'une configuration de lancement](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-config.html)
+ [Création d'un groupe Auto Scaling à l'aide d'une configuration de lancement](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg.html)
+ [Instances de conteneur Bootstrap avec données EC2 utilisateur Amazon](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/bootstrap_container_instance.html)

**Configurez AWS PrivateLink :**
+ [Services de point de terminaison VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html)

**Créez un point de terminaison VPC :**
+ [Points de terminaison VPC d'interface (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)

**Créez la fonction Lambda :**
+ [Création d'une fonction Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)

**Autres ressources :**
+ [Utilisation d'adresses IP statiques pour les équilibreurs de charge d'application](https://aws.amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/)
+ [Accès sécurisé aux services via AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Accédez à des applications de conteneur en privé sur Amazon ECS à l'aide d'AWS Fargate, d' PrivateLinkAWS et d'un Network Load Balancer
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Résumé
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-summary"></a>

Ce modèle décrit comment héberger en privé une application de conteneur Docker sur le cloud Amazon Web Services (AWS) en utilisant Amazon Elastic Container Service (Amazon ECS) avec un type de lancement AWS Fargate, derrière un Network Load Balancer, et accéder à l'application via AWS. PrivateLink Amazon Relational Database Service (Amazon RDS) héberge la base de données relationnelle de l'application exécutée sur Amazon ECS avec haute disponibilité (HA). Vous pouvez utiliser Amazon Elastic File System (Amazon EFS) si l'application nécessite un stockage permanent.

Ce modèle utilise un type de [lancement Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/launch_types.html) pour le service Amazon ECS exécutant les applications Docker, avec un Network Load Balancer au niveau du front-end. Il peut ensuite être associé à un point de terminaison de cloud privé virtuel (VPC) pour y accéder via AWS. PrivateLink Ce service de point de terminaison VPC peut ensuite être partagé avec d'autres utilisateurs VPCs en utilisant leurs points de terminaison VPC.

Vous pouvez utiliser Fargate avec Amazon ECS pour exécuter des conteneurs sans avoir à gérer des serveurs ou des clusters d'instances Amazon Elastic Compute Cloud ( EC2Amazon). Vous pouvez également utiliser un groupe Amazon EC2 Auto Scaling au lieu de Fargate. Pour plus d'informations, consultez [Accéder aux applications de conteneur en privé sur Amazon ECS à l'aide d'AWS PrivateLink et d'un Network Load Balancer](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html?did=pg_card&trk=pg_card).

## Conditions préalables et limitations
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ [Interface de ligne de commande AWS (AWS CLI) version](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 2, installée et configurée sous Linux, macOS ou Windows
+ [Docker](https://www.docker.com/), installé et configuré sous Linux, macOS ou Windows
+ Une application exécutée sur Docker

## Architecture
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Utilisation PrivateLink pour accéder à une application de conteneur sur Amazon ECS avec un type de lancement AWS Fargate.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/31cca5e2-8d8b-45ec-b872-a06b0dd97007/images/57cc9995-45f4-4039-a0bf-2d2b3d6a05de.png)


**Pile technologique**
+ Amazon CloudWatch
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon EFS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Fargate
+ AWS PrivateLink
+ AWS Secrets Manager
+ Application Load Balancer
+ Network Load Balancer
+ VPC

**Automatisation et mise à l'échelle**
+ Vous pouvez utiliser [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) pour créer ce modèle en utilisant l'[infrastructure en tant que code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

## Outils
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-tools"></a>

**Services AWS**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service de registre d'images de conteneurs AWS géré qui est sécurisé, évolutif et fiable.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) est un service de gestion de conteneurs rapide et hautement évolutif qui facilite l'exécution, l'arrêt et la gestion des conteneurs sur un cluster.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) fournit un système de fichiers NFS élastique simple, évolutif et entièrement géré à utiliser avec les services cloud AWS et les ressources sur site.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)est une technologie que vous pouvez utiliser avec Amazon ECS pour exécuter des conteneurs sans avoir à gérer des serveurs ou des clusters d' EC2 instances Amazon.
+ [Amazon Relational Database Service (Amazon RDS](https://docs.aws.amazon.com/rds/index.html)) est un service Web qui facilite la configuration, l'exploitation et le dimensionnement d'une base de données relationnelle dans le. AWS Cloud
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage pour Internet. Il est conçu pour faciliter l'informatique à l'échelle d'Internet pour les développeurs.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/) vous aide à remplacer les informations d'identification codées en dur dans votre code, y compris les mots de passe, par un appel d'API à Secrets Manager pour récupérer le secret par programmation.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer des ressources AWS dans un réseau virtuel que vous avez défini.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribue le trafic applicatif ou réseau entrant sur plusieurs cibles, telles que les EC2 instances, les conteneurs et les adresses IP, dans plusieurs zones de disponibilité.

**Autres outils**
+ [Docker](https://www.docker.com/) aide les développeurs à emballer, expédier et exécuter facilement n'importe quelle application sous la forme d'un conteneur léger, portable et autonome.

## Épopées
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Création de composants réseau
<a name="create-networking-components"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 

### Création des équilibreurs de charge
<a name="create-the-load-balancers"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un Network Load Balancer.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Pour obtenir de l'aide sur ce sujet et sur d'autres articles, consultez la section *Ressources connexes*. | Administrateur du cloud | 
| Créez un Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 

### Créer un système de fichiers Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un système de fichiers Amazon EFS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 
| Montez des cibles pour les sous-réseaux. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 
| Vérifiez que les sous-réseaux sont montés en tant que cibles.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 

### Création d’un compartiment S3
<a name="create-an-s3-bucket"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un compartiment S3. | Ouvrez la console Amazon S3 et [créez un compartiment S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket) pour stocker les actifs statiques de votre application, si nécessaire. | Administrateur du cloud | 

### Création d'un secret dans le Gestionnaire de Secrets
<a name="create-a-secrets-manager-secret"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
|  Créez une clé AWS KMS pour chiffrer le secret du Secrets Manager. | Ouvrez la console AWS Key Management Service (AWS KMS) et créez une clé KMS. | Administrateur du cloud | 
|  Créez un secret Secrets Manager pour stocker le mot de passe Amazon RDS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 

### Création d'une instance Amazon RDS
<a name="create-an-amazon-rds-instance"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un groupe de sous-réseaux de base de données.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 
| Créez une instance Amazon RDS. | Créez et configurez une instance Amazon RDS dans les sous-réseaux privés. Assurez-vous que le mode **Multi-AZ** est activé pour une haute disponibilité (HA). | Administrateur du cloud | 
| Chargez les données sur l'instance Amazon RDS.  | Chargez les données relationnelles requises par votre application dans votre instance Amazon RDS. Ce processus varie en fonction des besoins de votre application, ainsi que de la façon dont le schéma de votre base de données est défini et conçu. | DBA | 

### Création des composants Amazon ECS
<a name="create-the-amazon-ecs-components"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un cluster ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 
| Créez les images Docker. | Créez les images Docker en suivant les instructions de la [AWS documentation](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html). | Administrateur du cloud | 
| créer un référentiel Amazon ECR ; | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur cloud, DevOps ingénieur | 
| Transférez les images Docker vers le référentiel Amazon ECR.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 
| Créez une définition de tâche Amazon ECS.  | Une définition de tâche est requise pour exécuter des conteneurs Docker dans Amazon ECS. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Pour obtenir de l'aide sur la configuration de votre définition de tâche, consultez la section « Création d'une définition de tâche » dans la section *Ressources connexes*. Assurez-vous de fournir les images Docker que vous avez transmises à Amazon ECR. | Administrateur du cloud | 
| Créez un service ECS et choisissez Fargate comme type de lancement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 

### Configuration d'AWS PrivateLink
<a name="set-up-aws-privatelink"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le point de PrivateLink terminaison AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrateur du cloud | 

### Création d'un point de terminaison de VPC
<a name="create-a-vpc-endpoint"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un point de terminaison de VPC. | [Créez un point de terminaison VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) pour le point de PrivateLink terminaison AWS que vous avez créé précédemment. Le nom de domaine complet (FQDN) du point de terminaison VPC pointera vers le nom de domaine complet du point de terminaison AWS PrivateLink . Cela crée une interface réseau élastique vers le service de point de terminaison VPC à laquelle les points de terminaison du service de noms de domaine peuvent accéder. | Administrateur du cloud | 

### Définissez la cible
<a name="set-the-target"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez l'Application Load Balancer comme cible. | [Pour ajouter l'Application Load Balancer en tant que cible pour le Network Load Balancer, suivez les instructions de la documentation.AWS](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/application-load-balancer-target.html) | Développeur d’applications | 

## Ressources connexes
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Créez les équilibreurs de charge :**
+ [Utiliser un Network Load Balancer pour Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Création d'un Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Utiliser un Application Load Balancer pour Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Création d'un Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Créez un système de fichiers Amazon EFS :**
+ [Création d'un système de fichiers Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Création de cibles de montage dans Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Créez un secret du Gestionnaire de Secrets :**
+ [Création de clés dans AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Création d'un secret dans AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)

**Créez une instance Amazon RDS :**
+ [Création d'une instance de base de données Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Création des composants Amazon ECS**
+ [Création d'un référentiel Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Authentifier Docker avec le référentiel Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Transférer une image vers un référentiel Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Création d'une définition de tâche Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Création d'un service Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Autres ressources :**
+ [Accès sécurisé aux services via AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Accédez à des applications de conteneur en privé sur Amazon EKS à l'aide d'AWS PrivateLink et d'un Network Load Balancer
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Résumé
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Ce modèle décrit comment héberger en privé une application de conteneur Docker sur Amazon Elastic Kubernetes Service (Amazon EKS) derrière un Network Load Balancer, et comment accéder à l'application via AWS. PrivateLink Vous pouvez ensuite utiliser un réseau privé pour accéder en toute sécurité aux services sur le cloud Amazon Web Services (AWS). 

Le cluster Amazon EKS exécutant les applications Docker, avec un Network Load Balancer sur le front-end, peut être associé à un point de terminaison de cloud privé virtuel (VPC) pour un accès via AWS. PrivateLink Ce service de point de terminaison VPC peut ensuite être partagé avec d'autres utilisateurs VPCs en utilisant leurs points de terminaison VPC.

La configuration décrite par ce modèle est un moyen sécurisé de partager l'accès aux applications entre VPCs les comptes AWS. Il ne nécessite aucune configuration de connectivité ou de routage particulière, car la connexion entre les comptes client et fournisseur se fait sur le backbone mondial d'AWS et ne traverse pas l'Internet public.

## Conditions préalables et limitations
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Conditions préalables**
+ [Docker](https://www.docker.com/), installé et configuré sous Linux, macOS ou Windows.
+ Une application qui s'exécute sur Docker.
+ Un compte AWS actif.
+ [Interface de ligne de commande AWS (AWS CLI) version](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, installée et configurée sous Linux, macOS ou Windows.
+ Un cluster Amazon EKS existant avec des sous-réseaux privés balisés et configuré pour héberger des applications. Pour plus d'informations, consultez la section [Balisage des sous-réseaux](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html#vpc-subnet-tagging) dans la documentation Amazon EKS. 
+ Kubectl, installé et configuré pour accéder aux ressources de votre cluster Amazon EKS. Pour plus d'informations, consultez la section [Installation de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) dans la documentation Amazon EKS. 

## Architecture
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Utilisez PrivateLink un Network Load Balancer pour accéder à une application dans un conteneur Amazon EKS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/ce977924-012c-4fb6-8e51-94d6e5c829a6/images/378456a3-f4d1-4a57-bb36-879c240cabfb.png)


**Pile technologique**
+ Amazon EKS
+ AWS PrivateLink
+ Network Load Balancer

**Automatisation et mise à l'échelle**
+ Les manifestes Kubernetes peuvent être suivis et gérés sur un référentiel basé sur Git, puis déployés à l'aide de l'intégration continue et de la livraison continue (CI/CD) dans AWS. CodePipeline 
+ Vous pouvez utiliser AWS CloudFormation pour créer ce modèle en utilisant l'infrastructure en tant que code (IaC).

## Outils
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) — AWS Command Line Interface (AWS CLI) est un outil open source qui vous permet d'interagir avec les services AWS à l'aide de commandes dans votre shell de ligne de commande.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) — Elastic Load Balancing distribue le trafic applicatif ou réseau entrant sur plusieurs cibles, telles que les instances Amazon Elastic Compute Cloud (Amazon EC2), les conteneurs et les adresses IP, dans une ou plusieurs zones de disponibilité.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) — Amazon Elastic Kubernetes Service (Amazon EKS) est un service géré que vous pouvez utiliser pour exécuter Kubernetes sur AWS sans avoir à installer, exploiter et gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) — Amazon Virtual Private Cloud (Amazon VPC) vous aide à déployer des ressources AWS dans un réseau virtuel que vous avez défini.
+ [Kubectl — Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) est un utilitaire de ligne de commande permettant d'exécuter des commandes sur des clusters Kubernetes.

## Épopées
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Déployer les fichiers manifestes de déploiement et de service de Kubernetes
<a name="deploy-the-kubernetes-deployment-and-service-manifest-files"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
|  Créez le fichier manifeste de déploiement de Kubernetes. | Créez un fichier manifeste de déploiement en modifiant le fichier d'exemple suivant en fonction de vos besoins.<pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: sample-app<br />spec:<br />  replicas: 3<br />  selector:<br />    matchLabels:<br />      app: nginx<br />  template:<br />    metadata:<br />      labels:<br />        app: nginx<br />    spec:<br />      containers:<br />        - name: nginx<br />          image: public.ecr.aws/z9d2n7e1/nginx:1.19.5<br />          ports:<br />            - name: http<br />              containerPort: 80</pre>Il s'agit d'un exemple de fichier de configuration NGINX déployé à l'aide de l'image Docker NGINX. Pour plus d'informations, consultez [Comment utiliser l'image officielle de NGINX Docker](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/) dans la documentation Docker. | DevOps ingénieur | 
| Déployez le fichier manifeste de déploiement de Kubernetes. | Exécutez la commande suivante pour appliquer le fichier manifeste de déploiement à votre cluster Amazon EKS :`kubectl apply –f <your_deployment_file_name> ` | DevOps ingénieur | 
|  Créez le fichier manifeste du service Kubernetes.  | Créez un fichier manifeste de service en modifiant le fichier d'exemple suivant en fonction de vos besoins.<pre>apiVersion: v1<br />kind: Service<br />metadata:<br />  name: sample-service<br />  annotations:<br />    service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />    service.beta.kubernetes.io/aws-load-balancer-internal: "true"<br />spec:<br />  ports:<br />    - port: 80<br />      targetPort: 80<br />      protocol: TCP<br />  type: LoadBalancer<br />  selector:<br />    app: nginx</pre>Assurez-vous d'avoir inclus les éléments suivants `annotations` pour définir un Network Load Balancer interne :<pre>service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />service.beta.kubernetes.io/aws-load-balancer-internal: "true"</pre> | DevOps ingénieur | 
| Déployez le fichier manifeste du service Kubernetes. | Exécutez la commande suivante pour appliquer le fichier manifeste du service à votre cluster Amazon EKS :`kubectl apply -f <your_service_file_name>` | DevOps ingénieur | 

### Création des points de terminaison
<a name="create-the-endpoints"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Enregistrez le nom du Network Load Balancer.  | Exécutez la commande suivante pour récupérer le nom du Network Load Balancer :`kubectl get svc sample-service -o wide`Enregistrez le nom du Network Load Balancer, qui est requis pour créer un point de PrivateLink terminaison AWS. | DevOps ingénieur | 
| Créez un point de PrivateLink terminaison AWS. | Connectez-vous à l'AWS Management Console, ouvrez la console Amazon VPC, puis créez un point de terminaison AWS PrivateLink . Associez ce point de terminaison au Network Load Balancer pour mettre l'application à la disposition privée des clients. Pour plus d'informations, consultez les [services de point de terminaison VPC PrivateLink (AWS)](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) dans la documentation Amazon VPC.Si le compte client nécessite l'accès à l'application, l'[ID de compte AWS du compte](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html) consommateur doit être ajouté à la liste des principaux autorisés pour la configuration du point de PrivateLink terminaison AWS. Pour plus d'informations, consultez la section [Ajouter et supprimer des autorisations pour votre service de point de terminaison](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html) dans la documentation Amazon VPC. | Administrateur du cloud  | 
| Créez un point de terminaison de VPC. | Sur la console Amazon VPC, choisissez **Endpoint Services**, puis **Create Endpoint** Service. Créez un point de terminaison VPC pour le point de terminaison AWS PrivateLink .Le nom de domaine complet (FQDN) du point de terminaison VPC pointe vers le nom de domaine complet du point de terminaison AWS. PrivateLink Cela crée une interface réseau élastique vers le service de point de terminaison VPC à laquelle les points de terminaison DNS peuvent accéder.  | Administrateur du cloud | 

## Ressources connexes
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-resources"></a>
+ [Utilisation de l'image officielle de NGINX Docker](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/)
+ [Répartition de charge réseau sur Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html) 
+ [Création de services de point de terminaison VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) 
+ [Ajouter et supprimer des autorisations pour votre service de point de terminaison](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html)

# Automatisez les sauvegardes pour les instances de base de données Amazon RDS for PostgreSQL à l'aide d'AWS Batch
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Résumé
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-summary"></a>

La sauvegarde de vos bases de données PostgreSQL est une tâche importante qui peut généralement être effectuée à l'aide de l'utilitaire [pg\$1dump, qui utilise la](https://www.postgresql.org/docs/current/app-pgdump.html) commande COPY par défaut pour créer un schéma et un vidage des données d'une base de données PostgreSQL. Toutefois, ce processus peut devenir répétitif si vous avez besoin de sauvegardes régulières pour plusieurs bases de données PostgreSQL. Si vos bases de données PostgreSQL sont hébergées dans le cloud, vous pouvez également tirer parti de [la fonctionnalité de sauvegarde automatique](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html) fournie par Amazon Relational Database Service (Amazon RDS) pour PostgreSQL. Ce modèle décrit comment automatiser les sauvegardes régulières pour les instances de base de données Amazon RDS for PostgreSQL à l'aide de l'utilitaire pg\$1dump.

Remarque : Les instructions supposent que vous utilisez Amazon RDS. Toutefois, vous pouvez également utiliser cette approche pour les bases de données PostgreSQL hébergées en dehors d'Amazon RDS. Pour effectuer des sauvegardes, la fonction AWS Lambda doit pouvoir accéder à vos bases de données.

Un événement Amazon CloudWatch Events basé sur le temps lance une fonction Lambda qui recherche des [balises de sauvegarde spécifiques appliquées aux métadonnées des instances de base de](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) données PostgreSQL sur Amazon RDS. Si les instances de base de données PostgreSQL possèdent **la balise DBDump bkp:Automated =** Active et d'autres balises de sauvegarde requises, la fonction Lambda soumet des tâches individuelles pour chaque sauvegarde de base de données à AWS Batch. 

AWS Batch traite ces tâches et télécharge les données de sauvegarde dans un compartiment Amazon Simple Storage Service (Amazon S3). Ce modèle utilise un fichier Dockerfile et un fichier entrypoint.sh pour créer une image de conteneur Docker qui est utilisée pour effectuer des sauvegardes dans le cadre de la tâche AWS Batch. Une fois le processus de sauvegarde terminé, AWS Batch enregistre les détails de la sauvegarde dans une table d'inventaire sur Amazon DynamoDB. Comme mesure de protection supplémentaire, un événement CloudWatch Events déclenche une notification Amazon Simple Notification Service (Amazon SNS) en cas d'échec d'une tâche dans AWS Batch. 

## Conditions préalables et limitations
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ Un environnement informatique géré ou non géré existant. Pour plus d'informations, consultez la section [Environnements de calcul gérés et non gérés](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) dans la documentation AWS Batch. 
+ [Image Docker de l'interface de ligne de commande (CLI) AWS version 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-docker.html), installée et configurée.
+ Instances de base de données Amazon RDS for PostgreSQL existantes.  
+ Un compartiment S3 existant. 
+ [Docker](https://www.docker.com/), installé et configuré sous Linux, macOS ou Windows.
+ Connaissance du codage dans Lambda. 

## Architecture
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-architecture"></a>

![\[Architecture permettant de sauvegarder les instances de base de données Amazon RDS for PostgreSQL à l'aide de l'utilitaire pg_dump.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/3283f739-980b-43d4-aca0-9d77a2ce3b85/images/352e2eab-1b7d-44ec-840a-a772a175e873.png)


 

**Pile technologique**
+  CloudWatch Événements Amazon
+ Amazon DynamoDB
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon RDS
+ Amazon SNS
+ Amazon S3
+ AWS Batch
+ AWS Key Management Service (AWS KMS)
+ AWS Lambda
+ AWS Secrets Manager
+ Docker

## Outils
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-tools"></a>
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) — CloudWatch Events fournit un flux en temps quasi réel d'événements système décrivant les modifications apportées aux ressources AWS.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) — DynamoDB est un service de base de données NoSQL entièrement géré qui fournit des performances rapides et prévisibles ainsi qu'une évolutivité sans faille.
+ [Amazon ECR](https://docs.aws.amazon.com/ecr/index.html) — Amazon Elastic Container Registry (Amazon ECR) est un service de registre d'images de conteneurs AWS géré qui est sécurisé, évolutif et fiable.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/index.html) — Amazon Relational Database Service (Amazon RDS) est un service Web qui facilite la configuration, l'exploitation et le dimensionnement d'une base de données relationnelle dans le cloud AWS.
+ [Amazon SNS —](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) Amazon Simple Notification Service (Amazon SNS) est un service géré qui fournit des messages aux abonnés par les éditeurs.
+ [Amazon S3](https://docs.aws.amazon.com/s3/index.html) — Amazon Simple Storage Service (Amazon S3) est un service de stockage pour Internet.
+ [AWS Batch](https://docs.aws.amazon.com/batch/index.html) — AWS Batch vous aide à exécuter des charges de travail de calcul par lots sur le cloud AWS.
+ [AWS KMS](https://docs.aws.amazon.com/kms/index.html) — AWS Key Management Service (AWS KMS) est un service géré qui vous permet de créer et de contrôler facilement les clés de chiffrement utilisées pour chiffrer vos données.
+ [AWS Lambda —](https://docs.aws.amazon.com/lambda/index.html) Lambda est un service de calcul qui vous permet d'exécuter du code sans provisionner ni gérer de serveurs.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/index.html) — Secrets Manager vous aide à remplacer les informations d'identification codées en dur dans votre code, y compris les mots de passe, par un appel d'API à Secrets Manager pour récupérer le secret par programmation.
+ [Docker](https://www.docker.com/) — Docker aide les développeurs à emballer, expédier et exécuter facilement n'importe quelle application sous la forme d'un conteneur léger, portable et autonome.

Vos instances de base de données PostgreSQL sur Amazon RDS doivent [avoir des balises](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) appliquées à leurs métadonnées. La fonction Lambda recherche des balises pour identifier les instances de base de données qui doivent être sauvegardées. Les balises suivantes sont généralement utilisées.


| 
| 
| Balise | Description | 
| --- |--- |
| BKP:Automatisé = Actif DBDump  | Identifie une instance de base de données Amazon RDS comme candidate aux sauvegardes. | 
| point de vente : = AutomatedBackupSecret <secret\$1name > | Identifie le secret Secrets Manager qui contient les identifiants de connexion Amazon RDS. | 
| BKP : S3Bucket automatisé = DBDump <s3\$1bucket\$1name> | Identifie le compartiment S3 auquel envoyer les sauvegardes. | 
| BKP DBDump : Fréquence automatiséeBKP DBDump : heure automatisée | Identifiez la fréquence et les heures auxquelles les bases de données doivent être sauvegardées.  | 
| bkp : pgdumpcommand = <pgdump\$1command> | Identifie les bases de données pour lesquelles les sauvegardes doivent être effectuées. | 

## Épopées
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-epics"></a>

### Création d'une table d'inventaire dans DynamoDB
<a name="create-an-inventory-table-in-dynamodb"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une table dans DynamoDB. | Connectez-vous à la console de gestion AWS, ouvrez la console Amazon DynamoDB et créez une table. Pour obtenir de l'aide sur ce sujet et sur d'autres articles, consultez la section *Ressources connexes*. | Administrateur cloud, administrateur de base de données | 
| Vérifiez que la table a été créée.  | Exécutez la commande `aws dynamodb describe-table --table-name <table-name> \| grep TableStatus`. Si la table existe, la commande renvoie le `"TableStatus": "ACTIVE",` résultat. | Administrateur cloud, administrateur de base de données | 

### Création d'une rubrique SNS pour les échecs de tâches dans AWS Batch
<a name="create-an-sns-topic-for-failed-job-events-in-aws-batch"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une rubrique SNS. | Ouvrez la console Amazon SNS, choisissez **Rubriques** et créez une rubrique SNS portant ce nom. `JobFailedAlert` Inscrivez une adresse e-mail active au sujet et consultez votre boîte de réception pour confirmer l'e-mail d'abonnement au réseau social envoyé par AWS Notifications. | Administrateur du cloud | 
| Créez une règle d'échec de tâche pour AWS Batch.  | Ouvrez la CloudWatch console Amazon, choisissez **Events**, puis **Create rule**. Choisissez **Afficher les options avancées**, puis **Modifier**. Pour **créer un modèle qui sélectionne les événements à traiter par vos cibles**, remplacez le texte existant par le code « Échec de la tâche » figurant dans la section *Informations supplémentaires*. Ce code définit une règle d' CloudWatch événements qui démarre lorsqu'AWS Batch a un `Failed` événement. | Administrateur du cloud | 
| Ajoutez une cible de règle d'événement.  | Dans **Cibles**, choisissez **Ajouter des cibles**, puis sélectionnez la rubrique `JobFailedAlert` SNS. Configurez les autres détails et créez la règle Cloudwatch Events. | Administrateur du cloud | 

### Créez une image Docker et envoyez-la vers un référentiel Amazon ECR
<a name="build-a-docker-image-and-push-it-to-an-amazon-ecr-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| créer un référentiel Amazon ECR ; | Ouvrez la console Amazon ECR et choisissez la région AWS dans laquelle vous souhaitez créer votre référentiel. Choisissez **Référentiels**, puis sélectionnez **Créer un référentiel.** Configurez le référentiel en fonction de vos besoins. | Administrateur du cloud | 
| Écrivez un fichier Dockerfile.  | Connectez-vous à Docker et utilisez les « Exemple de fichier Dockerfile » et « Exemple de fichier entrypoint.sh » de la section *Informations supplémentaires* pour créer un Dockerfile. | DevOps ingénieur | 
| Créez une image Docker et envoyez-la vers le référentiel Amazon ECR. | Créez le Dockerfile en une image Docker et transférez-le vers le référentiel Amazon ECR. Pour obtenir de l'aide concernant cette histoire, consultez la section *Ressources connexes*. | DevOps ingénieur | 

### Création des composants AWS Batch
<a name="create-the-aws-batch-components"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une définition de tâche AWS Batch. | Ouvrez la console AWS Batch et créez une définition de tâche qui inclut l'identifiant de ressource uniforme (URI) du référentiel Amazon ECR comme propriété`Image`. | Administrateur du cloud | 
| Configurez la file d'attente des tâches AWS Batch.  | Sur la console AWS Batch, choisissez **Job queues**, puis **Create queue**. Créez une file d'attente de tâches qui stockera les tâches jusqu'à ce qu'AWS Batch les exécute sur les ressources de votre environnement informatique. Important : assurez-vous d'écrire une logique pour qu'AWS Batch enregistre les détails de la sauvegarde dans la table d'inventaire DynamoDB. | Administrateur du cloud | 

### Création et planification d'une fonction Lambda
<a name="create-and-schedule-a-lambda-function"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une fonction Lambda pour rechercher des balises. | Créez une fonction Lambda qui recherche des balises sur vos instances de base de données PostgreSQL et identifie les candidats de sauvegarde. Assurez-vous que votre fonction Lambda peut identifier la `bkp:AutomatedDBDump = Active` balise et toutes les autres balises requises. Important : La fonction Lambda doit également être capable d'ajouter des tâches à la file d'attente des tâches AWS Batch. | DevOps ingénieur | 
| Créez un CloudWatch événement basé sur le temps.  | Ouvrez la CloudWatch console Amazon et créez un événement CloudWatch Events qui utilise une expression cron pour exécuter votre fonction Lambda selon un calendrier régulier. Important : Tous les événements planifiés utilisent le fuseau horaire UTC. | Administrateur du cloud | 

### Testez l'automatisation des sauvegardes
<a name="test-the-backup-automation"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une clé Amazon KMS. | Ouvrez la console Amazon KMS et créez une clé KMS qui peut être utilisée pour chiffrer les informations d'identification Amazon RDS stockées dans AWS Secrets Manager. | Administrateur du cloud | 
| Créez un secret AWS Secrets Manager. | Ouvrez la console AWS Secrets Manager et stockez vos informations d'identification de base de données Amazon RDS for PostgreSQL en tant que secret. | Administrateur du cloud | 
| Ajoutez les balises requises aux instances de base de données PostgreSQL. | Ouvrez la console Amazon RDS et ajoutez des balises aux instances de base de données PostgreSQL que vous souhaitez sauvegarder automatiquement. Vous pouvez utiliser les balises figurant dans le tableau de la section *Outils*. Si vous avez besoin de sauvegardes à partir de plusieurs bases de données PostgreSQL au sein de la même instance Amazon RDS, `-d test:-d test1` utilisez-la comme valeur pour la balise. `bkp:pgdumpcommand` `test`et `test1` sont des noms de base de données. Assurez-vous qu'il n'y a pas d'espace après les deux points (:). | Administrateur du cloud | 
| Vérifiez l'automatisation des sauvegardes.  | Pour vérifier l'automatisation des sauvegardes, vous pouvez soit appeler la fonction Lambda, soit attendre que le planning de sauvegarde commence. Une fois le processus de sauvegarde terminé, vérifiez que la table d'inventaire DynamoDB contient une entrée de sauvegarde valide pour vos instances de base de données PostgreSQL. S'ils correspondent, le processus d'automatisation des sauvegardes est réussi. | Administrateur du cloud | 

## Ressources connexes
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-resources"></a>

**Création d'une table d'inventaire dans DynamoDB**
+ [Création d'une table Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html)

 

**Création d'une rubrique SNS pour les échecs de tâches dans AWS Batch**
+ [Création d'une rubrique Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html)
+ [Envoyer des alertes SNS en cas d'échec d'une tâche dans AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/batch_sns_tutorial.html)

 

**Créez une image Docker et envoyez-la vers un référentiel Amazon ECR**
+ [Création d'un référentiel Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)    
+ [Écrivez un Dockerfile, créez une image Docker et envoyez-la vers Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)

 

**Création des composants AWS Batch**
+ [Création d'une définition de tâche AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-1)    
+ [Configuration de votre environnement informatique et de la file d'attente des tâches AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-2)   
+ [Création d'une file d'attente de tâches dans AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/create-job-queue.html)

 

**Création d'une fonction Lambda**
+ [Création d'une fonction Lambda et écriture de code](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)
+ [Utiliser Lambda avec DynamoDB](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html)

 

**Création d'un CloudWatch événement**
+ [Création d'un CloudWatch événement basé sur le temps](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Scheduled-Rule.html)   
+ [Utiliser des expressions cron dans Cloudwatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html)

 

**Testez l'automatisation des sauvegardes**
+ [Création d'une clé Amazon KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)    
+ [Création d'un secret dans le Gestionnaire de Secrets](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html)
+ [Ajouter des balises à une instance Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html)

## Informations supplémentaires
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-additional"></a>

**Événement d'échec de la tâche :**

```
{
  "detail-type": [
    "Batch Job State Change"
  ],
  "source": [
    "aws.batch"
  ],
  "detail": {
    "status": [
      "FAILED"
    ]
  }
}
```

**Exemple de fichier Docker :**

```
FROM alpine:latest
RUN apk --update add py-pip postgresql-client jq bash && \
pip install awscli && \
rm -rf /var/cache/apk/*
ADD entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
```

**Exemple de fichier entrypoint.sh :**

```
 #!/bin/bash
set -e
DATETIME=`date +"%Y-%m-%d_%H_%M"`
FILENAME=RDS_PostGres_dump_${RDS_INSTANCE_NAME}
FILE=${FILENAME}_${DATETIME}

aws configure --profile new-profile set role_arn arn:aws:iam::${TargetAccountId}:role/${TargetAccountRoleName}
aws configure --profile new-profile set credential_source EcsContainer

echo "Central Account access provider IAM role is: "
aws sts get-caller-identity

echo "Target Customer Account access provider IAM role is: "
aws sts get-caller-identity --profile new-profile

securestring=$(aws secretsmanager get-secret-value --secret-id $SECRETID --output json --query 'SecretString' --region=$REGION --profile new-profile)

if [[ ${securestring} ]]; then
    echo "successfully accessed secrets manager and got the credentials"
    export PGPASSWORD=$(echo $securestring | jq --raw-output | jq -r '.DB_PASSWORD')
    PGSQL_USER=$(echo $securestring | jq --raw-output | jq -r '.DB_USERNAME')
    echo "Executing pg_dump for the PostGres endpoint ${PGSQL_HOST}"
    # pg_dump -h $PGSQL_HOST -U $PGSQL_USER -n dms_sample | gzip -9 -c  | aws s3 cp - --region=$REGION  --profile new-profile s3://$BUCKET/$FILE
    # in="-n public:-n private"
    IFS=':' list=($EXECUTE_COMMAND);
    for command in "${list[@]}";
      do
        echo $command;
        pg_dump -h $PGSQL_HOST -U $PGSQL_USER ${command} | gzip -9 -c  | aws s3 cp - --region=$REGION --profile new-profile s3://${BUCKET}/${FILE}-${command}".sql.gz"
        echo $?;
        if  [[ $? -ne 0 ]]; then
            echo "Error occurred in database backup process. Exiting now....."
            exit 1
        else
            echo "Postgresql dump was successfully taken for the RDS endpoint ${PGSQL_HOST} and is uploaded to the following S3 location s3://${BUCKET}/${FILE}-${command}.sql.gz"
            #write the details into the inventory table in central account
            echo "Writing to DynamoDB inventory table"
            aws dynamodb put-item --table-name ${RDS_POSTGRES_DUMP_INVENTORY_TABLE} --region=$REGION --item '{ "accountId": { "S": "'"${TargetAccountId}"'" }, "dumpFileUrl": {"S": "'"s3://${BUCKET}/${FILE}-${command}.sql.gz"'" }, "DumpAvailableTime": {"S": "'"`date +"%Y-%m-%d::%H::%M::%S"` UTC"'"}}'
            echo $?
            if  [[ $? -ne 0 ]]; then
                echo "Error occurred while putting item to DynamoDb Inventory Table. Exiting now....."
                exit 1
            else
                echo "Successfully written to DynamoDb Inventory Table ${RDS_POSTGRES_DUMP_INVENTORY_TABLE}"
            fi
        fi
      done;
else
    echo "Something went wrong {$?}"
    exit 1
fi

exec "$@"
```

# Automatisez le déploiement du gestionnaire de terminaison de nœuds dans Amazon EKS à l'aide d'un pipeline CI/CD
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline"></a>

*Sandip Gangapadhyay, Sandeep Gawande, Viyoma Sachdeva, Pragtideep Singh et John Vargas, Amazon Web Services*

## Résumé
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-summary"></a>

**Remarque** : AWS n' CodeCommit est plus disponible pour les nouveaux clients. Les clients actuels d'AWS CodeCommit peuvent continuer à utiliser le service normalement. [En savoir plus](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/)

Sur le cloud Amazon Web Services (AWS), vous pouvez utiliser [AWS Node Termination Handler](https://github.com/aws/aws-node-termination-handler), un projet open source, pour gérer avec élégance la fermeture d'une instance Amazon Elastic Compute Cloud EC2 (Amazon) dans Kubernetes. AWS Node Termination Handler permet de garantir que le plan de contrôle Kubernetes répond de manière appropriée aux événements susceptibles de rendre votre EC2 instance indisponible. Ces événements incluent les suivants :
+ [EC2 maintenance planifiée de l'instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)
+ [Interruptions des instances Amazon EC2 Spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)
+ [Redimensionner le groupe Auto Scaling en](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroupLifecycle.html#as-lifecycle-scale-in)
+ [Rééquilibrage du groupe Auto Scaling entre](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-benefits.html#AutoScalingBehavior.InstanceUsage) les zones de disponibilité
+ EC2 résiliation de l'instance via l'API ou l'AWS Management Console

Si un événement n'est pas géré, le code de votre application risque de ne pas s'arrêter correctement. Le rétablissement de la disponibilité totale peut également prendre plus de temps ou planifier accidentellement le travail sur les nœuds en panne. Le `aws-node-termination-handler` (NTH) peut fonctionner selon deux modes différents : service de métadonnées d'instance (IMDS) ou processeur de file d'attente. Pour plus d'informations sur les deux modes, consultez le [fichier Readme](https://github.com/aws/aws-node-termination-handler#readme).

Ce modèle utilise AWS CodeCommit et automatise le déploiement de NTH en utilisant le processeur de file d'attente via un pipeline d'intégration continue et de livraison continue (CI/CD).

**Note**  
Si vous utilisez des [groupes de nœuds gérés par EKS](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html), vous n'avez pas besoin du`aws-node-termination-handler`.

## Conditions préalables et limitations
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ Un navigateur Web compatible avec l'AWS Management Console. Consultez la [liste des navigateurs pris en charge](https://aws.amazon.com/premiumsupport/knowledge-center/browsers-management-console/).
+ AWS Cloud Development Kit (AWS CDK) [installé.](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install)
+ `kubectl`[, l'outil de ligne de commande Kubernetes, installé.](https://kubernetes.io/docs/tasks/tools/)
+ `eksctl`[, l'interface de ligne de commande AWS (AWS CLI) pour Amazon Elastic Kubernetes Service (Amazon EKS), installée.](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)
+ Un cluster EKS en cours d'exécution avec la version 1.20 ou ultérieure.
+ Un groupe de nœuds autogéré rattaché au cluster EKS. Pour créer un cluster Amazon EKS avec un groupe de nœuds autogéré, exécutez la commande suivante.

  ```
  eksctl create cluster --managed=false --region <region> --name <cluster_name>
  ```

  Pour plus d'informations`eksctl`, consultez la documentation [eksctl](https://eksctl.io/usage/creating-and-managing-clusters/).
+ Fournisseur AWS Identity and Access Management (IAM) OpenID Connect (OIDC) pour votre cluster. Pour plus d'informations, consultez la section [Création d'un fournisseur IAM OIDC pour votre cluster](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html).

**Limites**
+ Vous devez utiliser une région AWS qui prend en charge le service Amazon EKS.

**Versions du produit**
+ Kubernetes version 1.20 ou ultérieure
+ `eksctl`version 0.107.0 ou ultérieure
+ AWS CDK version 2.27.0 ou ultérieure

## Architecture
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-architecture"></a>

**Pile technologique cible**
+ Un cloud privé virtuel (VPC)
+ Un cluster EKS
+ Amazon Simple Queue Service (Amazon SQS)
+ IAM
+ Kubernetes

**Architecture cible******

Le schéma suivant montre une vue d'ensemble des end-to-end étapes à suivre lors du démarrage de la terminaison du nœud.

![\[Un VPC avec un groupe Auto Scaling, un cluster EKS avec Node Termination Handler et une file d'attente SQS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/970dfb73-9526-4942-a974-e8eef6416596/images/9e0125ae-d55b-49dd-ae70-ccaedf03832a.png)


Le flux de travail illustré dans le diagramme comprend les étapes de haut niveau suivantes :

1. L'événement de fin d' EC2 instance de dimensionnement automatique est envoyé à la file d'attente SQS.

1. Le NTH Pod surveille la présence de nouveaux messages dans la file d'attente SQS.

1. Le NTH Pod reçoit le nouveau message et effectue les opérations suivantes :
   + Cordonne le nœud afin que le nouveau pod ne s'exécute pas sur le nœud.
   + Draine le nœud, de sorte que le module existant soit évacué
   + Envoie un signal d'accrochage du cycle de vie au groupe Auto Scaling afin que le nœud puisse être arrêté.

**Automatisation et mise à l'échelle**
+ Le code est géré et déployé par AWS CDK, soutenu par AWS CloudFormation Nested Stacks.
+ Le [plan de contrôle Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/disaster-recovery-resiliency.html) couvre plusieurs zones de disponibilité pour garantir une haute disponibilité.
+ [Pour le [dimensionnement automatique](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html), Amazon EKS prend en charge le Kubernetes [Cluster Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler) et Karpenter.](https://karpenter.sh/)

## Outils
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-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 du cloud AWS sous forme de code.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) vous CodePipeline aide à modéliser et à configurer rapidement les différentes étapes d'une version logicielle et à automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous aide à exécuter Kubernetes sur AWS sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) vous aide à maintenir la disponibilité des applications et vous permet d'ajouter ou de supprimer automatiquement EC2 des instances Amazon selon les conditions que vous définissez.
+ [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**
+ [kubectl](https://kubernetes.io/docs/reference/kubectl/kubectl/) est un outil de ligne de commande Kubernetes permettant d'exécuter des commandes sur des clusters Kubernetes. Vous pouvez utiliser kubectl pour déployer des applications, inspecter et gérer les ressources du cluster et consulter les journaux.

**Code**

Le code de ce modèle est disponible dans le [deploy-nth-to-eks](https://github.com/aws-samples/deploy-nth-to-eks)dépôt sur GitHub .com. Le dépôt de code contient les fichiers et dossiers suivants.
+ `nth folder`— Le graphique Helm, les fichiers de valeurs et les scripts permettant de scanner et de déployer le CloudFormation modèle AWS pour Node Termination Handler.
+ `config/config.json`— Le fichier de paramètres de configuration de l'application. Ce fichier contient tous les paramètres nécessaires au déploiement du CDK.
+ `cdk`— Code source du kit AWS CDK.
+ `setup.sh`— Le script utilisé pour déployer l'application AWS CDK afin de créer le CI/CD pipeline requis et les autres ressources requises.
+ `uninstall.sh`— Le script utilisé pour nettoyer les ressources.

Pour utiliser l'exemple de code, suivez les instructions de la section *Epics*.

## Bonnes pratiques
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-best-practices"></a>

Pour connaître les meilleures pratiques en matière d'automatisation du gestionnaire de terminaison de nœuds AWS, consultez les pages suivantes :
+ [Guides des meilleures pratiques EKS](https://aws.github.io/aws-eks-best-practices/)
+ [Gestionnaire de terminaison de nœuds - Configuration](https://github.com/aws/aws-node-termination-handler/tree/main/config/helm/aws-node-termination-handler)

## Épopées
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-epics"></a>

### Configuration de votre environnement
<a name="set-up-your-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le dépôt. | Pour cloner le dépôt à l'aide de SSH (Secure Shell), exécutez la commande suivante.<pre>git clone git@github.com:aws-samples/deploy-nth-to-eks.git</pre>Pour cloner le dépôt à l'aide du protocole HTTPS, exécutez la commande suivante.<pre>git clone https://github.com/aws-samples/deploy-nth-to-eks.git</pre>Le clonage du dépôt crée un dossier nommé. `deploy-nth-to-eks`Accédez à ce répertoire.<pre>cd deploy-nth-to-eks</pre> | Développeur d'applications, AWS DevOps, DevOps ingénieur | 
| Définissez le fichier kubeconfig. | Définissez vos informations d'identification AWS dans votre terminal et confirmez que vous êtes autorisé à assumer le rôle de cluster. Vous pouvez utiliser l'exemple de code suivant.<pre>aws eks update-kubeconfig --name <Cluster_Name> --region <region>--role-arn <Role_ARN></pre> | AWS DevOps, DevOps ingénieur, développeur d'applications | 

### Déployer le CI/CD pipeline
<a name="deploy-the-ci-cd-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez les paramètres. | Dans le `config/config.json` fichier, configurez les paramètres obligatoires suivants.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) | Développeur d'applications, AWS DevOps, DevOps ingénieur | 
| Créez le CI/CD pipeline pour déployer NTH. | Exécutez le script setup.sh.<pre>./setup.sh</pre>Le script déploiera l'application AWS CDK qui créera le CodeCommit dépôt avec un exemple de code, le pipeline et les CodeBuild projets basés sur les paramètres saisis par l'utilisateur dans `config/config.json` le fichier.Ce script demandera le mot de passe lors de l'installation des packages npm avec la commande sudo. | Développeur d'applications, AWS DevOps, DevOps ingénieur | 
| Passez en revue le CI/CD pipeline. | Ouvrez la console de gestion AWS et passez en revue les ressources suivantes créées dans la pile.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html)Une fois le pipeline exécuté avec succès, la version Helm `aws-node-termination-handler` est installée dans le cluster EKS. En outre, un Pod nommé `aws-node-termination-handler` est en cours d'exécution dans l'`kube-system`espace de noms du cluster. | Développeur d'applications, AWS DevOps, DevOps ingénieur | 

### Tester le déploiement de NTH
<a name="test-nth-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Simulez un événement de mise à l'échelle d'un groupe Auto Scaling. | Pour simuler un événement de mise à l'échelle automatique, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) |  | 
| Passez en revue les journaux. | Pendant l'événement de scale-in, le NTH Pod bouclera et drainera le nœud de travail correspondant (l' EC2 instance qui sera résiliée dans le cadre de l'événement de scale-in). Pour consulter les journaux, utilisez le code de la section *Informations supplémentaires*. | Développeur d'applications, AWS DevOps, DevOps ingénieur | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez toutes les ressources AWS. | Pour nettoyer les ressources créées par ce modèle, exécutez la commande suivante.<pre>./uninstall.sh</pre>Cela nettoiera toutes les ressources créées dans ce modèle en supprimant la CloudFormation pile. | DevOps ingénieur | 

## Résolution des problèmes
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Le registre npm n'est pas configuré correctement. | Lors de l'installation de cette solution, le script installe npm install pour télécharger tous les packages requis. Si, pendant l'installation, vous voyez un message indiquant « Impossible de trouver le module », le registre npm n'est peut-être pas configuré correctement. Pour voir le paramètre de registre actuel, exécutez la commande suivante.<pre>npm config get registry</pre>Pour définir le registre avec`https://registry.npmjs.org/`, exécutez la commande suivante.<pre>npm config set registry https://registry.npmjs.org</pre> | 
| Retardez la livraison des messages SQS. | Dans le cadre de votre dépannage, si vous souhaitez retarder la remise des messages SQS à NTH Pod, vous pouvez ajuster le paramètre de délai de livraison SQS. Pour plus d'informations, consultez les files [d'attente Amazon SQS Delay.](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html) | 

## Ressources connexes
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-resources"></a>
+ [Code source du gestionnaire de terminaison des nœuds AWS](https://github.com/aws/aws-node-termination-handler)
+ [EC2 atelier](https://ec2spotworkshops.com/using_ec2_spot_instances_with_eks/070_selfmanagednodegroupswithspot/deployhandler.html)
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://aws.amazon.com/eks/)
+ [Kit de développement AWS Cloud](https://aws.amazon.com/cdk/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)

## Informations supplémentaires
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-additional"></a>

1. Trouvez le nom du NTH Pod.

```
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
```

2. Consultez les journaux. Un exemple de journal ressemble à ce qui suit. Cela indique que le nœud a été bouclé et vidé avant d'envoyer le signal de fin du cycle de vie du groupe Auto Scaling.

```
kubectl -n kube-system logs aws-node-termination-handler-65445555-kbqc7
022/07/17 20:20:43 INF Adding new event to the event store event={"AutoScalingGroupName":"eksctl-my-cluster-target-nodegroup-ng-10d99c89-NodeGroup-ZME36IGAP7O1","Description":"ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n","EndTime":"0001-01-01T00:00:00Z","EventID":"asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564","InProgress":false,"InstanceID":"i-0409f2a9d3085b80e","IsManaged":true,"Kind":"SQS_TERMINATE","NodeLabels":null,"NodeName":"ip-192-168-75-60.us-east-2.compute.internal","NodeProcessed":false,"Pods":null,"ProviderID":"aws:///us-east-2c/i-0409f2a9d3085b80e","StartTime":"2022-07-17T20:20:42.702Z","State":""}
2022/07/17 20:20:44 INF Requesting instance drain event-id=asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564 instance-id=i-0409f2a9d3085b80e kind=SQS_TERMINATE node-name=ip-192-168-75-60.us-east-2.compute.internal provider-id=aws:///us-east-2c/i-0409f2a9d3085b80e
2022/07/17 20:20:44 INF Pods on node node_name=ip-192-168-75-60.us-east-2.compute.internal pod_names=["aws-node-qchsw","aws-node-termination-handler-65445555-kbqc7","kube-proxy-mz5x5"]
2022/07/17 20:20:44 INF Draining the node
2022/07/17 20:20:44 ??? WARNING: ignoring DaemonSet-managed Pods: kube-system/aws-node-qchsw, kube-system/kube-proxy-mz5x5
2022/07/17 20:20:44 INF Node successfully cordoned and drained node_name=ip-192-168-75-60.us-east-2.compute.internal reason="ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n"
2022/07/17 20:20:44 INF Completed ASG Lifecycle Hook (NTH-K8S-TERM-HOOK) for instance i-0409f2a9d3085b80e
```

# Créez et déployez automatiquement une application Java sur Amazon EKS à l'aide d'un CI/CD pipeline
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline"></a>

*MAHESH RAGHUNANDANAN, Jomcy Pappachen et James Radtke, Amazon Web Services*

## Résumé
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-summary"></a>

Ce modèle décrit comment créer un pipeline d'intégration et de livraison continues (CI/CD) qui crée et déploie automatiquement une application Java selon les DevSecOps pratiques recommandées sur un cluster Amazon Elastic Kubernetes Service (Amazon EKS) sur le. AWS Cloud Ce modèle utilise une application d'accueil développée avec un framework Java Spring Boot et qui utilise Apache Maven.

Vous pouvez utiliser l'approche de ce modèle pour créer le code d'une application Java, empaqueter les artefacts de l'application sous forme d'image Docker, scanner l'image de sécurité et télécharger l'image en tant que conteneur de charge de travail sur Amazon EKS. L'approche de ce modèle est utile si vous souhaitez migrer d'une architecture monolithique étroitement couplée vers une architecture de microservices. Cette approche vous permet également de surveiller et de gérer l'ensemble du cycle de vie d'une application Java, ce qui garantit un niveau d'automatisation supérieur et permet d'éviter les erreurs ou les bogues.

## Conditions préalables et limitations
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ AWS Command Line Interface (AWS CLI) version 2, installée et configurée. Pour plus d'informations à ce sujet, consultez la section [Installation ou mise à jour vers la dernière version AWS CLI de](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) la AWS CLI documentation.

  AWS CLI la version 2 doit être configurée avec le même rôle Gestion des identités et des accès AWS (IAM) qui crée le cluster Amazon EKS, car seul ce rôle est autorisé à ajouter d'autres rôles IAM au. `aws-auth` `ConfigMap` Pour plus d'informations et pour connaître les étapes de configuration AWS CLI, consultez [la section Configuration des paramètres](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) dans la AWS CLI documentation.
+ Rôles et autorisations IAM avec accès complet à AWS CloudFormation. Pour plus d'informations à ce sujet, consultez la section [Contrôle de l'accès avec IAM](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html) dans la CloudFormation documentation.
+ Un cluster Amazon EKS existant, avec les détails du nom du rôle IAM et le nom de ressource Amazon (ARN) du rôle IAM pour les nœuds de travail du cluster EKS.
+ Kubernetes Cluster Autoscaler, installé et configuré dans votre cluster Amazon EKS. Pour plus d'informations, consultez la section [Scale cluster computing with Karpenter et Cluster Autoscaler dans la documentation](https://docs.aws.amazon.com/eks/latest/userguide/cluster-autoscaler.html) Amazon EKS. 
+ Accès au code du GitHub référentiel.

**Important**  
AWS Security Hub CSPM est activé dans le cadre des CloudFormation modèles inclus dans le code de ce modèle. Par défaut, une fois que Security Hub CSPM est activé, il est proposé avec un essai gratuit de 30 jours. Après la période d'essai, cela entraîne un coût Service AWS. Pour plus d’informations sur la tarification, consultez [Tarification d’AWS Security Hub CSPM](https://aws.amazon.com/security-hub/pricing/).

**Versions du produit**
+ Helm version 3.4.2 ou ultérieure
+ Apache Maven version 3.6.3 ou ultérieure
+ BridgeCrew Checkov version 2.2 ou ultérieure
+ Aqua Security Trivy version 0.37 ou ultérieure

## Architecture
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-architecture"></a>

**Pile technologique**
+ AWS CodeBuild
+ AWS CodeCommit
+ Amazon CodeGuru
+ AWS CodePipeline
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon EKS
+ Amazon EventBridge
+ AWS Security Hub CSPM
+ Amazon Simple Notiﬁcation Service (Amazon SNS)

**Architecture cible**

![\[Flux de travail pour le déploiement d'une application Java sur Amazon EKS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/95a5b5c2-d7fb-41eb-9089-455318c0d585/images/4f5fd8c2-2b6d-4945-aa64-fcf317521711.png)


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

1. Le développeur met à jour le code de l'application Java dans la branche de base du CodeCommit référentiel, ce qui crée une pull request (PR).

1. Dès que le PR est soumis, Amazon CodeGuru Reviewer passe automatiquement en revue le code, l'analyse en fonction des meilleures pratiques pour Java et donne des recommandations au développeur.

1. Une fois le PR fusionné avec la branche de base, un EventBridge événement Amazon est créé.

1. L' EventBridge événement initie le CodePipeline pipeline, qui démarre.

1. CodePipeline exécute la phase de CodeSecurity scan (sécurité continue).

1. AWS CodeBuild lance le processus d'analyse de sécurité dans lequel les fichiers Helm du déploiement Dockerfile et Kubernetes sont analysés à l'aide de Checkov, et le code source de l'application est analysé en fonction des modifications de code incrémentielles. L'analyse du code source de l'application est effectuée par le [wrapper de l'interface de ligne de commande (CLI) CodeGuru Reviewer](https://github.com/aws/aws-codeguru-cli).
**Note**  
À compter du 7 novembre 2025, vous ne pourrez plus créer de nouvelles associations de référentiels dans Amazon CodeGuru Reviewer. Pour en savoir plus sur les services dotés de fonctionnalités similaires à celles de CodeGuru Reviewer, consultez l'[évolution de la disponibilité d'Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) dans la documentation de CodeGuru Reviewer. 

1. Si la phase d'analyse de sécurité est réussie, la phase de construction (intégration continue) est lancée.

1. Au cours de la phase de construction CodeBuild , génère l'artefact, l'empaquette dans une image Docker, scanne l'image pour détecter les failles de sécurité à l'aide d'Aqua Security Trivy et stocke l'image dans Amazon ECR.

1. Les vulnérabilités détectées à l'étape 8 sont transférées vers Security Hub CSPM pour une analyse plus approfondie par les développeurs ou les ingénieurs. Security Hub CSPM fournit une vue d'ensemble et des recommandations pour remédier aux vulnérabilités.

1. Les notifications par e-mail concernant les phases séquentielles du CodePipeline pipeline sont envoyées via Amazon SNS.

1. Une fois les phases d'intégration continue terminées, CodePipeline passe à la phase de déploiement (livraison continue).

1. L'image Docker est déployée sur Amazon EKS en tant que charge de travail de conteneur (pod) à l'aide de diagrammes Helm.

1. Le pod d'application est configuré avec l'agent Amazon CodeGuru Profiler, qui envoie les données de profilage de l'application (processeur, utilisation du tas et latence) à CodeGuru Profiler, ce qui aide les développeurs à comprendre le comportement de l'application.

## Outils
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-tools"></a>

**Services 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.
+  [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) collecte les données de performances d'exécution de vos applications en ligne et fournit des recommandations qui peuvent vous aider à affiner les performances de vos applications.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [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, notamment des AWS Lambda fonctions, des points de terminaison d'appel HTTP utilisant des destinations d'API ou des bus d'événements dans d'autres domaines. Comptes AWS
+ [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 Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)fournit une vue complète de votre état de sécurité sur AWS. Il vous permet également de vérifier que votre AWS environnement est conforme aux normes et aux meilleures pratiques du secteur de la sécurité.
+ [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.
+ [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 services**
+ [Helm](https://helm.sh/docs/) est un gestionnaire de paquets open source pour Kubernetes.
+ [Apache Maven](https://maven.apache.org/) est un outil de gestion et de compréhension de projets logiciels.
+ [BridgeCrew Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) est un outil d'analyse de code statique permettant de scanner les fichiers d'infrastructure en tant que code (IaC) pour détecter les erreurs de configuration susceptibles d'entraîner des problèmes de sécurité ou de conformité.
+ [Aqua Security Trivy](https://github.com/aquasecurity/trivy) est un scanner complet pour détecter les vulnérabilités dans les images de conteneurs, les systèmes de fichiers et les référentiels Git, en plus des problèmes de configuration.

**Code**

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

## Bonnes pratiques
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-best-practices"></a>
+ Ce modèle suit les [meilleures pratiques de sécurité IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) afin d'appliquer le principe du moindre privilège pour les entités IAM à toutes les phases de la solution. Si vous souhaitez étendre la solution avec des outils supplémentaires Services AWS ou tiers, nous vous recommandons de consulter la section sur l'[application des autorisations de moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) dans la documentation IAM.
+ Si vous avez plusieurs applications Java, nous vous recommandons de créer des CI/CD pipelines distincts pour chaque application.
+ Si vous avez une application monolithe, nous vous recommandons de la diviser en microservices dans la mesure du possible. Les microservices sont plus flexibles, ils facilitent le déploiement des applications sous forme de conteneurs et ils offrent une meilleure visibilité sur l'ensemble de la création et du déploiement de l'application.

## Épopées
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-epics"></a>

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le GitHub dépôt. | Pour cloner le dépôt, exécutez la commande suivante.<pre>git clone https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks</pre> | Développeur d'applications, DevOps ingénieur | 
| Créez un compartiment S3 et téléchargez le code. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, administrateur du cloud, DevOps ingénieur | 
| Créez une CloudFormation pile. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps ingénieur | 
| Validez le déploiement de la CloudFormation pile. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps ingénieur | 
| Supprimez le compartiment S3. | Videz et supprimez le compartiment S3 que vous avez créé précédemment. Pour plus d'informations, consultez [Supprimer un compartiment](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) dans la documentation Amazon S3. | AWS DevOps, DevOps ingénieur | 

### Configuration des diagrammes Helm
<a name="configure-the-helm-charts"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez les diagrammes Helm de votre application Java. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps ingénieur | 
| Validez les graphiques de Helm pour détecter les erreurs de syntaxe. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps ingénieur | 

### Configuration du CI/CD pipeline Java
<a name="set-up-the-java-ci-cd-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le CI/CD pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps | 

### Activer l'intégration entre Security Hub CSPM et Aqua Security
<a name="activate-integration-between-ash-and-aqua-security"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Activez l'intégration d'Aqua Security. | Cette étape est nécessaire pour télécharger les résultats de vulnérabilité des images Docker signalés par Trivy vers Security Hub CSPM. Comme il CloudFormation ne prend pas en charge les intégrations CSPM de Security Hub, ce processus doit être effectué manuellement.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | Administrateur AWS, DevOps ingénieur | 

### Configurer CodeBuild pour exécuter les commandes Helm ou kubectl
<a name="configure-acb-to-run-helm-or-kubectl-commands"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Permet CodeBuild d'exécuter des commandes Helm ou kubectl dans le cluster Amazon EKS. |  CodeBuild Pour être authentifié afin d'utiliser Helm ou des `kubectl` commandes avec le cluster Amazon EKS, vous devez ajouter les rôles IAM au. `aws-auth` `ConfigMap` Dans ce cas, ajoutez l'ARN du rôle IAM`EksCodeBuildkubeRoleARN`, qui est le rôle IAM créé pour que le CodeBuild service accède au cluster Amazon EKS et y déploie des charges de travail. Il s'agit d'une activité ponctuelle.La procédure suivante doit être terminée avant la phase d'approbation du déploiement dans CodePipeline.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)`aws_auth``ConfigMap`Il est configuré et l'accès est accordé.  | DevOps | 

### Valider le CI/CD pipeline
<a name="validate-the-ci-cd-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez que le CI/CD pipeline démarre automatiquement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)Pour plus d'informations sur le démarrage du pipeline en utilisant CodePipeline, voir [Démarrer un pipeline dans](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)CodePipeline, [Démarrer un pipeline manuellement](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-rerun-manually.html) et [Démarrer un pipeline selon un calendrier](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-trigger-source-schedule.html) dans la CodePipeline documentation. | DevOps | 
| Approuvez le déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps | 
| Validez le profilage des applications. | Une fois le déploiement terminé et le module d'application déployé dans Amazon EKS, l'agent Amazon CodeGuru Profiler configuré dans l'application essaie d'envoyer les données de profilage de l'application (processeur, résumé du segment de mémoire, latence et goulots d'étranglement) à Profiler. CodeGuru Lors du déploiement initial d'une application, CodeGuru Profiler met environ 15 minutes à visualiser les données de profilage. | AWS DevOps | 

## Ressources connexes
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-resources"></a>
+ [AWS CodePipeline documentation](https://docs.aws.amazon.com/codepipeline/index.html)
+ [Numérisation d'images avec Trivy dans un AWS CodePipeline](https://aws.amazon.com/blogs/containers/scanning-images-with-trivy-in-an-aws-codepipeline/) (article de AWS blog)
+ [Améliorer vos applications Java à l'aide d'Amazon CodeGuru Profiler](https://aws.amazon.com/blogs/devops/improving-your-java-applications-using-amazon-codeguru-profiler) (article de AWS blog)
+ [AWS Syntaxe du format ASFF (Security Finding Format)](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format-syntax.html)
+ [Modèles d' EventBridge événements Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Mise à niveau du casque](https://helm.sh/docs/helm/helm_upgrade/)

## Informations supplémentaires
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-additional"></a>
+ CodeGuru Profiler ne doit pas être confondu avec le AWS X-Ray service en termes de fonctionnalités. Nous vous recommandons d'utiliser CodeGuru Profiler pour identifier les lignes de code les plus coûteuses susceptibles de provoquer des blocages ou des problèmes de sécurité, et de les corriger avant qu'elles ne deviennent un risque potentiel. Le service X-Ray est destiné à la surveillance des performances des applications.
+ Dans ce modèle, les règles d'événements sont associées au bus d'événements par défaut. Si nécessaire, vous pouvez étendre le modèle pour utiliser un bus d'événements personnalisé.
+ Ce modèle utilise CodeGuru Reviewer comme outil de test statique de sécurité des applications (SAST) pour le code des applications. Vous pouvez également utiliser ce pipeline pour d'autres outils, tels que SonarQube Checkmarx. Vous pouvez ajouter les instructions de configuration de numérisation pour chacun de ces outils `buildspec/buildspec_secscan.yaml` afin de remplacer les instructions de CodeGuru numérisation.
**Note**  
À compter du 7 novembre 2025, vous ne pourrez plus créer de nouvelles associations de référentiels dans Amazon CodeGuru Reviewer. Pour en savoir plus sur les services dotés de fonctionnalités similaires à celles de CodeGuru Reviewer, consultez l'[évolution de la disponibilité d'Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) dans la documentation de CodeGuru Reviewer.

# Copiez les images des conteneurs Amazon ECR sur et Comptes AWS Régions AWS
<a name="copy-ecr-container-images-across-accounts-regions"></a>

*Faisal Shahdad, Amazon Web Services*

## Résumé
<a name="copy-ecr-container-images-across-accounts-regions-summary"></a>

Ce modèle vous montre comment utiliser une approche sans serveur pour répliquer des images balisées depuis des référentiels Amazon Elastic Container Registry (Amazon ECR) existants vers d'autres référentiels et. Comptes AWS Régions AWS La solution permet AWS Step Functions de gérer le flux de travail de réplication et de AWS Lambda copier des images de conteneurs de grande taille.

Amazon ECR utilise des fonctionnalités natives de réplication [entre régions](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crr-single) et [entre comptes](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crossaccount) qui répliquent les images de conteneurs entre les régions et les comptes. Mais ces fonctionnalités répliquent les images uniquement à partir du moment où la réplication est activée. Il n'existe aucun mécanisme permettant de répliquer des images existantes dans différentes régions et comptes. 

Ce modèle aide les équipes d'intelligence artificielle (IA) à distribuer des modèles, des frameworks (par exemple,, et Hugging Face) et des dépendances d'apprentissage automatique conteneurisé (ML) à d'autres comptes et régions. PyTorch TensorFlow Cela peut vous aider à surmonter les limites de service et à optimiser les ressources de calcul du GPU. Vous pouvez également répliquer de manière sélective les référentiels Amazon ECR à partir de comptes sources et de régions spécifiques. Pour plus d'informations, consultez la section [La réplication entre régions dans Amazon ECR a été lancée.](https://aws.amazon.com/blogs/containers/cross-region-replication-in-amazon-ecr-has-landed/)

## Conditions préalables et limitations
<a name="copy-ecr-container-images-across-accounts-regions-prereqs"></a>

**Conditions préalables**
+ Deux comptes actifs ou plus Comptes AWS (un compte source et un compte de destination, au minimum)
+ Autorisations appropriées Gestion des identités et des accès AWS (IAM) dans tous les comptes
+ Docker pour créer l'image du conteneur Lambda
+ AWS Command Line Interface (AWS CLI) configuré pour tous les comptes

**Limites**
+ **Exclusion d'images non balisées :** la solution copie uniquement les images de conteneur comportant des balises explicites. Il ignore les images non étiquetées qui existent avec `SHA256` des résumés.
+ **Contraintes de délai d'exécution Lambda : elles** AWS Lambda sont limitées à un délai d'exécution maximal de 15 minutes, ce qui peut être insuffisant pour copier de grandes images de conteneurs ou des référentiels.
+ **Gestion manuelle de l'image du conteneur :** le code `crane-app.py` Python nécessite la reconstruction et le redéploiement de l'image du conteneur Lambda.
+ **Capacité de traitement parallèle limitée :** le paramètre `MaxConcurrency` d'état limite le nombre de référentiels que vous pouvez copier simultanément. Vous pouvez toutefois modifier ce paramètre dans le AWS CloudFormation modèle du compte source. Notez que des valeurs de simultanéité plus élevées peuvent vous faire dépasser les limites de débit de service et les quotas d'exécution Lambda au niveau du compte.

## Architecture
<a name="copy-ecr-container-images-across-accounts-regions-architecture"></a>

**Pile cible**

Le motif comporte quatre éléments principaux :
+ **Infrastructure du compte source :** CloudFormation modèle qui crée les composants d'orchestration
+ **Infrastructure de comptes de destination :** CloudFormation modèle qui crée des rôles d'accès entre comptes
+ Fonction **Lambda : fonction** basée sur Python qui utilise Crane pour copier efficacement des images
+ **Image de conteneur —** Conteneur Docker qui regroupe la fonction Lambda avec les outils requis

**Architecture cible**

![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/cc7d9823-3dc8-4090-a203-910b1ac4447c.png)


**Flux de travail Step Functions**

La machine d'état Step Functions orchestre les opérations suivantes, comme le montre le schéma suivant :
+ `PopulateRepositoryList`**—** Analyse les référentiels Amazon ECR et remplit Amazon DynamoDB
+ `GetRepositoryList`**—** Récupère une liste de référentiels unique depuis DynamoDB
+ `DeduplicateRepositories`**—** Garantit qu'il n'y a pas de double traitement
+ `CopyRepositories`**—** Gère la copie parallèle des référentiels
+ `NotifySuccess`/`NotifyFailure`**—** Notifications Amazon Simple Notification Service (Amazon SNS) basées sur le résultat de l'exécution

![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/1b740084-ba2b-4956-aa12-ebbf52be5e7d.png)


## Outils
<a name="copy-ecr-container-images-across-accounts-regions-tools"></a>

**Outils Amazon**
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) vous CloudWatch aide à surveiller les indicateurs de vos AWS ressources et des applications que vous utilisez 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.
+ [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.
+ [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 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**
+ [Crane](https://michaelsauter.github.io/crane/index.html) est un outil d'orchestration Docker. Il est similaire à Docker Compose mais possède des fonctionnalités supplémentaires.
+ [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.

**Référentiel de code**
+ Le code de ce modèle est disponible dans le GitHub [sample-ecr-copy référentiel](https://github.com/aws-samples/sample-ecr-copy). Vous pouvez utiliser le CloudFormation modèle du référentiel pour créer les ressources sous-jacentes.

## Bonnes pratiques
<a name="copy-ecr-container-images-across-accounts-regions-best-practices"></a>

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="copy-ecr-container-images-across-accounts-regions-epics"></a>

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez AWS CLI les profils. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingénieur, ingénieur de données, ingénieur ML | 
| Rassemblez les informations requises. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingénieur, ingénieur de données, ingénieur ML | 
| Pour cloner le référentiel. | Clonez le référentiel du modèle sur votre poste de travail local :<pre>git clone https://github.com/aws-samples/sample-ecr-copy</pre> | DevOps ingénieur, ingénieur de données, ingénieur ML | 

### Déployer l'infrastructure pour le compte de destination
<a name="deploy-infrastructure-for-the-destination-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Validez le modèle. | Validez le CloudFormation modèle :<pre>aws cloudformation validate-template \<br />  --template-body file://"Destination Account cf_template.yml" \<br />  --profile destination-account</pre> | DevOps ingénieur, ingénieur ML, ingénieur de données | 
| Déployez l'infrastructure de destination. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingénieur de données, ingénieur ML, DevOps ingénieur | 
| Vérifier le déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingénieur, ingénieur ML, ingénieur de données | 

### Création et déploiement de l'image du conteneur Lambda
<a name="build-and-deploy-the-lam-container-image"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Préparez la construction du conteneur. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingénieur de données, ingénieur ML, DevOps ingénieur | 
| Créez l'image du conteneur. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingénieur de données, ingénieur ML, DevOps ingénieur | 
| Créez un référentiel et téléchargez l'image. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingénieur de données, ingénieur ML, DevOps ingénieur | 
| Vérifiez l'image. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingénieur de données, ingénieur ML, DevOps ingénieur | 

### Déployer l'infrastructure du compte source
<a name="deploy-the-source-account-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Préparez les paramètres de déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingénieur de données, DevOps ingénieur, ingénieur ML | 
| Validez le modèle source. | Validez le CloudFormation modèle source :<pre>aws cloudformation validate-template \<br />  --template-body file://"Source Account Cf template.yml" \<br />  --profile source-account</pre> | Ingénieur de données, ingénieur ML, DevOps ingénieur | 
| Déployez l'infrastructure source. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingénieur de données, ingénieur ML, DevOps ingénieur | 
| Vérifiez le déploiement et collectez les résultats. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingénieur, ingénieur ML, ingénieur de données | 
| Confirmez votre abonnement par e-mail. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Ingénieur de données, ingénieur ML, DevOps ingénieur | 

### Exécuter et surveiller le processus de copie
<a name="run-and-monitor-the-copy-process"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez et surveillez le processus de copie. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingénieur, ingénieur ML, ingénieur de données | 
| Exécutez la fonction step. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingénieur, ingénieur ML, ingénieur de données | 
| Surveillez les progrès. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingénieur, ingénieur ML, ingénieur de données | 
| Vérifiez les résultats. | Attendez que le processus soit terminé (mis à jour toutes les 30 secondes) :<pre>while true; do<br />  STATUS=$(aws stepfunctions describe-execution \<br />    --execution-arn $EXECUTION_ARN \<br />    --profile source-account \<br />    --region $SOURCE_REGION \<br />    --query 'status' \<br />    --output text)<br />  <br />  echo "Current status: $STATUS"<br />  <br />  if [[ "$STATUS" == "SUCCEEDED" || "$STATUS" == "FAILED" || "$STATUS" == "TIMED_OUT" || "$STATUS" == "ABORTED" ]]; then<br />    break<br />  fi<br />  <br />  sleep 30<br />done<br /><br />echo "Final execution status: $STATUS"</pre> | DevOps ingénieur, ingénieur ML, ingénieur de données | 
| Vérifiez les images. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps ingénieur, ingénieur de données, ingénieur ML | 

## Résolution des problèmes
<a name="copy-ecr-container-images-across-accounts-regions-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Les fonctions Step ne s'exécutent pas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | 

## Ressources connexes
<a name="copy-ecr-container-images-across-accounts-regions-resources"></a>
+ [Documentation sur les grues](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md)
+ [Qu'est-ce qu'Amazon Elastic Container Registry ?](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Qu'est-ce que c'est AWS Lambda ?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [Qu'est-ce que Step Functions ?](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)

## Informations supplémentaires
<a name="copy-ecr-container-images-across-accounts-regions-additional"></a>

**Paramètres de configuration**


| 
| 
| Paramètre | Description | Exemple | 
| --- |--- |--- |
| `SourceAccountId` |  Compte AWS Identifiant de la source | `11111111111` | 
| `DestinationAccountId` |  Compte AWS Identifiant de destination | `22222222222` | 
| `DestinationRegion` | Cible Région AWS | `us-east-2` | 
| `SourceRegion` | La source Région AWS | `us-east-1` | 
| `NotificationEmail` | E-mail pour les notifications | `abc@xyz.com` | 
| `RepositoryList` | Référentiels à copier | `repo1,repo2,repo3` | 
| `LambdaImageUri` | URI de l'image du conteneur Lambda | `${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com/ecr-copy-lambda:latest` | 

# Créez une définition de tâche Amazon ECS et montez un système de fichiers sur des EC2 instances à l'aide d'Amazon EFS
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs"></a>

*Durga Prasad Cheepuri, Amazon Web Services*

## Résumé
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-summary"></a>

Ce modèle fournit des exemples de code et des étapes pour créer une définition de tâche Amazon Elastic Container Service (Amazon ECS) qui s'exécute sur des instances Amazon Elastic Compute Cloud ( EC2Amazon) dans le cloud Amazon Web Services (AWS), tout en utilisant Amazon Elastic File System (Amazon EFS) pour monter un système de fichiers sur EC2 ces instances. Les tâches Amazon ECS qui utilisent Amazon EFS montent automatiquement les systèmes de fichiers que vous spécifiez dans la définition de la tâche et mettent ces systèmes de fichiers à la disposition des conteneurs de la tâche dans toutes les zones de disponibilité d'une région AWS.

Pour répondre à vos exigences en matière de stockage persistant et de stockage partagé, vous pouvez utiliser Amazon ECS et Amazon EFS ensemble. Par exemple, vous pouvez utiliser Amazon EFS pour stocker des données utilisateur persistantes et des données d'application pour vos applications avec des paires de conteneurs ECS actifs et de secours exécutées dans différentes zones de disponibilité pour une haute disponibilité. Vous pouvez également utiliser Amazon EFS pour stocker des données partagées auxquelles les conteneurs ECS et les charges de travail distribuées peuvent accéder en parallèle.

Pour utiliser Amazon EFS avec Amazon ECS, vous pouvez ajouter une ou plusieurs définitions de volume à une définition de tâche. Une définition de volume inclut un identifiant de système de fichiers Amazon EFS, un identifiant de point d'accès et une configuration pour l'autorisation AWS Identity and Access Management (IAM) ou le chiffrement TLS (Transport Layer Security) en transit. Vous pouvez utiliser les définitions de conteneur dans les définitions de tâches pour spécifier les volumes de définition de tâches qui sont montés lors de l'exécution du conteneur. Lorsqu'une tâche utilisant un système de fichiers Amazon EFS s'exécute, Amazon ECS s'assure que le système de fichiers est monté et disponible pour les conteneurs qui ont besoin d'y accéder.

## Conditions préalables et limitations
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Un cloud privé virtuel (VPC) avec un point de terminaison de réseau privé virtuel (VPN) ou un routeur
+ (Recommandé) [L'agent de conteneur Amazon ECS 1.38.0 ou version ultérieure](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-versions.html) pour la compatibilité avec les points d'accès Amazon EFS et les fonctionnalités d'autorisation IAM (pour plus d'informations, consultez le billet de blog AWS New [for Amazon EFS — IAM Authorization and](https://aws.amazon.com/blogs/aws/new-for-amazon-efs-iam-authorization-and-access-points/) Access Points.)

**Limites**
+ Les versions de l'agent de conteneur Amazon ECS antérieures à la version 1.35.0 ne prennent pas en charge les systèmes de fichiers Amazon EFS pour les tâches utilisant le type de EC2 lancement.

## Architecture
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-architecture"></a>

Le schéma suivant montre un exemple d'application qui utilise Amazon ECS pour créer une définition de tâche et monter un système de fichiers Amazon EFS sur des EC2 instances dans des conteneurs ECS.

![\[Amazon ECS architecture with task definition, ECS service, containers, and EFS file system integration.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/images/343e0f1d-44ee-4ec2-8392-aeddc0e48b83.png)


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

1. Créez un système de fichiers Amazon EFS.

1. Créez une définition de tâche avec un conteneur.

1. Configurez les instances de conteneur pour monter le système de fichiers Amazon EFS. La définition de tâche fait référence aux montages de volumes, afin que l'instance de conteneur puisse utiliser le système de fichiers Amazon EFS. Les tâches ECS ont accès au même système de fichiers Amazon EFS, quelle que soit l'instance de conteneur sur laquelle elles ont été créées.

1. Créez un service Amazon ECS avec trois instances de la définition de tâche.

**Pile technologique**
+ Amazon EC2
+ Amazon ECS
+ Amazon EFS

## Outils
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-tools"></a>
+ [Amazon EC2](https://docs.aws.amazon.com/ec2/?id=docs_gateway) — Amazon Elastic Compute Cloud (Amazon EC2) fournit une capacité de calcul évolutive dans le cloud AWS. Vous pouvez utiliser Amazon EC2 pour lancer autant ou aussi peu de serveurs virtuels que vous le souhaitez, et vous pouvez les étendre ou les intégrer.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) — Amazon Elastic Container Service (Amazon ECS) est un service de gestion de conteneurs rapide et hautement évolutif permettant d'exécuter, d'arrêter et de gérer des conteneurs sur un cluster. Vous pouvez exécuter vos tâches et services sur une infrastructure sans serveur gérée par AWS Fargate. Pour mieux contrôler votre infrastructure, vous pouvez également exécuter vos tâches et services sur un cluster d' EC2 instances que vous gérez.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) — Amazon Elastic File System (Amazon EFS) fournit un système de fichiers NFS élastique simple, évolutif et entièrement géré à utiliser avec les services cloud AWS et les ressources sur site.
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) — L'interface de ligne de commande AWS (AWS CLI) est un outil open source permettant d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande. Avec une configuration minimale, vous pouvez exécuter des commandes de l'interface de ligne de commande AWS qui mettent en œuvre des fonctionnalités équivalentes à celles fournies par la console de gestion AWS basée sur un navigateur à partir d'une invite de commande.

## Épopées
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-epics"></a>

### Créer un système de fichiers Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un système de fichiers Amazon EFS à l'aide de l'AWS Management Console. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

### Créez une définition de tâche Amazon ECS à l'aide d'un système de fichiers Amazon EFS ou de l'AWS CLI
<a name="create-an-amazon-ecs-task-definition-by-using-either-an-amazon-efs-file-system-or-the-aws-cli"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une définition de tâche à l'aide d'un système de fichiers Amazon EFS. | Créez une définition de tâche à l'aide de la [nouvelle console Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) ou de la [console Amazon ECS classique](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition-classic.html) avec les configurations suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 
| Créez une définition de tâche à l'aide de l'interface de ligne de commande AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

## Ressources connexes
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-resources"></a>
+ [Définitions des tâches Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Volumes Amazon EFS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html)

## Pièces jointes
<a name="attachments-090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/attachments/attachment.zip)

# Déployer des fonctions Lambda avec des images de conteneurs
<a name="deploy-lambda-functions-with-container-images"></a>

*Ram Kandaswamy, Amazon Web Services*

## Résumé
<a name="deploy-lambda-functions-with-container-images-summary"></a>

AWS Lambda prend en charge les images de conteneurs en tant que modèle de déploiement. Ce modèle montre comment déployer des fonctions Lambda via des images de conteneur. 

Lambda est un service de calcul sans serveur piloté par les événements que vous pouvez utiliser pour exécuter du code pour pratiquement n'importe quel type d'application ou de service principal sans provisionner ni gérer de serveurs. Grâce à la prise en charge des images de conteneur pour les fonctions Lambda, vous bénéficiez de 10 Go de stockage maximum pour votre artefact d'application et de la possibilité d'utiliser des outils de développement d'images de conteneur familiers.

L'exemple de ce modèle utilise Python comme langage de programmation sous-jacent, mais vous pouvez utiliser d'autres langages, tels que Java, Node.js ou Go. Pour la source, considérez un système basé sur Git tel que GitHub GitLab, ou Bitbucket, ou utilisez Amazon Simple Storage Service (Amazon S3).

## Conditions préalables et limitations
<a name="deploy-lambda-functions-with-container-images-prereqs"></a>

**Conditions préalables**
+ Amazon Elastic Container Registry (Amazon ECR) activé
+ Code d'application
+ Images Docker avec le client d'interface d'exécution et la dernière version de Python
+ Connaissance pratique de Git

**Limites**
+ La taille d'image maximale prise en charge est de 10 Go.
+ Le temps d'exécution maximal d'un déploiement de conteneur basé sur Lambda est de 15 minutes.

## Architecture
<a name="deploy-lambda-functions-with-container-images-architecture"></a>

**Architecture cible**

![\[Processus en quatre étapes pour créer la fonction Lambda.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e421cc58-d33e-493d-b0bb-c3ffe39c2eb9/images/7f36d3d8-d161-497a-b036-26d886a16c69.png)


 

1. Vous créez un dépôt Git et vous y validez le code de l'application.

1. Le AWS CodeBuild projet est déclenché par les modifications apportées aux validations.

1. Le CodeBuild projet crée l'image Docker et publie l'image créée sur Amazon ECR.

1. Vous créez la fonction Lambda à l'aide de l'image dans Amazon ECR.

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

Ce modèle peut être automatisé à l'aide de AWS CloudFormation AWS Cloud Development Kit (AWS CDK), ou d'opérations d'API à partir d'un SDK. Lambda peut automatiquement évoluer en fonction du nombre de demandes, et vous pouvez l'ajuster à l'aide des paramètres de simultanéité. Pour plus d'informations, consultez la documentation [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html).

## Outils
<a name="deploy-lambda-functions-with-container-images-tools"></a>

**Services AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)AWS CloudFormationhelps vous permet de configurer les AWS ressources, de les approvisionner rapidement et de manière cohérente, et de les gérer tout au long de leur cycle de vie, de bout Comptes AWS en bout Régions AWS. Ce modèle utilise [AWS CloudFormation Application Composer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/app-composer-for-cloudformation.html), qui vous permet de visualiser et de modifier visuellement les CloudFormation modèles.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [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.
+ [GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), [GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html), et [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) font partie des systèmes de contrôle de source basés sur Git les plus couramment utilisés pour suivre les modifications du code source.

## Bonnes pratiques
<a name="deploy-lambda-functions-with-container-images-best-practices"></a>
+ Rendez votre fonction aussi efficace et aussi petite que possible pour éviter de charger des fichiers inutiles.
+ Efforcez-vous de placer les couches statiques plus haut dans votre liste de fichiers Docker et de placer les couches qui changent plus souvent plus bas. Cela améliore la mise en cache, ce qui améliore les performances.
+ Le propriétaire de l'image est responsable de la mise à jour et des correctifs de l'image. Ajoutez cette cadence de mise à jour à vos processus opérationnels. Pour plus d’informations, consultez la [documentation AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-code).

## Épopées
<a name="deploy-lambda-functions-with-container-images-epics"></a>

### Créez un projet dans CodeBuild
<a name="create-a-project-in-codebuild"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un dépôt Git. | Créez un dépôt Git qui contiendra le code source de l'application, le Dockerfile et le `buildspec.yaml` fichier.  | Developer | 
| Créez un CodeBuild projet. | Pour utiliser un CodeBuild projet afin de créer l'image Lambda personnalisée, procédez comme suit : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | Developer | 
| Modifiez le Dockerfile. | Le Dockerfile doit se trouver dans le répertoire de premier niveau dans lequel vous développez l'application. Le code Python doit se trouver dans le `src` dossier.Lorsque vous créez l'image, utilisez les images [officielles prises en charge par Lambda](https://gallery.ecr.aws/lambda?page=1). Sinon, une erreur de démarrage se produira, rendant le processus d'emballage plus difficile.Pour plus de détails, consultez la section [Informations supplémentaires](#deploy-lambda-functions-with-container-images-additional). | Developer | 
| Créez un référentiel dans Amazon ECR. | Créez un référentiel de conteneurs dans Amazon ECR. Dans l'exemple de commande suivant, le nom du référentiel créé est `cf-demo` :<pre>aws ecr create-repository --cf-demo </pre>Le référentiel sera référencé dans le `buildspec.yaml` fichier. | Administrateur AWS, développeur | 
| Poussez l'image vers Amazon ECR. | Vous pouvez l'utiliser CodeBuild pour exécuter le processus de création d'image. CodeBuild a besoin d'une autorisation pour interagir avec Amazon ECR et pour travailler avec S3. Dans le cadre du processus, l'image Docker est créée et envoyée au registre Amazon ECR. Pour plus de détails sur le modèle et le code, consultez la section [Informations supplémentaires](#deploy-lambda-functions-with-container-images-additional). | Developer | 
| Vérifiez que l'image se trouve dans le référentiel. | Pour vérifier que l'image se trouve dans le référentiel, sur la console Amazon ECR, sélectionnez **Repositories**. L'image doit être répertoriée, avec des balises et les résultats d'un rapport d'analyse des vulnérabilités si cette fonctionnalité a été activée dans les paramètres Amazon ECR.  Pour plus d'informations, consultez la [documentation AWS](https://docs.aws.amazon.com/cli/latest/reference/ecr/put-registry-scanning-configuration.html). | Developer | 

### Créez la fonction Lambda pour exécuter l'image
<a name="create-the-lambda-function-to-run-the-image"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez la fonction Lambda. | Sur la console Lambda, choisissez **Create function**, puis choisissez **Container** image. Entrez le nom de la fonction et l'URI de l'image qui se trouve dans le référentiel Amazon ECR, puis choisissez **Create function**. Pour plus d'informations, consultez la documentation [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html). | Développeur d’applications | 
| Testez la fonction Lambda. | Pour appeler et tester la fonction, choisissez **Test**. Pour plus d'informations, consultez la documentation [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html). | Développeur d’applications | 

## Résolution des problèmes
<a name="deploy-lambda-functions-with-container-images-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| La construction ne réussit pas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | 

## Ressources connexes
<a name="deploy-lambda-functions-with-container-images-resources"></a>
+ [Images de base pour Lambda](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-images.html)
+ [Exemple Docker pour CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html)
+ [Transmettez des informations d'identification temporaires](https://aws.amazon.com/premiumsupport/knowledge-center/codebuild-temporary-credentials-docker/)

## Informations supplémentaires
<a name="deploy-lambda-functions-with-container-images-additional"></a>

**Modifier le Dockerfile**

Le code suivant montre les commandes que vous modifiez dans le Dockerfile :

```
FROM public.ecr.aws/lambda/python:3.xx

# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT} 
COPY requirements.txt  ${LAMBDA_TASK_ROOT} 

# install dependencies
RUN pip3 install --user -r requirements.txt

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.lambda_handler" ]
```

Dans la `FROM` commande, utilisez la valeur appropriée pour la version de Python prise en charge par Lambda (par exemple,`3.12`). Il s'agira de l'image de base disponible dans le référentiel d'images public Amazon ECR. 

La `COPY app.py ${LAMBDA_TASK_ROOT}` commande copie le code dans le répertoire racine de la tâche, que la fonction Lambda utilisera. Cette commande utilise la variable d'environnement afin que nous n'ayons pas à nous soucier du chemin réel. La fonction à exécuter est transmise en tant qu'argument à la `CMD [ "app.lambda_handler" ]` commande.

La `COPY requirements.txt` commande capture les dépendances nécessaires au code. 

La `RUN pip install --user -r requirements.txt` commande installe les dépendances dans le répertoire utilisateur local. 

Pour créer votre image, exécutez la commande suivante.

```
docker build -t <image name> .
```

**Ajoutez l'image dans Amazon ECR**

Dans le code suivant, remplacez-le `aws_account_id` par le numéro de compte, et remplacez-le `us-east-1` si vous utilisez une autre région. Le `buildspec` fichier utilise le numéro de CodeBuild version pour identifier de manière unique les versions d'image sous forme de valeur de balise. Vous pouvez le modifier en fonction de vos besoins.

*Le code personnalisé buildspec*

```
phases:
  install:
    runtime-versions:
       python: 3.xx
  pre_build:
    commands:
      - python3 --version
      - pip3 install --upgrade pip
      - pip3 install --upgrade awscli
      - sudo docker info
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - ls
      - cd app
      - docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER .
      - docker container ls
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com
      - docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
      - docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
```

# Déployez des microservices Java sur Amazon ECS à l'aide d'AWS Fargate
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate"></a>

*Vijay Thompson et Sandeep Bondugula, Amazon Web Services*

## Résumé
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-summary"></a>

Ce modèle fournit des conseils pour le déploiement de microservices Java conteneurisés sur Amazon Elastic Container Service (Amazon ECS) à l'aide d'AWS Fargate. Le modèle n'utilise pas Amazon Elastic Container Registry (Amazon ECR) pour la gestion des conteneurs ; les images Docker sont plutôt extraites d'un hub Docker. 

## Conditions préalables et limitations
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-prereqs"></a>

**Conditions préalables**
+ Une application de microservices Java existante sur un hub Docker
+ Un dépôt Docker public
+ Un compte AWS actif
+ Connaissance des services AWS, notamment Amazon ECS et Fargate
+ Framework Docker, Java et Spring Boot
+ Amazon Relational Database Service (Amazon RDS) est opérationnel (facultatif)
+ Un cloud privé virtuel (VPC) si l'application nécessite Amazon RDS (facultatif)

## Architecture
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-architecture"></a>

**Pile technologique source**
+ Microservices Java (par exemple, implémentés dans Spring Boot) et déployés sur Docker

**Architecture source**

![\[Architecture source pour les microservices Java déployés sur Docker\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/0a946ca8-fe37-4ede-85cb-a80a1c36105d.png)


**Pile technologique cible**
+ Un cluster Amazon ECS qui héberge chaque microservice à l'aide de Fargate
+ Un réseau VPC pour héberger le cluster Amazon ECS et les groupes de sécurité associés 
+ Une cluster/task définition pour chaque microservice qui lance des conteneurs à l'aide de Fargate

**Architecture cible**

![\[Architecture cible sur les microservices Java sur Amazon ECS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/b21349ea-21fc-4688-b76a-1bde479858aa.png)


## Outils
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-tools"></a>

**Outils**
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) élimine le besoin d'installer et d'exploiter votre propre logiciel d'orchestration de conteneurs, de gérer et de dimensionner un cluster de machines virtuelles ou de planifier des conteneurs sur ces machines virtuelles. 
+ [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).
+ [Docker](https://www.docker.com/) est une plate-forme logicielle qui vous permet de créer, de tester et de déployer des applications rapidement. Docker regroupe les logiciels dans des unités standardisées appelées *conteneurs* qui contiennent tout ce dont le logiciel a besoin pour fonctionner, notamment les bibliothèques, les outils système, le code et le runtime. 

**Code Docker**

Le Dockerfile suivant indique la version du kit de développement Java (JDK) utilisée, l'emplacement du fichier d'archive Java (JAR), le numéro de port exposé et le point d'entrée de l'application.

```
FROM openjdk:11
ADD target/Spring-docker.jar Spring-docker.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","Spring-docker.jar"]
```

## Épopées
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-epics"></a>

### Création de nouvelles définitions de tâches
<a name="create-new-task-definitions"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une définition de tâche. | L'exécution d'un conteneur Docker dans Amazon ECS nécessite une définition de tâche. Ouvrez la console Amazon ECS à l'[https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/)adresse, choisissez **Définitions de tâches**, puis créez une nouvelle définition de tâche. Pour plus d'informations, consultez la [documentation Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html). | Administrateur système AWS, développeur d'applications | 
| Choisissez le type de lancement. | Choisissez **Fargate** comme type de lancement. | Administrateur système AWS, développeur d'applications | 
| Configurez la tâche. | Définissez un nom de tâche et configurez l'application avec la quantité appropriée de mémoire de tâche et de processeur. | Administrateur système AWS, développeur d'applications | 
| Définissez le conteneur. | Spécifiez le nom du conteneur. Pour l'image, entrez le nom du site Docker, le nom du référentiel et le nom de balise de l'image Docker ()`docker.io/sample-repo/sample-application:sample-tag-name`. Définissez les limites de mémoire pour l'application et définissez les mappages de ports (`8080, 80`) pour les ports autorisés. | Administrateur système AWS, développeur d'applications | 
| Créez la tâche. | Lorsque les configurations de tâche et de conteneur sont en place, créez la tâche. Pour obtenir des instructions détaillées, consultez les liens dans la section *Ressources connexes*. | Administrateur système AWS, développeur d'applications | 

### Configuration du cluster
<a name="configure-the-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez et configurez un cluster. | Choisissez **Networking only** comme type de cluster, configurez le nom, puis créez le cluster ou utilisez un cluster existant s'il est disponible. Pour plus d'informations, consultez la [documentation Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html). | Administrateur système AWS, développeur d'applications | 

### Configurer la tâche
<a name="configure-task"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une tâche . | Dans le cluster, choisissez **Exécuter une nouvelle tâche**. | Administrateur système AWS, développeur d'applications | 
| Choisissez le type de lancement. | Choisissez **Fargate** comme type de lancement. | Administrateur système AWS, développeur d'applications | 
| Choisissez la définition de la tâche, la révision et la version de la plateforme. | Choisissez la tâche que vous souhaitez exécuter, la révision de la définition de la tâche et la version de la plateforme. | Administrateur système AWS, développeur d'applications | 
| Sélectionnez le cluster . | Choisissez le cluster à partir duquel vous souhaitez exécuter la tâche. | Administrateur système AWS, développeur d'applications | 
| Spécifiez le nombre de tâches. | Configurez le nombre de tâches à exécuter. Si vous lancez deux tâches ou plus, un équilibreur de charge est nécessaire pour répartir le trafic entre les tâches. | Administrateur système AWS, développeur d'applications | 
| Spécifiez le groupe de tâches. | (Facultatif) Spécifiez un nom de groupe de tâches pour identifier un ensemble de tâches connexes en tant que groupe de tâches. | Administrateur système AWS, développeur d'applications | 
| Configurez le VPC, les sous-réseaux et les groupes de sécurité du cluster. | Configurez le VPC du cluster et les sous-réseaux sur lesquels vous souhaitez déployer l'application. Créez ou mettez à jour des groupes de sécurité (HTTP, HTTPS et port 8080) pour fournir un accès aux connexions entrantes et sortantes. | Administrateur système AWS, développeur d'applications | 
| Configurez les paramètres IP publics. | Activez ou désactivez l'adresse IP publique, selon que vous souhaitez ou non utiliser une adresse IP publique pour les tâches Fargate. L'option recommandée par défaut est **Activé**. | Administrateur système AWS, développeur d'applications | 
| Vérifiez les paramètres et créez la tâche | Vérifiez vos paramètres, puis choisissez **Exécuter la tâche**. | Administrateur système AWS, développeur d'applications | 

### Découper
<a name="cut-over"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Copiez l'URL de l'application. | Lorsque le statut de la tâche est passé à En *cours d'exécution*, sélectionnez la tâche. Dans la section Mise en réseau, copiez l'adresse IP publique. | Administrateur système AWS, développeur d'applications | 
| Testez votre application. | Dans votre navigateur, saisissez l'adresse IP publique pour tester l'application. | Administrateur système AWS, développeur d'applications | 

## Ressources connexes
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-resources"></a>
+ [Principes de base de Docker pour Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html) (documentation Amazon ECS)
+ [Amazon ECS sur AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) (documentation Amazon ECS)
+ [Création d'une définition de tâche](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) (documentation Amazon ECS)
+ [Création d'un cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) (documentation Amazon ECS)
+ [Configuration des paramètres de service de base](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html) (documentation Amazon ECS)
+ [Configuration d'un réseau](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-configure-network.html) (documentation Amazon ECS)
+ [Déploiement de microservices Java sur Amazon ECS](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/) (article de blog)

# Déployez des ressources et des packages Kubernetes à l'aide d'Amazon EKS et d'un référentiel de diagrammes Helm dans Amazon S3
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3"></a>

*Sagar Panigrahi, Amazon Web Services*

## Résumé
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-summary"></a>

Ce modèle vous permet de gérer efficacement les applications Kubernetes, quelle que soit leur complexité. Le modèle intègre Helm à vos pipelines d'intégration continue et de livraison continue (CI/CD) existants pour déployer des applications dans un cluster Kubernetes. Helm est un gestionnaire de packages Kubernetes qui vous aide à gérer les applications Kubernetes. Les diagrammes Helm permettent de définir, d'installer et de mettre à niveau des applications Kubernetes complexes. Les graphiques peuvent être versionnés et stockés dans les référentiels Helm, ce qui améliore le temps moyen de restauration (MTTR) en cas de panne. 

Ce modèle utilise Amazon Elastic Kubernetes Service (Amazon EKS) pour le cluster Kubernetes. Il utilise Amazon Simple Storage Service (Amazon S3) comme référentiel de diagrammes Helm, afin que les graphiques puissent être gérés de manière centralisée et accessibles aux développeurs de l'entreprise.

## Conditions préalables et limitations
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-prereqs"></a>

**Conditions préalables**
+ Un compte Amazon Web Services (AWS) actif avec un cloud privé virtuel (VPC)
+ Un cluster Amazon EKS 
+ Nœuds de travail configurés au sein du cluster Amazon EKS et prêts à prendre en charge des charges de travail
+ Kubectl pour configurer le fichier kubeconfig d'Amazon EKS pour le cluster cible sur la machine cliente
+ Accès à AWS Identity and Access Management (IAM) pour créer le compartiment S3
+ Accès IAM (par programmation ou par rôle) à Amazon S3 depuis la machine cliente
+ Gestion du code source et CI/CD pipeline

**Limites**
+ Il n'existe actuellement aucun support pour la mise à niveau, la suppression ou la gestion des définitions de ressources personnalisées (CRDs).
+ Si vous utilisez une ressource qui fait référence à un CRD, le CRD doit être installé séparément (en dehors du graphique).

**Versions du produit**
+ Casque v3.6.3

## Architecture
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-architecture"></a>

**Pile technologique cible**
+ Amazon EKS
+ Amazon VPC
+ Amazon S3
+ Gestion du code source
+ Helm
+ Kubectl

**Architecture cible**

![\[Client Helm et Kubectl déploient un dépôt de diagrammes Helm dans Amazon S3 pour les clusters Amazon EKS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/d3f993e6-4d96-4cb9-a075-c4debe431fd7/images/2f09f7bb-440a-4c4b-b29f-08d136d1ada4.png)


 

**Automatisation et mise à l'échelle**
+ AWS CloudFormation peut être utilisé pour automatiser la création de l'infrastructure. Pour plus d'informations, consultez la section [Création de ressources Amazon EKS avec AWS CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) dans la documentation Amazon EKS.
+ Helm doit être intégré à votre outil CI/CD d'automatisation existant pour automatiser l'empaquetage et la gestion des versions des diagrammes Helm (hors de portée de ce modèle).
+ GitVersion ou les numéros de version de Jenkins peuvent être utilisés pour automatiser le versionnement des graphiques.

## Outils
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-tools"></a>

**Outils**
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) — Amazon Elastic Kubernetes Service (Amazon EKS) est un service géré permettant d'exécuter Kubernetes sur AWS sans avoir à configurer ou à gérer votre propre plan de contrôle Kubernetes. Kubernetes est un système open source destiné à l'automatisation du déploiement, la mise à l'échelle et la gestion d'applications conteneurisées.
+ [Helm](https://helm.sh/docs/) — Helm est un gestionnaire de packages pour Kubernetes qui vous aide à installer et à gérer des applications sur votre cluster Kubernetes.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html) — Amazon Simple Storage Service (Amazon S3) est un service de stockage pour Internet. Vous pouvez utiliser Amazon S3 pour stocker et récupérer n'importe quelle quantité de données, n'importe quand et depuis n'importe quel emplacement sur le Web.
+ [Kubectl — Kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) est un utilitaire de ligne de commande permettant d'exécuter des commandes sur des clusters Kubernetes.

**Code**

L'exemple de code est joint en pièce jointe.

## Épopées
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-epics"></a>

### Configuration et initialisation de Helm
<a name="configure-and-initialize-helm"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez le client Helm. | Pour télécharger et installer le client Helm sur votre système local, utilisez la commande suivante. <pre>sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash</pre> | DevOps ingénieur | 
| Validez l'installation de Helm. | Pour vérifier que Helm est capable de communiquer avec le serveur d'API Kubernetes au sein du cluster Amazon EKS, exécutez. `helm version` | DevOps ingénieur | 

### Création et installation d'un graphique Helm dans le cluster Amazon EKS
<a name="create-and-install-a-helm-chart-in-the-amazon-eks-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un graphique Helm pour NGINX. | Pour créer un graphique de barre nommé `my-nginx` sur la machine cliente, exécutez`helm create my-nginx`. | DevOps ingénieur | 
| Passez en revue la structure du graphique. | Pour revoir la structure du graphique, exécutez la commande d'arborescence`tree my-nginx/`. | DevOps ingénieur | 
| Désactivez la création de comptes de service dans le graphique. | Dans`values.yaml`, sous la `serviceAccount` section, réglez la `create` clé sur`false`. Cette option est désactivée car il n'est pas nécessaire de créer un compte de service pour ce modèle. | DevOps ingénieur | 
| Validez (lint) le graphique modifié pour détecter les erreurs syntaxiques. | Pour valider le graphique afin de détecter toute erreur syntaxique avant de l'installer dans le cluster cible, exécutez`helm lint my-nginx/`. | DevOps ingénieur | 
| Installez le graphique pour déployer les ressources Kubernetes. | Pour exécuter l'installation du graphique Helm, utilisez la commande suivante. <pre>helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space </pre>L'`debug`indicateur facultatif affiche tous les messages de débogage pendant l'installation. L'`namespace`indicateur indique l'espace de noms dans lequel la partie ressources de ce graphique sera créée. | DevOps ingénieur | 
| Passez en revue les ressources du cluster Amazon EKS. | Pour consulter les ressources créées dans le cadre du graphique Helm dans l'espace de `helm-space` noms, utilisez la commande suivante. <pre>kubectl get all -n helm-space</pre> | DevOps ingénieur | 

### Revenir à une version précédente d'une application Kubernetes
<a name="roll-back-to-a-previous-version-of-a-kubernetes-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Modifiez et mettez à niveau la version. | Pour modifier le graphique, dans`values.yaml`, remplacez la `replicaCount` valeur par`2`. Mettez ensuite à niveau la version déjà installée en exécutant la commande suivante.<pre>helm upgrade my-nginx-release my-nginx/ --namespace helm-space</pre> | DevOps ingénieur | 
| Consultez l'historique de la version de Helm. | Pour répertorier toutes les révisions d'une version spécifique qui ont été installées à l'aide de Helm, exécutez la commande suivante. <pre>helm history my-nginx-release</pre> | DevOps ingénieur | 
| Passez en revue les détails d'une révision spécifique. | Avant de passer à une version fonctionnelle ou de revenir à une version fonctionnelle, et pour une couche de validation supplémentaire avant d'installer une révision, visualisez les valeurs transmises à chacune des révisions à l'aide de la commande suivante.<pre>helm get --revision=2 my-nginx-release</pre> | DevOps ingénieur | 
| Retournez à une version précédente. | Pour revenir à une révision précédente, utilisez la commande suivante. <pre>helm rollback my-nginx-release 1 </pre>Cet exemple revient à la révision numéro 1. | DevOps ingénieur | 

### Initialisation d'un compartiment S3 en tant que référentiel Helm
<a name="initialize-an-s3-bucket-as-a-helm-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un compartiment S3 pour les diagrammes Helm. | Créez un compartiment S3 unique. Dans le compartiment, créez un dossier appelé`charts`. L'exemple de ce modèle utilise `s3://my-helm-charts/charts` comme référentiel graphique cible. | Administrateur du cloud | 
| Installez le plugin Helm pour Amazon S3. | Pour installer le plugin helm-s3 sur votre machine cliente, utilisez la commande suivante. <pre>helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0</pre>Remarque : le support de Helm V3 est disponible avec la version 0.9.0 et supérieure du plugin. | DevOps ingénieur | 
| Initialisez le référentiel Amazon S3 Helm.  | Pour initialiser le dossier cible en tant que référentiel Helm, utilisez la commande suivante. <pre>helm S3 init s3://my-helm-charts/charts </pre>La commande crée un `index.yaml` fichier dans la cible pour suivre toutes les informations du graphique stockées à cet emplacement. | DevOps ingénieur | 
| Ajoutez le référentiel Amazon S3 à Helm. | Pour ajouter le référentiel sur la machine cliente, utilisez la commande suivante.<pre>helm repo add my-helm-charts s3://my-helm-charts/charts </pre>Cette commande ajoute un alias au référentiel cible sur la machine cliente Helm. | DevOps ingénieur | 
| Consultez la liste des référentiels. | Pour afficher la liste des référentiels de la machine cliente Helm, exécutez`helm repo list`. | DevOps ingénieur | 

### Package et stockage des graphiques dans le référentiel Amazon S3 Helm
<a name="package-and-store-charts-in-the-amazon-s3-helm-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Empaquetez le graphique. | Pour `my-nginx` empaqueter le graphique que vous avez créé, exécutez`helm package ./my-nginx/`. La commande regroupe tout le contenu du dossier `my-nginx` graphique dans un fichier d'archive, dont le nom est basé sur le numéro de version indiqué dans le `Chart.yaml` fichier. | DevOps ingénieur | 
| Stockez le package dans le référentiel Amazon S3 Helm. | Pour télécharger le package dans le référentiel Helm d'Amazon S3, exécutez la commande suivante en utilisant le nom correct du `.tgz` fichier.<pre>helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts</pre> | DevOps ingénieur | 
| Recherchez le graphique Helm. | Pour vérifier que le graphique apparaît à la fois localement et dans le référentiel Helm d'Amazon S3, exécutez la commande suivante.<pre>helm search repo my-nginx</pre> | DevOps ingénieur | 

### Modifier, versionner et empaqueter un graphique
<a name="modify-version-and-package-a-chart"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Modifiez et empaquetez le graphique. | Dans`values.yaml`, définissez la `replicaCount` valeur sur`1`. Ensuite, empaquetez le graphique en l'exécutant`helm package ./my-nginx/`, en changeant cette fois la version `Chart.yaml` en`0.1.1`. Le versionnement est idéalement mis à jour par le biais de l'automatisation à l'aide d'outils tels que GitVersion les numéros de build de Jenkins dans un CI/CD pipeline. L'automatisation du numéro de version n'est pas couverte par ce modèle. | DevOps ingénieur | 
| Transférez la nouvelle version vers le référentiel Helm d'Amazon S3. | Pour transférer le nouveau package avec la version 0.1.1 vers le référentiel `my-helm-charts` Helm d'Amazon S3, exécutez la commande suivante.<pre>helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts</pre> | DevOps ingénieur | 

### Recherchez et installez un graphique depuis le référentiel Amazon S3 Helm
<a name="search-for-and-install-a-chart-from-the-amazon-s3-helm-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Recherchez toutes les versions du graphique my-nginx. | Pour afficher toutes les versions disponibles d'un graphique, exécutez la commande suivante avec l'`--versions`indicateur.<pre>helm search repo my-nginx --versions</pre>Sans le drapeau, Helm affiche par défaut la dernière version téléchargée d'un graphique. | DevOps ingénieur | 
| Installez un graphique depuis le référentiel Amazon S3 Helm. | Les résultats de la recherche de la tâche précédente montrent les différentes versions du `my-nginx` graphique. Pour installer la nouvelle version (0.1.1) depuis le référentiel Amazon S3 Helm, utilisez la commande suivante.<pre>helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space</pre> | DevOps ingénieur | 

## Ressources connexes
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-resources"></a>
+ [Documentation HELM](https://helm.sh/docs/)
+ [plugin helm-s3 (licence MIT)](https://github.com/hypnoglow/helm-s3.git)
+ [Binaire du client HELM](https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3)
+ [Documentation Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)

## Pièces jointes
<a name="attachments-d3f993e6-4d96-4cb9-a075-c4debe431fd7"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/d3f993e6-4d96-4cb9-a075-c4debe431fd7/attachments/attachment.zip)

# Déployez un cluster CockroachDB dans Amazon EKS à l'aide de Terraform
<a name="deploy-cockroachdb-on-eks-using-terraform"></a>

*Sandip Gangapadhyay et Kalyan Senthilnathan, Amazon Web Services*

## Résumé
<a name="deploy-cockroachdb-on-eks-using-terraform-summary"></a>

[Ce modèle fournit un module HashiCorp Terraform pour déployer un cluster [CockroachDB](https://www.cockroachlabs.com/docs/stable/) à nœuds multiples sur Amazon Elastic Kubernetes Service (Amazon EKS) à l'aide de l'opérateur CockroachDB.](https://www.cockroachlabs.com/docs/v25.4/cockroachdb-operator-overview) CockroachDB est une base de données SQL distribuée qui fournit un partitionnement horizontal automatique, une haute disponibilité et des performances cohérentes sur des clusters répartis géographiquement. Ce modèle utilise Amazon EKS comme plate-forme Kubernetes gérée et implémente le [gestionnaire de certificats pour les communications entre nœuds sécurisées par TLS](https://cert-manager.io/docs/). Il utilise également un [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) pour la distribution du trafic et crée CockroachDB [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)avec des modules qui répliquent automatiquement les données pour améliorer la tolérance aux pannes et les performances.

**Public visé**

Pour implémenter ce modèle, nous vous recommandons de vous familiariser avec les éléments suivants :
+ HashiCorp Concepts de Terraform et pratiques de l'infrastructure en tant que code (IaC)
+ Services AWS, en particulier Amazon EKS
+ Principes fondamentaux de Kubernetes, y compris les opérateurs StatefulSets et les configurations de service
+ Bases de données SQL distribuées
+ Concepts de sécurité, tels que la gestion des certificats TLS.
+ DevOps pratiques, CI/CD flux de travail et automatisation de l'infrastructure

## Conditions préalables et limitations
<a name="deploy-cockroachdb-on-eks-using-terraform-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Autorisations pour déployer des ressources dans un cluster Amazon EKS
+ Un cluster Amazon EKS version v1.23 ou ultérieure, avec des nœuds étiquetés `node=cockroachdb`
+ [Pilote Amazon Elastic Block Store Container Storage Interface (CSI)](https://github.com/kubernetes-sigs/aws-ebs-csi-driver) version 1.19.0 ou ultérieure, installé dans le cluster Amazon EKS
+ [Terraform CLI version 1.0.0 ou ultérieure, installée](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [kubectl, installé](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ Git, [installé](https://git-scm.com/install/)
+ AWS Command Line Interface [(AWS CLI) version 2.9.18 ou ultérieure, [installée et configurée](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**Limites**
+ L'opérateur Kubernetes CockroachDB ne prend pas en charge plusieurs clusters Kubernetes pour les déploiements multirégionaux. [Pour plus de limites, voir [Orchestrate CockroachDB sur plusieurs clusters Kubernetes (documentation CockroachDB) et CockroachDB Kubernetes](https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html#eks) Operator ().](https://github.com/cockroachdb/cockroach-operator) GitHub
+ L'élagage automatique des demandes de volume persistantes (PVCs) est actuellement désactivé par défaut. Cela signifie qu'après la mise hors service et le retrait d'un nœud, l'opérateur ne supprimera pas le volume persistant qui a été monté sur son pod. Pour plus d'informations, consultez la section [Élagage automatique du PVC dans la documentation de](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html#automatic-pvc-pruning) CockroachDB.

**Versions du produit**
+ Version 22.2.2 de CockroachDB

## Architecture
<a name="deploy-cockroachdb-on-eks-using-terraform-architecture"></a>

**Architecture cible**

Le schéma suivant montre un déploiement hautement disponible de CockroachDB sur trois zones de AWS disponibilité au sein d'un cloud privé virtuel (VPC). Les pods CockroachDB sont gérés via Amazon EKS. L'architecture illustre comment les utilisateurs accèdent à la base de données via un Network Load Balancer, qui distribue le trafic aux pods CockroachDB. Les pods s'exécutent sur des instances Amazon Elastic Compute Cloud (Amazon EC2) dans chaque zone de disponibilité, ce qui garantit résilience et tolérance aux pannes.

![\[Un déploiement de CockroachDB à haute disponibilité sur trois zones de disponibilité AWS au sein d'un VPC.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/images/4b163abf-6fdc-4310-840c-bda621ab25dd.png)


**Ressources créées**

Le déploiement du module Terraform utilisé dans ce modèle crée les ressources suivantes :

1. **Network Load Balancer** — Cette ressource sert de point d'entrée pour les demandes des clients et répartit uniformément le trafic entre les instances de CockroachDB.

1. **CockroachDB StatefulSet** — StatefulSet Définit l'état souhaité pour le déploiement de CockroachDB au sein du cluster Amazon EKS. Il gère le déploiement ordonné, le dimensionnement et les mises à jour des pods CockroachDB.

1. Pods **CockroachDB — Ces pods** sont des instances de CockroachDB exécutées sous forme de conteneurs dans des pods Kubernetes. Ces modules stockent et gèrent les données dans l'ensemble du cluster distribué.

1. **Base de données CockroachDB** — Il s'agit de la base de données distribuée gérée par CockroachDB, couvrant plusieurs pods. Il réplique les données pour garantir une haute disponibilité, une tolérance aux pannes et des performances élevées.

## Outils
<a name="deploy-cockroachdb-on-eks-using-terraform-tools"></a>

**Services AWS**
+ [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.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.

**Autres outils**
+ [HashiCorp Terraform](https://www.terraform.io/docs) est un outil d'infrastructure en tant que code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/) est une interface de ligne de commande qui vous permet d'exécuter des commandes sur des clusters Kubernetes.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [Deploy a CockroachDB in Amazon EKS using](https://github.com/aws-samples/crdb-cluster-eks-terraform) Terraform. Le référentiel de code contient les fichiers et dossiers suivants pour Terraform :
+ `modules`dossier — Ce dossier contient le module Terraform pour CockroachDB
+ `main`dossier — Ce dossier contient le module racine qui appelle le module enfant CockroachDB pour créer le cluster de base de données CockroachDB.

## Bonnes pratiques
<a name="deploy-cockroachdb-on-eks-using-terraform-best-practices"></a>
+ Ne réduisez pas la taille à moins de trois nœuds. Ceci est considéré comme un anti-modèle sur CockroachDB et peut provoquer des erreurs. Pour plus d'informations, consultez [Cluster Scaling](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html) dans la documentation de CockroachDB.
+ Implémentez le dimensionnement automatique d'Amazon EKS à l'aide de Karpernter ou Cluster Autoscaler. Cela permet au cluster CockroachDB de s'étendre horizontalement et de créer automatiquement de nouveaux nœuds. Pour plus d'informations, consultez la section [Scale cluster computing with Karpenter et Cluster Autoscaler dans la documentation](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) Amazon EKS.
**Note**  
En raison de la règle de planification `podAntiAffinity` Kubernetes, un seul pod CockroachDB peut être planifié dans un nœud Amazon EKS.
+ Pour connaître les meilleures pratiques de sécurité d'Amazon EKS, consultez la section [Meilleures pratiques en matière de sécurité](https://docs.aws.amazon.com/eks/latest/best-practices/security.html) dans la documentation Amazon EKS.
+ Pour connaître les meilleures pratiques en matière de performances SQL pour CockroachDB, consultez la section [Meilleures pratiques en matière de performances SQL](https://www.cockroachlabs.com/docs/stable/performance-best-practices-overview.html) dans la documentation de CockroachDB.
+ Pour plus d'informations sur la configuration d'un backend distant Amazon Simple Storage Service (Amazon S3) pour le fichier d'état Terraform, consultez [Amazon S3](https://developer.hashicorp.com/terraform/language/backend/s3) dans la documentation Terraform.

## Épopées
<a name="deploy-cockroachdb-on-eks-using-terraform-epics"></a>

### Configuration de votre environnement
<a name="set-up-your-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le référentiel de code. | Entrez la commande suivante pour cloner le référentiel :<pre>git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git</pre> | DevOps ingénieur, Git | 
| Mettez à jour les variables Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingénieur, Terraform | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez l'infrastructure. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingénieur, Terraform | 

### Vérification du déploiement
<a name="verify-the-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez la création des ressources. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingénieur | 
| (Facultatif) Augmentez ou diminuez. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps ingénieur, Terraform | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez l'infrastructure. | La mise à l'échelle des nœuds `0` réduira les coûts de calcul. Cependant, vous devrez toujours payer des frais pour les volumes Amazon EBS persistants créés par ce module. Pour éliminer les coûts de stockage, procédez comme suit pour supprimer tous les volumes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | Terraform | 

## Résolution des problèmes
<a name="deploy-cockroachdb-on-eks-using-terraform-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Erreur lors de la validation des informations d'identification du fournisseur | Lorsque vous exécutez la `destroy` commande Terraform `apply` ou, vous pouvez rencontrer l'erreur suivante :`Error: configuring Terraform AWS Provider: error validating provider  credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.`Cette erreur est due à l'expiration du jeton de sécurité pour les informations d'identification utilisées dans la configuration de votre machine locale. Pour obtenir des instructions sur la façon de résoudre l'erreur, consultez la section [Définir et afficher les paramètres de configuration](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) dans la AWS CLI documentation. | 
| Les pods CockroachDB sont en attente | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | 

## Ressources connexes
<a name="deploy-cockroachdb-on-eks-using-terraform-resources"></a>
+ [Déployer CockroachDB dans un seul cluster Kubernetes](https://www.cockroachlabs.com/docs/dev/deploy-cockroachdb-with-kubernetes.html) (documentation CockroachDB)
+ [Orchestrez CockroachDB sur plusieurs clusters Kubernetes](https://www.cockroachlabs.com/docs/dev/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html) (documentation CockroachDB)
+ [AWS Fournisseur](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentation Terraform)

## Pièces jointes
<a name="attachments-e22d81ab-b85c-4709-8579-4c9cdb4afdb6"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/attachments/attachment.zip)

# Déployez un exemple de microservice Java sur Amazon EKS et exposez le microservice à l'aide d'un Application Load Balancer
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer"></a>

*Vijay Thompson et Akkamahadevi Hiremath, Amazon Web Services*

## Résumé
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-summary"></a>

Ce modèle décrit comment déployer un exemple de microservice Java en tant qu'application conteneurisée sur Amazon Elastic Kubernetes Service (Amazon EKS) à l'`eksctl`aide de l'utilitaire de ligne de commande et d'Amazon Elastic Container Registry (Amazon ECR). Vous pouvez utiliser un Application Load Balancer pour équilibrer la charge du trafic des applications.

## Conditions préalables et limitations
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Interface de ligne de commande AWS (AWS CLI) version 1.7 ou ultérieure, installée et configurée sur macOS, Linux ou Windows
+ Un démon [Docker en cours d'](https://docs.docker.com/config/daemon/)exécution
+ L'utilitaire de ligne de `eksctl` commande, installé et configuré sous macOS, Linux ou Windows (pour plus d'informations, consultez [Getting started with Amazon EKS — eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) dans la documentation Amazon EKS.)
+ L'utilitaire de ligne de `kubectl` commande, installé et configuré sous macOS, Linux ou Windows (pour plus d'informations, consultez [Installation ou mise à jour de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) dans la documentation Amazon EKS.)

**Limites**
+ Ce modèle ne couvre pas l'installation d'un certificat SSL pour l'Application Load Balancer.

## Architecture
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-architecture"></a>

**Pile technologique cible**
+ Amazon ECR
+ Amazon EKS
+ Elastic Load Balancing

**Architecture cible**

Le schéma suivant montre une architecture permettant de conteneuriser un microservice Java sur Amazon EKS.

![\[Microservice Java déployé sous forme d'application conteneurisée sur Amazon EKS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e1dd8ab0-9e1e-4d2b-b7af-89d3e583e57c/images/aaca4fd9-5aaa-4df5-aebd-02a2ed881c3b.png)


## Outils
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-tools"></a>
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous aide à exécuter Kubernetes sur AWS sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [L'interface de ligne de commande AWS (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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribue automatiquement votre trafic entrant sur plusieurs cibles, telles que les instances, les conteneurs et les adresses IP Amazon Elastic Compute Cloud (Amazon EC2), dans une ou plusieurs zones de disponibilité.
+ [eksctl](https://eksctl.io/) vous aide à créer des clusters sur Amazon EKS.
+ [kubectl permet d'](https://kubernetes.io/docs/tasks/tools/install-kubectl/)exécuter des commandes sur des clusters Kubernetes.
+ [Docker](https://www.docker.com/) vous permet de créer, de tester et de fournir des applications dans des packages appelés conteneurs.

## Épopées
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-epics"></a>

### Créez un cluster Amazon EKS à l'aide de eksctl
<a name="create-an-amazon-eks-cluster-by-using-eksctl"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un cluster Amazon EKS.  | Pour créer un cluster Amazon EKS qui utilise deux EC2 instances Amazon t2.small comme nœuds, exécutez la commande suivante :<pre>eksctl create cluster --name <your-cluster-name> --version <version-number> --nodes=1 --node-type=t2.small</pre>Le processus peut prendre entre 15 et 20 minutes. [Une fois le cluster créé, la configuration Kubernetes appropriée est ajoutée à votre fichier kubeconfig.](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html) Vous pouvez utiliser le `kubeconfig` fichier avec `kubectl`**** pour déployer l'application ultérieurement. | Développeur, administrateur système | 
| Vérifiez le cluster Amazon EKS. | Pour vérifier que le cluster est créé et que vous pouvez vous y connecter, exécutez la `kubectl get nodes` commande. | Développeur, administrateur système | 

### Créez un référentiel Amazon ECR et envoyez l'image Docker.
<a name="create-an-amazon-ecr-repository-and-push-the-docker-image"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| créer un référentiel Amazon ECR ; | Suivez les instructions de la [section Création d'un référentiel privé](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) dans la documentation Amazon ECR. | Développeur, administrateur système | 
| Créez un fichier XML POM. | Créez un `pom.xml` fichier basé sur l'*exemple de code de fichier POM* dans la section [Informations supplémentaires](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de ce modèle. | Développeur, administrateur système | 
| Créez un fichier source. | Créez un fichier source appelé `HelloWorld.java` dans le `src/main/java/eksExample` chemin en vous basant sur l'exemple suivant :<pre>package eksExample;<br />import static spark.Spark.get;<br /><br />public class HelloWorld {<br />    public static void main(String[] args) {<br />        get("/", (req, res) -> {<br />            return "Hello World!";<br />        });<br />    }<br />}</pre>Veillez à utiliser la structure de répertoire suivante :<pre>├── Dockerfile<br />├── deployment.yaml<br />├── ingress.yaml<br />├── pom.xml<br />├── service.yaml<br />└── src<br />    └── main<br />        └── java<br />            └── eksExample<br />                └── HelloWorld.java</pre> |  | 
| Créez un fichier Dockerfile. | Créez un code `Dockerfile` basé sur l'*exemple de code Dockerfile* dans la section [Informations supplémentaires](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de ce modèle. | Développeur, administrateur système | 
| Créez et publiez l'image Docker. | Dans le répertoire dans lequel vous souhaitez `Dockerfile` créer, étiqueter et transférer l'image vers Amazon ECR, exécutez les commandes suivantes :<pre>aws ecr get-login-password --region <region>| docker login --username <username> --password-stdin <account_number>.dkr.ecr.<region>.amazonaws.com<br />docker buildx build --platform linux/amd64 -t hello-world-java:v1 .<br />docker tag hello-world-java:v1 <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1<br />docker push <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1</pre>Modifiez la région AWS, le numéro de compte et les détails du référentiel dans les commandes précédentes. N'oubliez pas de noter l'URL de l'image pour une utilisation ultérieure.Un système macOS doté d'une puce M1 ne parvient pas à créer une image compatible avec Amazon EKS exécuté sur une AMD64 plate-forme. Pour résoudre ce problème, utilisez [docker buildx](https://docs.docker.com/engine/reference/commandline/buildx/) pour créer une image Docker qui fonctionne sur Amazon EKS. |  | 

### Déployez les microservices Java
<a name="deploy-the-java-microservices"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un fichier de déploiement.  | Créez un fichier YAML appelé en `deployment.yaml` fonction de l'*exemple de code de fichier de déploiement* dans la section [Informations supplémentaires](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de ce modèle.Utilisez l'URL de l'image que vous avez copiée précédemment comme chemin du fichier image pour le référentiel Amazon ECR. | Développeur, administrateur système | 
| Déployez les microservices Java sur le cluster Amazon EKS.  | Pour créer un déploiement dans votre cluster Amazon EKS, exécutez la `kubectl apply -f deployment.yaml` commande. | Développeur, administrateur système | 
| Vérifiez l'état des capsules. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Développeur, administrateur système | 
| Créer un service. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Développeur, administrateur système | 
| Installez le module complémentaire AWS Load Balancer Controller. | Suivez les instructions de la section [Installation du module complémentaire AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) dans la documentation Amazon EKS.Le module complémentaire doit être installé pour créer un Application Load Balancer ou un Network Load Balancer pour un service Kubernetes. | Développeur, administrateur système | 
| Créez une ressource d'entrée. | Créez un fichier YAML appelé en `ingress.yaml` fonction de l'*exemple de code de fichier de ressource d'entrée* dans la section [Informations supplémentaires](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de ce modèle. | Développeur, administrateur système | 
| Créez un Application Load Balancer. | Pour déployer la ressource d'entrée et créer un Application Load Balancer, exécutez `kubectl apply -f ingress.yaml` la commande. | Développeur, administrateur système | 

### Tester l'application
<a name="test-the-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez et vérifiez l'application. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Développeur, administrateur système | 

## Ressources connexes
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-resources"></a>
+ [Création d'un référentiel privé](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) (documentation Amazon ECR)
+ [Transférer une image Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentation Amazon ECR)
+ [Contrôleurs d'entrée](https://www.eksworkshop.com/beginner/130_exposing-service/ingress_controller_alb/) (Amazon EKS Workshop)
+ [Docker buildx (Docker docs](https://docs.docker.com/engine/reference/commandline/buildx/))

## Informations supplémentaires
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional"></a>

**Exemple de fichier POM**

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>


  <groupId>helloWorld</groupId>
  <artifactId>helloWorld</artifactId>
  <version>1.0-SNAPSHOT</version>


  <dependencies>
    <dependency>
      <groupId>com.sparkjava</groupId><artifactId>spark-core</artifactId><version>2.0.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version>
        <configuration><finalName>eksExample</finalName><archive><manifest>
              <addClasspath>true</addClasspath><mainClass>eksExample.HelloWorld</mainClass><classpathPrefix>dependency-jars/</classpathPrefix>
            </manifest></archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version>
        <configuration><source>1.8</source><target>1.8</target></configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <goals><goal>attached</goal></goals><phase>package</phase>
            <configuration>
              <finalName>eksExample</finalName>
              <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
              <archive><manifest><mainClass>eksExample.HelloWorld</mainClass></manifest></archive>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
```

**Exemple de Dockerfile**

```
FROM bellsoft/liberica-openjdk-alpine-musl:17

RUN apk add maven
WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

EXPOSE 4567
CMD ["java", "-jar", "target/eksExample-jar-with-dependencies.jar"]
```

**Exemple de fichier de déploiement**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: java-microservice
  template:
    metadata:
      labels:
        app.kubernetes.io/name: java-microservice
    spec:
      containers:
      - name: java-microservice-container
        image: .dkr.ecr.amazonaws.com/:
        ports:
        - containerPort: 4567
```

**Exemple de fichier de service**

```
apiVersion: v1
kind: Service
metadata:
  name: "service-java-microservice"
spec:
  ports:
    - port: 80
      targetPort: 4567
      protocol: TCP
  type: NodePort
  selector:
    app.kubernetes.io/name: java-microservice
```

**Exemple de fichier de ressources d'entrée**

```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "java-microservice-ingress"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/load-balancer-name: apg2
    alb.ingress.kubernetes.io/target-type: ip
  labels:
    app: java-microservice
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "service-java-microservice"
                port:
                  number: 80
```

# Déployez une application basée sur GRPC sur un cluster Amazon EKS et accédez-y à l'aide d'un Application Load Balancer
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer"></a>

*Kirankumar Chandrashekar et Huy Nguyen, Amazon Web Services*

## Résumé
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-summary"></a>

Ce modèle décrit comment héberger une application basée sur GRPC sur un cluster Amazon Elastic Kubernetes Service (Amazon EKS) et comment y accéder en toute sécurité via un Application Load Balancer.

[gRPC](https://grpc.io/) est un framework open source d'appel de procédure à distance (RPC) qui peut s'exécuter dans n'importe quel environnement. Vous pouvez l'utiliser pour les intégrations de microservices et les communications client-serveur. Pour plus d'informations sur gRPC, consultez le billet de blog AWS [Application Load Balancer support for end-to-end HTTP/2](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/) and gRPC.

Ce modèle vous montre comment héberger une application basée sur GRPC qui s'exécute sur des pods Kubernetes sur Amazon EKS. Le client gRPC se connecte à un Application Load Balancer via le protocole HTTP/2 avec une connexion cryptée. SSL/TLS L'Application Load Balancer transmet le trafic vers l'application gRPC qui s'exécute sur les pods Amazon EKS. Le nombre de pods gRPC peut être automatiquement redimensionné en fonction du trafic à l'aide du [Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) Horizontal Pod Autoscaler. Le groupe cible de l'équilibreur de charge d'application effectue des contrôles de santé sur les nœuds Amazon EKS, évalue si la cible est saine et transmet le trafic uniquement aux nœuds sains.

## Conditions préalables et limitations
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ [Docker](https://www.docker.com/), installé et configuré sous Linux, macOS ou Windows.
+ [Interface de ligne de commande AWS (AWS CLI) version](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, installée et configurée sous Linux, macOS ou Windows.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), installé et configuré sous Linux, macOS ou Windows.
+ `kubectl`, installé et configuré pour accéder aux ressources de votre cluster Amazon EKS. Pour plus d'informations, consultez la section [Installation ou mise à jour de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) dans la documentation Amazon EKS. 
+ [g RPCurl](https://github.com/fullstorydev/grpcurl), installé et configuré.
+ Un cluster Amazon EKS nouveau ou existant. Pour plus d'informations, consultez [Getting started with Amazon EKS.](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)
+ Votre terminal informatique est configuré pour accéder au cluster Amazon EKS. Pour plus d'informations, consultez [Configurer votre ordinateur pour communiquer avec votre cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) dans la documentation Amazon EKS.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), provisionné dans le cluster Amazon EKS.
+ Un nom d'hôte DNS existant avec un SSL/TLS certificat ou un certificat SSL valide. Vous pouvez obtenir un certificat pour votre domaine en utilisant AWS Certificate Manager (ACM) ou en téléchargeant un certificat existant sur ACM. Pour plus d'informations sur ces deux options, consultez les sections [Demande d'un certificat public](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) et [Importation de certificats dans AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) dans la documentation ACM.

## Architecture
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-architecture"></a>

Le schéma suivant montre l'architecture mise en œuvre par ce modèle.

![\[Architecture pour une application basée sur GRPC sur Amazon EKS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/281936fa-bc43-4b4e-a343-ba1eab97df38.png)


 

Le schéma suivant montre un flux de travail dans lequel SSL/TLS le trafic est reçu d'un client gRPC qui est transféré vers un Application Load Balancer. Le trafic est transféré en texte clair vers le serveur gRPC car il provient d'un cloud privé virtuel (VPC).

![\[Flux de travail pour envoyer SSL/TLS du trafic vers un serveur gRPC\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/09e0c3f6-0c39-40b7-908f-8c4c693a5f02.png)


## Outils
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-tools"></a>

**Services AWS**
+ [L'interface de ligne de commande AWS (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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) répartit le trafic applicatif ou réseau entrant sur plusieurs cibles. Par exemple, vous pouvez répartir le trafic entre les instances, les conteneurs et les adresses IP Amazon Elastic Compute Cloud (Amazon EC2) dans une ou plusieurs zones de disponibilité.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable. 
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous aide à exécuter Kubernetes sur AWS sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.  

**Outils**
+ [eksctl](https://eksctl.io/) est un outil CLI simple permettant de créer des clusters sur Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) est un utilitaire de ligne de commande permettant d'exécuter des commandes sur des clusters Kubernetes.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) vous aide à gérer les AWS Elastic Load Balancers pour un cluster Kubernetes.
+ [g RPCurl](https://github.com/fullstorydev/grpcurl) est un outil en ligne de commande qui vous permet d'interagir avec les services gRPC.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [grpc-traffic-on-alb-to-eks](https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git).

## Épopées
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-epics"></a>

### Créez et envoyez l'image Docker du serveur gRPC vers Amazon ECR
<a name="build-and-push-the-grpc-serverrsquor-s-docker-image-to-amazon-ecr"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| créer un référentiel Amazon ECR ; | Connectez-vous à l'AWS Management Console, ouvrez la [console Amazon ECR](https://console.aws.amazon.com/ecr/), puis créez un référentiel Amazon ECR. Pour plus d'informations, consultez [la section Création d'un référentiel](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) dans la documentation Amazon ECR. Assurez-vous d'enregistrer l'URL du référentiel Amazon ECR.Vous pouvez également créer un référentiel Amazon ECR avec l'AWS CLI en exécutant la commande suivante :<pre>aws ecr create-repository --repository-name helloworld-grpc</pre> | Administrateur du cloud | 
| Développez l’image Docker.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingénieur | 
| Transférez l'image Docker vers Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingénieur | 

### Déployez les manifestes Kubernetes sur le cluster Amazon EKS
<a name="deploy-the-kubernetes-manifests-to-the-amazon-eks-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Modifiez les valeurs du fichier manifeste Kubernetes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingénieur | 
| Déployez le fichier manifeste Kubernetes.  | Déployez le `grpc-sample.yaml` fichier sur le cluster Amazon EKS en exécutant la `kubectl` commande suivante : <pre>kubectl apply -f ./kubernetes/grpc-sample.yaml</pre> | DevOps ingénieur | 

### Créez l'enregistrement DNS pour le FQDN de l'équilibreur de charge d'application
<a name="create-the-dns-record-for-the-application-load-balancerapos-s-fqdn"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Enregistrez le nom de domaine complet de l'Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingénieur | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez le serveur gRPC.  | Utilisez g RPCurl pour tester le point de terminaison en exécutant la commande suivante :<pre>grpcurl grpc.example.com:443 list <br />grpc.reflection.v1alpha.ServerReflection<br />helloworld.helloworld</pre>`grpc.example.com`Remplacez-le par votre nom DNS. | DevOps ingénieur | 
| Testez le serveur gRPC à l'aide d'un client gRPC.  | Dans l'`helloworld_client_ssl.py`exemple de client gRPC, remplacez le nom d'hôte de par le nom `grpc.example.com` d'hôte utilisé pour le serveur gRPC.  L'exemple de code suivant montre la réponse du serveur gRPC à la demande du client :<pre>python ./app/helloworld_client_ssl.py<br />message: "Hello to gRPC server from Client"<br /><br />message: "Thanks for talking to gRPC server!! Welcome to hello world. Received message is \"Hello to gRPC server from Client\""<br />received: true</pre>Cela montre que le client peut communiquer avec le serveur et que la connexion est réussie. | DevOps ingénieur | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez l'enregistrement DNS. | Supprimez l'enregistrement DNS qui pointe vers le FQDN de l'équilibreur de charge d'application que vous avez créé précédemment.  | Administrateur du cloud | 
| Retirez l'équilibreur de charge. | Sur la [console Amazon EC2](https://console.aws.amazon.com/ec2/), choisissez **Load Balancers**, puis supprimez l'équilibreur de charge créé par le contrôleur Kubernetes pour votre ressource d'entrée. | Administrateur du cloud | 
| Supprimez le cluster Amazon EKS. | Supprimez le cluster Amazon EKS en utilisant `eksctl` :<pre>eksctl delete cluster -f ./eks.yaml</pre> | AWS DevOps | 

## Ressources connexes
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-resources"></a>
+ [Répartition de charge réseau sur Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)
+ [Groupes cibles pour vos équilibreurs de charge d'applications](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version)

## Informations supplémentaires
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-additional"></a>

**Exemple de ressource d'entrée :**

```
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/backend-protocol-version: "GRPC"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<AWS-Region>:<AccountId>:certificate/<certificate_ID>
  labels:
    app: grpcserver
    environment: dev
  name: grpcserver
  namespace: grpcserver
spec:
  ingressClassName: alb
  rules:
  - host: grpc.example.com # <----- replace this as per your host name for which the SSL certtficate is available in ACM
    http:
      paths:
      - backend:
          service:
            name: grpcserver
            port:
              number: 9000
        path: /
        pathType: Prefix
```

**Exemple de ressource de déploiement :**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grpcserver
  namespace: grpcserver
spec:
  selector:
    matchLabels:
      app: grpcserver
  replicas: 1
  template:
    metadata:
      labels:
        app: grpcserver
    spec:
      containers:
      - name: grpc-demo
        image: <your_aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/helloworld-grpc:1.0   #<------- Change to the URI that the Docker image is pushed to
        imagePullPolicy: Always
        ports:
        - name: grpc-api
          containerPort: 9000
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
      restartPolicy: Always
```

**Exemple de sortie** :

```
NAME             CLASS           HOSTS                          Address                PORTS          AGE
 grpcserver      <none>      <DNS-HostName>                  <ELB-address>              80            27d
```

# Déployez des applications conteneurisées lorsqu'elles AWS IoT Greengrass V2 s'exécutent en tant que conteneur Docker
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container"></a>

*Salih Bakir, Giuseppe Di Bella et Gustav Svalander, Amazon Web Services*

## Résumé
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-summary"></a>

AWS IoT Greengrass Version 2, lorsqu'il est déployé en tant que conteneur Docker, ne prend pas en charge nativement l'exécution de conteneurs d'applications Docker. Ce modèle vous montre comment créer une image de conteneur personnalisée basée sur la dernière version AWS IoT Greengrass V2 qui active la fonctionnalité Docker-in-Docker (DinD). Avec DinD, vous pouvez exécuter des applications conteneurisées au sein de l'environnement. AWS IoT Greengrass V2 

Vous pouvez déployer ce modèle en tant que solution autonome ou l'intégrer à des plateformes d'orchestration de conteneurs telles qu'Amazon ECS Anywhere. Quel que soit le modèle de déploiement, vous conservez toutes les AWS IoT Greengrass V2 fonctionnalités, y compris les capacités de traitement AWS IoT SiteWise Edge, tout en permettant des déploiements évolutifs basés sur des conteneurs. 

## Conditions préalables et limitations
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ Pour les AWS IoT Greengrass Version 2 prérequis généraux, consultez la section [Conditions préalables](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started-prerequisites.html) dans la AWS IoT Greengrass Version 2 documentation. 
+ Docker Engine, installé et configuré sous Linux, macOS ou Windows.
+ Docker Compose (si vous utilisez l'interface de ligne de commande (CLI) Docker Compose pour exécuter des images Docker).
+ Système d'exploitation Linux.
+ Un hyperviseur doté d'un serveur hôte qui prend en charge la virtualisation.
+ Exigences du système :
  + 2 Go de RAM (minimum)
  + 5 Go d'espace disque disponible (minimum)
  + Pour AWS IoT SiteWise Edge, un processeur quadricœur x86\$164 avec 16 Go de RAM et 50 Go d'espace disque disponible. Pour plus d'informations sur le traitement AWS IoT SiteWise des données, consultez la section [Exigences relatives aux packs de traitement des données](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-gateway-ggv2.html#w2aac17c19c13b7) dans la AWS IoT SiteWise documentation.

**Versions du produit**
+ AWS IoT Greengrass Version 2 version 2.5.3 ou ultérieure
+ Docker-in-Docker version 1.0.0 ou ultérieure
+ Docker Compose version 1.22 ou ultérieure
+ Docker Engine version 20.10.12 ou ultérieure

**Limites**
+ 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="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-architecture"></a>

**Pile technologique cible**
+ **Sources de données** : appareils IoT, capteurs ou équipements industriels qui génèrent des données à traiter
+ **AWS IoT Greengrass V2**— Fonctionnant comme un conteneur Docker doté de D-in-D fonctionnalités, déployé sur des infrastructures périphériques
+ Applications **conteneurisées : applications** personnalisées exécutées dans l' AWS IoT Greengrass V2 environnement sous forme de conteneurs Docker imbriqués
+ **(Facultatif) Amazon ECS Anywhere** : orchestration de conteneurs qui gère le déploiement des AWS IoT Greengrass V2 conteneurs
+ **Autres Services AWS** — AWS IoT Core AWS IoT SiteWise, et autres Services AWS pour le traitement et la gestion des données

**Architecture cible**

Le schéma suivant montre un exemple d'architecture de déploiement cible qui utilise Amazon ECS Anywhere, un outil de gestion de conteneurs.

![\[Architecture de déploiement à l'aide d'Amazon ECS Anywhere.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/2ecf5354-40e0-4fd9-9798-086719059784/images/5ed2652e-9604-4809-8962-b167e1991658.png)


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

**1 : Stockage d'images de conteneurs** — Amazon ECR stocke les images de AWS IoT Greengrass conteneurs et tous les conteneurs d'applications personnalisés nécessaires au traitement des bords.

**2** et **3 : déploiement de conteneurs** — Amazon ECS Anywhere déploie l'image du AWS IoT Greengrass conteneur depuis Amazon ECR vers l'emplacement périphérique, en gérant le cycle de vie du conteneur et le processus de déploiement.

**4 : Déploiement des composants** — Le AWS IoT Greengrass cœur déployé déploie automatiquement ses composants pertinents en fonction de sa configuration. Les composants incluent AWS IoT SiteWise Edge et les autres composants de traitement des bords nécessaires au sein de l'environnement conteneurisé.

**5 : Ingestion des données** — Une fois la configuration complète, AWS IoT Greengrass commence à ingérer les données de télémétrie et de capteurs provenant de diverses sources de données IoT situées à la périphérie.

**6 : Traitement des données et intégration dans le cloud** — Le AWS IoT Greengrass cœur conteneurisé traite les données localement à l'aide de ses composants déployés (y compris AWS IoT SiteWise Edge pour les données industrielles). Il envoie ensuite les données traitées aux AWS Cloud services pour une analyse et un stockage plus approfondis.

## Outils
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-tools"></a>

**Services AWS**
+ [Amazon ECS Anywhere](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch-type-external.html) vous permet de déployer, d'utiliser et de gérer les tâches et les services Amazon ECS sur votre propre infrastructure.
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) fournit une capacité de calcul évolutive dans le AWS Cloud. Vous pouvez lancer autant de serveurs virtuels que vous le souhaitez et les augmenter ou les diminuer rapidement.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)est un environnement d'exécution périphérique et un service cloud open source pour l'Internet des objets (IoT) qui vous aide à créer, déployer et gérer des applications IoT sur vos appareils.
+ [AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html)vous aide à collecter, modéliser, analyser et visualiser les données des équipements industriels à grande échelle.

**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.
+ [Docker Compose](https://docs.docker.com/compose/) est un outil permettant de définir et d'exécuter des applications multi-conteneurs.
+ [Docker Engine](https://docs.docker.com/engine/) est une technologie de conteneurisation open source permettant de créer et de conteneuriser des applications.

**Référentiel de code**

Le code de ce modèle est disponible dans le Docker-in-Docker référentiel GitHub [AWS IoT Greengrass v2](https://github.com/aws-samples/aws-iot-greengrass-docker-in-docker).

## Épopées
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-epics"></a>

### Construisez l' AWS IoT Greengrass V2 Docker-in-Docker image
<a name="build-the-gg2-docker-in-docker-image"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez et naviguez vers le référentiel. | Pour cloner le dépôt, utilisez la commande suivante : `git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git`Pour accéder au `docker` répertoire, utilisez la commande suivante :`cd aws-iot-greengrass-v2-docker-in-docker/docker` | DevOps ingénieur, AWS DevOps | 
| Développez l’image Docker. | Pour créer l'image Docker avec la version par défaut (la plus récente), exécutez la commande suivante :`docker build -t x86_64/aws-iot-greengrass:latest .`Ou, pour créer l'image Docker avec une version spécifique, exécutez la commande suivante :`docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .`Pour vérifier le build, exécutez la commande suivante :`docker images \| grep aws-iot-greengrass`  | AWS DevOps, DevOps ingénieur, développeur d'applications | 
| (Facultatif) Transférez vers Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Développeur d'applications, AWS DevOps, DevOps ingénieur | 

### Configurer les AWS informations d'identification
<a name="configure-aws-credentials"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Sélectionnez la méthode d'authentification. | Choisissez l’une des options suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrateur AWS | 
| Configurez la méthode d'authentification. | Pour la méthode d'authentification que vous avez sélectionnée, suivez les instructions de configuration suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrateur AWS | 

### Exécuter avec Docker Compose
<a name="run-with-docker-compose"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configuration `docker-compose.yml`. | Mettez à jour le `docker-compose.yml` fichier avec les variables d'environnement comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingénieur | 
| Démarrez et vérifiez le conteneur. | Pour commencer au premier plan, exécutez la commande suivante :`docker-compose up --build`Ou, pour démarrer en arrière-plan, exécutez la commande suivante :`docker-compose up --build -d`Pour vérifier l'état, exécutez la commande suivante :`docker-compose ps`Pour surveiller les journaux, exécutez la commande suivante :`docker-compose logs -f` | DevOps ingénieur | 

### Exécuter avec Docker CLI
<a name="run-with-docker-cli"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez le conteneur avec Docker CLI. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingénieur | 
| Vérifiez le contenant. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingénieur | 

### Gérez les applications conteneurisées
<a name="manage-containerized-applications"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez des applications. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Développeur d’applications | 
| Accès et test Docker-in-Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingénieur | 

### (Facultatif) Intégrer à Amazon ECS Anywhere
<a name="optional-integrate-with-ecs-anywhere"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le cluster Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrateur AWS | 
| Déployez la tâche Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrateur AWS | 

### Arrêtez et nettoyez
<a name="stop-and-cleanup"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Arrêtez le conteneur. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps ingénieur | 

## Résolution des problèmes
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Le conteneur ne démarre pas avec des erreurs d'autorisation. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)`--privileged`accorde des privilèges étendus au conteneur. | 
| Le provisionnement échoue en raison d'erreurs d'identification. | Pour vérifier que les informations d'identification sont correctement configurées, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Assurez-vous que les autorisations IAM incluent`iot:CreateThing`,`iot:CreatePolicy`, `iot:AttachPolicy``iam:CreateRole`, et`iam:AttachRolePolicy`. | 
| Impossible de se connecter au démon Docker à l'intérieur du conteneur. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| Le conteneur manque d'espace disque. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Garantir un espace disque minimal : 5 Go pour les opérations de base et 50 Go pour AWS IoT SiteWise Edge | 
| Problèmes de construction. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| Problèmes de connectivité réseau. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Vérifiez que le pare-feu autorise le trafic HTTPS (443) et MQTT (8883) sortant. | 
| Les composants Greengrass ne se déploient pas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Consultez les journaux spécifiques aux composants dans le `/greengrass/v2/logs/` répertoire. | 
| Le conteneur sort immédiatement après le démarrage. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Vérifiez que toutes les variables d'environnement requises sont correctement définies si`PROVISION=true`. Assurez-vous que le `--init` drapeau est utilisé lors du démarrage du conteneur. | 

## Ressources connexes
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-resources"></a>

**AWS resources**
+ [Amazon Elastic Container Service](https://aws.amazon.com/ecs/)
+ [Configuration du traitement des données de pointe pour les AWS IoT SiteWise modèles et les actifs](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/edge-processing.html)
+ [Qu'est-ce que AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)

**Autres ressources**
+ [Documentation Docker](https://docs.docker.com/)

## Informations supplémentaires
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-additional"></a>
+ Pour le traitement des données AWS IoT SiteWise Edge, Docker doit être disponible dans l' AWS IoT Greengrass environnement.
+ Pour exécuter un conteneur imbriqué, vous devez exécuter le AWS IoT Greengrass conteneur avec des informations d'identification de niveau administrateur.

# Déployez des conteneurs à l'aide d'Elastic Beanstalk
<a name="deploy-containers-by-using-elastic-beanstalk"></a>

*Thomas Scott et Jean-Baptiste Guillois, Amazon Web Services*

## Résumé
<a name="deploy-containers-by-using-elastic-beanstalk-summary"></a>

Sur le cloud Amazon Web Services (AWS), AWS Elastic Beanstalk prend en charge Docker en tant que plate-forme disponible, afin que les conteneurs puissent fonctionner avec l'environnement créé. Ce modèle montre comment déployer des conteneurs à l'aide du service Elastic Beanstalk. Le déploiement de ce modèle utilisera l'environnement du serveur Web basé sur la plate-forme Docker.

Pour utiliser Elastic Beanstalk pour déployer et dimensionner des applications et des services Web, vous téléchargez votre code et le déploiement est automatiquement géré. Le provisionnement des capacités, l'équilibrage de charge, le dimensionnement automatique et la surveillance de l'état de santé des applications sont également inclus. Lorsque vous utilisez Elastic Beanstalk, vous pouvez contrôler totalement les ressources AWS qu'il crée en votre nom. Elastic Beanstalk est gratuit. Vous ne payez que pour les ressources AWS utilisées pour stocker et exécuter vos applications.

Ce modèle inclut des instructions de déploiement à l'aide de l'[interface de ligne de commande AWS Elastic Beanstalk (EB CLI](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html)) et de l'AWS Management Console.

**Cas d’utilisation**

Les cas d'utilisation d'Elastic Beanstalk sont les suivants : 
+ Déployez un environnement prototype pour faire la démonstration d'une application frontale. (Ce modèle utilise un Dockerfile**** comme exemple.)
+ Déployez une API pour gérer les demandes d'API pour un domaine donné.
+ Déployez une solution d'orchestration à l'aide de Docker-Compose (`docker-compose.yml`ce**** modèle n'est pas utilisé comme exemple pratique).

## Conditions préalables et limitations
<a name="deploy-containers-by-using-elastic-beanstalk-prereqs"></a>

**Conditions préalables**
+ Un compte AWS
+ AWS EB CLI installée localement
+ Docker installé sur une machine locale

**Limites**
+ Le forfait gratuit impose une limite d'extraction Docker de 100 extractions par 6 heures et par adresse IP.

## Architecture
<a name="deploy-containers-by-using-elastic-beanstalk-architecture"></a>

**Pile technologique cible**
+ Instances Amazon Elastic Compute Cloud (Amazon EC2)
+ Groupe de sécurité
+ Application Load Balancer
+ Groupe Auto Scaling

**Architecture cible**

![\[Architecture pour le déploiement de conteneurs avec Elastic Beanstalk.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/dfabcdc2-747f-40e2-a603-08ea31ba71d3/images/1d17ff09-1aea-4c72-adb5-eaf741601428.png)


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

AWS Elastic Beanstalk peut automatiquement évoluer en fonction du nombre de demandes effectuées. Les ressources AWS créées pour un environnement incluent un Application Load Balancer, un groupe Auto Scaling et une ou plusieurs instances Amazon EC2 . 

L'équilibreur de charge se trouve devant les EC2 instances Amazon, qui font partie du groupe Auto Scaling. Amazon EC2 Auto Scaling démarre automatiquement des EC2 instances Amazon supplémentaires pour s'adapter à la charge croissante de votre application. Si la charge de votre application diminue, Amazon EC2 Auto Scaling arrête les instances, mais maintient au moins une instance en cours d'exécution.

**Déclencheurs de dimensionnement automatiques**

Le groupe Auto Scaling de votre environnement Elastic Beanstalk utilise CloudWatch deux alarmes Amazon pour lancer les opérations de dimensionnement. Les déclencheurs par défaut évoluent quand le trafic réseau sortant moyen de chaque instance est supérieur à 6 Mo ou inférieur à 2 Mo sur une période de cinq minutes. Pour utiliser Amazon EC2 Auto Scaling de manière efficace, configurez des déclencheurs adaptés à votre application, à votre type d'instance et à vos exigences de service. Vous pouvez mettre à l'échelle en fonction de plusieurs statistiques, y compris la latence, les I/O disque, l'utilisation de l'UC et le nombre de demandes. Pour plus d'informations, consultez la section [Déclencheurs Auto Scaling](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-autoscaling-triggers.html).

## Outils
<a name="deploy-containers-by-using-elastic-beanstalk-tools"></a>

**Services AWS**
+ [L'interface de ligne de commande AWS (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.
+ [L'interface de ligne de commande AWS EB (EB CLI)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html) est un client de ligne de commande que vous pouvez utiliser pour créer, configurer et gérer des environnements Elastic Beanstalk.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) répartit le trafic applicatif ou réseau entrant sur plusieurs cibles. Par exemple, vous pouvez répartir le trafic entre les instances, les conteneurs et les adresses IP d'Amazon Elastic Compute Cloud (Amazon EC2) dans une ou plusieurs zones de disponibilité.

**Autres services**
+ [Docker regroupe](https://www.docker.com/) les logiciels dans des unités standardisées appelées conteneurs qui incluent des bibliothèques, des outils système, du code et un environnement d'exécution.

**Code**

Le code de ce modèle est disponible dans le référentiel GitHub [Cluster Sample Application](https://github.com/aws-samples/cluster-sample-app).

## Épopées
<a name="deploy-containers-by-using-elastic-beanstalk-epics"></a>

### Construire avec un Dockerfile
<a name="build-with-a-dockerfile"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le référentiel distant. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Développeur d'applications, administrateur AWS, AWS DevOps | 
| Initialisez le projet Elastic Beanstalk Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Développeur d'applications, administrateur AWS, AWS DevOps | 
| Testez le projet localement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Développeur d'applications, administrateur AWS, AWS DevOps | 

### Déploiement à l'aide d'EB CLI
<a name="deploy-using-eb-cli"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécuter la commande de déploiement | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Développeur d'applications, administrateur AWS, AWS DevOps | 
| Accédez à la version déployée. | Une fois la commande de déploiement terminée, accédez au projet à l'aide de la `eb open` commande. | Développeur d'applications, administrateur AWS, AWS DevOps | 

### Déploiement à l'aide de la console
<a name="deploy-using-the-console"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez l'application à l'aide du navigateur. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Développeur d'applications, administrateur AWS, AWS DevOps | 
| Accédez à la version déployée. | Après le déploiement, accédez à l'application déployée et choisissez l'URL fournie. | Développeur d'applications, administrateur AWS, AWS DevOps | 

## Ressources connexes
<a name="deploy-containers-by-using-elastic-beanstalk-resources"></a>
+ [Environnements de serveurs Web](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-webserver.html)
+ [Installation de l'interface de ligne de commande EB sur macOS](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-osx.html)
+ [Installation manuelle de l'interface de ligne de commande EB](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html)

## Informations supplémentaires
<a name="deploy-containers-by-using-elastic-beanstalk-additional"></a>

**Avantages de l'utilisation d'Elastic Beanstalk**
+ Provisionnement automatique de l'infrastructure
+ Gestion automatique de la plateforme sous-jacente
+ Correctifs et mises à jour automatiques pour soutenir l'application
+ Dimensionnement automatique de l'application
+ Possibilité de personnaliser le nombre de nœuds
+ Possibilité d'accéder aux composants de l'infrastructure si nécessaire
+ Facilité de déploiement par rapport aux autres solutions de déploiement de conteneurs

# Générez une adresse IP sortante statique à l'aide d'une fonction Lambda, d'Amazon VPC et d'une architecture sans serveur
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture"></a>

*Thomas Scott, Amazon Web Services*

## Résumé
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-summary"></a>

Ce modèle décrit comment générer une adresse IP sortante statique dans le cloud Amazon Web Services (AWS) à l'aide d'une architecture sans serveur. Votre organisation peut bénéficier de cette approche si elle souhaite envoyer des fichiers à une entité commerciale distincte en utilisant le protocole SFTP (Secure File Transfer Protocol). Cela signifie que l'entité commerciale doit avoir accès à une adresse IP qui permet aux fichiers de passer par son pare-feu. 

L'approche du modèle vous aide à créer une fonction AWS Lambda qui utilise une [adresse IP élastique comme adresse IP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) sortante. En suivant les étapes de ce modèle, vous pouvez créer une fonction Lambda et un cloud privé virtuel (VPC) qui achemine le trafic sortant via une passerelle Internet dotée d'une adresse IP statique. Pour utiliser l'adresse IP statique, vous devez associer la fonction Lambda au VPC et à ses sous-réseaux. 

## Conditions préalables et limitations
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif. 
+ Autorisations AWS Identity and Access Management (IAM) pour créer et déployer une fonction Lambda, ainsi que pour créer un VPC et ses sous-réseaux. Pour plus d'informations à ce sujet, consultez la section [Rôle d'exécution et autorisations utilisateur](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions) dans la documentation AWS Lambda.
+ Si vous envisagez d'utiliser l'infrastructure en tant que code (IaC) pour implémenter l'approche de ce modèle, vous avez besoin d'un environnement de développement intégré (IDE) tel qu'AWS Cloud9. Pour plus d'informations à ce sujet, consultez [Qu'est-ce qu'AWS Cloud9 ?](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcome.html) dans la documentation AWS Cloud9.

## Architecture
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-architecture"></a>

Le schéma suivant montre l'architecture sans serveur pour ce modèle.

![\[AWS Cloud VPC architecture with two availability zones, public and private subnets, NAT gateways, and a Lambda function.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/eb1d0b05-df33-45ae-b27e-36090055b300/images/c15cc6da-ce4e-4ea0-9feb-de1c845d3ce8.png)


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

1. Le trafic sortant part`NAT gateway 1`. `Public subnet 1`

1. Le trafic sortant part`NAT gateway 2`. `Public subnet 2`

1. La fonction Lambda peut être exécutée dans ou. `Private subnet 1` `Private subnet 2`

1. `Private subnet 1`et `Private subnet 2` acheminez le trafic vers les passerelles NAT dans les sous-réseaux publics.

1. Les passerelles NAT envoient le trafic sortant vers la passerelle Internet à partir des sous-réseaux publics.

1. Les données sortantes sont transférées de la passerelle Internet vers le serveur externe.



**Pile technologique**
+ Lambda
+ Amazon Virtual Private Cloud (Amazon VPC)

 

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

Vous pouvez garantir la haute disponibilité (HA) en utilisant deux sous-réseaux publics et deux sous-réseaux privés dans différentes zones de disponibilité. Même si une zone de disponibilité devient indisponible, la solution du modèle continue de fonctionner.

## Outils
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-tools"></a>
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) — AWS Lambda est un service de calcul qui prend en charge l'exécution de code sans provisionner ni gérer de 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. Vous payez uniquement le temps de calcul que vous utilisez. Vous n'exposez aucuns frais quand votre code n'est pas exécuté.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/) — Amazon Virtual Private Cloud (Amazon VPC) fournit une section logiquement isolée du cloud AWS dans laquelle vous pouvez lancer des ressources AWS dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble beaucoup à un réseau traditionnel que vous pourriez exécuter dans votre propre data center, et présente l'avantage d'utiliser l'infrastructure évolutive d'AWS.

## Épopées
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-epics"></a>

### Création d'un VPC
<a name="create-a-new-vpc"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un nouveau VPC. | Connectez-vous à l'AWS Management Console, ouvrez la console Amazon VPC, puis créez un VPC nommé `Lambda VPC` dont la plage d'adresses CIDR est `10.0.0.0/25`**** la plage d'adresses CIDR. IPv4 Pour plus d'informations sur la création d'un VPC, consultez [Getting started with Amazon VPC dans la documentation Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html#getting-started-create-vpc).  | Administrateur AWS | 

### Création de deux sous-réseaux publics
<a name="create-two-public-subnets"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le premier sous-réseau public. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 
| Créez le deuxième sous-réseau public. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 

### Création de deux sous-réseaux privés
<a name="create-two-private-subnets"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le premier sous-réseau privé. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 
| Créez le deuxième sous-réseau privé. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 

### Créez deux adresses IP élastiques pour vos passerelles NAT
<a name="create-two-elastic-ip-addresses-for-your-nat-gateways"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
|  Créez la première adresse IP élastique. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Cette adresse IP élastique est utilisée pour votre première passerelle NAT.  | Administrateur AWS | 
| Créez la deuxième adresse IP élastique. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Cette adresse IP élastique est utilisée pour votre deuxième passerelle NAT. | Administrateur AWS | 

### Création d'une passerelle Internet
<a name="create-an-internet-gateway"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créer une passerelle Internet | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 
| Connectez la passerelle Internet au VPC. | Sélectionnez la passerelle Internet que vous venez de créer, puis choisissez **Actions, Attach to VPC (Actions, Attacher au VPC)**. | Administrateur AWS | 

### Création de deux passerelles NAT
<a name="create-two-nat-gateways"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez la première passerelle NAT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 
| Créez la deuxième passerelle NAT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 

### Créez des tables de routage pour vos sous-réseaux publics et privés
<a name="create-route-tables-for-your-public-and-private-subnets"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez la table de routage pour le sous-réseau public. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 
| Créez la table de routage pour le sous-réseau public-two. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 
| Créez la table de routage pour le sous-réseau private-one. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 
| Créez la table de routage pour le sous-réseau private-two. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 

### Créez la fonction Lambda, ajoutez-la au VPC et testez la solution
<a name="create-the-lambda-function-add-it-to-the-vpc-and-test-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une fonction Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 
| Ajoutez la fonction Lambda à votre VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 
| Écrivez du code pour appeler un service externe. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrateur AWS | 

## Ressources connexes
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-resources"></a>
+ [Configuration d'une fonction Lambda pour accéder aux ressources d'un VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html)

# Identifiez automatiquement les images de conteneur dupliquées lors de la migration vers un référentiel Amazon ECR
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository"></a>

*Rishabh Yadav et Rishi Singla, Amazon Web Services*

## Résumé
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-summary"></a>

Le modèle fournit une solution automatisée pour déterminer si les images stockées dans différents référentiels de conteneurs sont des doublons. Cette vérification est utile lorsque vous envisagez de migrer des images d'autres référentiels de conteneurs vers Amazon Elastic Container Registry (Amazon ECR).

Pour les informations de base, le modèle décrit également les composants d'une image conteneur, tels que le résumé de l'image, le manifeste et les balises. Lorsque vous planifiez une migration vers Amazon ECR, vous pouvez décider de synchroniser les images de vos conteneurs entre les registres de conteneurs en comparant les résumés des images. Avant de migrer vos images de conteneur, vous devez vérifier si ces images existent déjà dans le référentiel Amazon ECR afin d'éviter toute duplication. Cependant, il peut être difficile de détecter les doublons en comparant les résumés d'images, ce qui peut entraîner des problèmes lors de la phase initiale de migration.  Ce modèle compare les résumés de deux images similaires stockées dans des registres de conteneurs différents et explique pourquoi les résumés varient, afin de vous aider à comparer les images avec précision.

## Conditions préalables et limitations
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-prereqs"></a>
+ Un actif Compte AWS
+ Accès au registre [public Amazon ECR](https://gallery.ecr.aws/)
+ Connaissance des éléments suivants : Services AWS
  + [AWS CodeCommit](https://aws.amazon.com/codecommit/)
  + [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
  + [AWS CodeBuild](https://aws.amazon.com/codebuild/)
  + [Gestion des identités et des accès AWS (JE SUIS)](https://aws.amazon.com/iam/)
  + [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/)
+  CodeCommit Informations d'identification configurées (voir [les instructions](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html))

## Architecture
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-architecture"></a>

**Composants de l'image du conteneur**

Le schéma suivant illustre certains des composants d'une image de conteneur. Ces composants sont décrits après le schéma.

![\[Manifeste, configuration, couches du système de fichiers et résumés.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/71b99c67-a934-4f94-8af8-2a8431fb91f5.png)


**Termes et définitions**

Les termes suivants sont définis dans la [spécification d'image de l'Open Container Initiative (OCI)](https://github.com/opencontainers/image-spec/blob/main/spec.md).
+ **Registre :** service de stockage et de gestion d'images.
+ **Client :** outil qui communique avec les registres et fonctionne avec des images locales.
+ **Push :** processus de téléchargement d'images dans un registre.
+ **Pull :** processus de téléchargement d'images depuis un registre.
+ **Blob :** forme binaire du contenu qui est stocké par un registre et qui peut être traité par un condensé.
+ **Index :** construction qui identifie plusieurs manifestes d'images pour différentes plateformes informatiques (telles que x86-64 ou ARM 64 bits) ou types de supports. Pour plus d'informations, consultez la [spécification de l'indice d'image OCI](https://github.com/opencontainers/image-spec/blob/main/image-index.md).
+ **Manifeste :** document JSON qui définit une image ou un artefact téléchargé via le point de terminaison du manifeste. Un manifeste peut faire référence à d'autres blobs d'un dépôt à l'aide de descripteurs. Pour plus d'informations, consultez la [spécification OCI Image Manifest](https://github.com/opencontainers/image-spec/blob/main/manifest.md).
+ **Couche du système de fichiers :** bibliothèques système et autres dépendances d'une image.
+ **Configuration :** blob contenant les métadonnées des artefacts et référencé dans le manifeste. Pour plus d'informations, consultez la [spécification de configuration d'image OCI](https://github.com/opencontainers/image-spec/blob/main/config.md).
+ **Objet ou artefact :** élément de contenu conceptuel stocké sous forme de blob et associé à un manifeste accompagné d'une configuration.
+ **Résumé :** identifiant unique créé à partir d'un hachage cryptographique du contenu d'un manifeste. Le condensé d'image permet d'identifier de manière unique une image de conteneur immuable. Lorsque vous extrayez une image à l'aide de son condensé, vous téléchargez la même image à chaque fois, quel que soit le système d'exploitation ou l'architecture. Pour plus d'informations, consultez la [spécification d'image OCI](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
+ **Tag :** identifiant de manifeste lisible par l'homme. Par rapport aux résumés d'images, qui sont immuables, les balises sont dynamiques. Une balise pointant vers une image peut changer et passer d'une image à l'autre, même si le résumé de l'image sous-jacent reste le même.

**Architecture cible**

Le schéma suivant montre l'architecture de haut niveau de la solution fournie par ce modèle pour identifier les images de conteneur dupliquées en comparant les images stockées dans Amazon ECR et dans des référentiels privés.

![\[Détection automatique des doublons avec CodePipeline et. CodeBuild\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/5ee62bc8-db8d-48a3-9e79-f3392b6e9bf7.png)


## Outils
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-tools"></a>

**Services 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.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)vous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.

**Code**

Le code de ce modèle est disponible dans la [solution**** automatisée du GitHub référentiel pour identifier les images de conteneur dupliquées entre les référentiels.](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/)

## Bonnes pratiques
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-best-practices"></a>
+ [CloudFormation meilleures pratiques](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)
+ [AWS CodePipeline meilleures pratiques](https://docs.aws.amazon.com/codepipeline/latest/userguide/best-practices.html)

## Épopées
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-epics"></a>

### Extraire des images de conteneurs depuis les référentiels publics et privés Amazon ECR
<a name="pull-container-images-from-ecr-public-and-private-repositories"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Extrayez une image du référentiel public Amazon ECR. | Depuis le terminal, exécutez la commande suivante pour extraire l'image `amazonlinux` du référentiel public Amazon ECR.<pre>$~ % docker pull public.ecr.aws/amazonlinux/amazonlinux:2018.03 </pre>Lorsque l'image a été extraite sur votre machine locale, vous verrez le résumé d'extraction suivant, qui représente l'index de l'image.<pre>2018.03: Pulling from amazonlinux/amazonlinux<br />4ddc0f8d367f: Pull complete <br /><br />Digest: sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5<br /><br />Status: Downloaded newer image for public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />public.ecr.aws/amazonlinux/amazonlinux:2018.03</pre> | Développeur d'applications, AWS DevOps, administrateur AWS | 
| Transférez l'image vers un référentiel privé Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrateur AWS, AWS DevOps, développeur d'applications | 
| Extrayez la même image depuis le référentiel privé Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Développeur d'applications, AWS DevOps, administrateur AWS | 

### Comparez les manifestes d'images
<a name="compare-the-image-manifests"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Recherchez le manifeste de l'image stockée dans le référentiel public Amazon ECR. | Depuis le terminal, exécutez la commande suivante pour extraire le manifeste de l'image `public.ecr.aws/amazonlinux/amazonlinux:2018.03` depuis le référentiel public Amazon ECR.<pre>$~ % docker manifest inspect public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />{<br />   "schemaVersion": 2,<br />   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",<br />   "manifests": [<br />      {<br />         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />         "size": 529,<br />         "digest": "sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",<br />         "platform": {<br />            "architecture": "amd64",<br />            "os": "linux"<br />         }<br />      }<br />   ]<br />}</pre> | Administrateur AWS, AWS DevOps, développeur d'applications | 
| Trouvez le manifeste de l'image stockée dans le référentiel privé Amazon ECR. | Depuis le terminal, exécutez la commande suivante pour extraire le manifeste de l'image `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest` depuis le référentiel privé Amazon ECR.<pre>$~ % docker manifest inspect <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest                                          <br />{<br />	"schemaVersion": 2,<br />	"mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />	"config": {<br />		"mediaType": "application/vnd.docker.container.image.v1+json",<br />		"size": 1477,<br />		"digest": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68"<br />	},<br />	"layers": [<br />		{<br />			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",<br />			"size": 62267075,<br />			"digest": "sha256:4ddc0f8d367f424871a060e2067749f32bd36a91085e714dcb159952f2d71453"<br />		}<br />	]<br />}</pre> | AWS DevOps, administrateur système AWS, développeur d'applications | 
| Comparez le résumé extrait par Docker avec le résumé du manifeste de l'image dans le référentiel privé Amazon ECR. | Une autre question est de savoir pourquoi le résumé fourni par la commande **docker pull** diffère du résumé du manifeste pour l'image. `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest`Le condensé utilisé pour **docker pull** représente le condensé du manifeste d'image, qui est stocké dans un registre. Ce condensé est considéré comme la racine d'une chaîne de hachage, car le manifeste contient le hachage du contenu qui sera téléchargé et importé dans Docker.L'ID d'image utilisé dans Docker se trouve dans ce manifeste sous `config.digest` la forme. Cela représente la configuration d'image utilisée par Docker. On pourrait donc dire que le manifeste est l'enveloppe et que l'image est le contenu de l'enveloppe. Le résumé du manifeste est toujours différent de l'ID de l'image. Cependant, un manifeste spécifique doit toujours produire le même identifiant d'image. Le résumé du manifeste étant une chaîne de hachage, nous ne pouvons pas garantir qu'il sera toujours le même pour un identifiant d'image donné. Dans la plupart des cas, il produit le même résumé, bien que Docker ne puisse pas le garantir. La différence possible dans le résumé du manifeste provient du fait que Docker ne stocke pas les blobs compressés avec gzip localement. Par conséquent, l'exportation de couches peut produire un condensé différent, même si le contenu non compressé reste le même. L'identifiant de l'image vérifie que le contenu non compressé est identique ; c'est-à-dire que l'identifiant de l'image est désormais un identifiant adressable au contenu (). `chainID`Pour confirmer ces informations, vous pouvez comparer le résultat de la commande **docker inspect** sur les référentiels publics et privés Amazon ECR :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Les résultats vérifient que les deux images ont le même condensé d'ID d'image et le même résumé de couche.Identifiant : `f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68`Couches : `d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2`En outre, les résumés sont basés sur les octets de l'objet géré localement (le fichier local est un tar de la couche d'image du conteneur) ou sur le blob transmis au serveur de registre. Toutefois, lorsque vous transférez le blob vers un registre, le tar est compressé et le condensé est calculé dans le fichier tar compressé. Par conséquent, la différence entre la valeur du **docker pull** digest provient de la compression appliquée au niveau du registre (Amazon ECR privé ou public).Cette explication est spécifique à l'utilisation d'un client Docker. Vous ne verrez pas ce comportement avec d'autres clients tels que **nerdctl** ou **Finch**, car ils ne compressent pas automatiquement l'image lors des opérations push et pull. | AWS DevOps, administrateur système AWS, développeur d'applications | 

### Identifiez automatiquement les images dupliquées entre les référentiels publics et privés d'Amazon ECR
<a name="automatically-identify-duplicate-images-between-ecr-public-and-private-repositories"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Clonez le dépôt Github pour ce modèle dans un dossier local :<pre>$git clone https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories</pre> | Administrateur AWS, AWS DevOps | 
| Configurez un CI/CD pipeline. | Le GitHub référentiel inclut un `.yaml` fichier qui crée une CloudFormation pile dans laquelle configurer un pipeline AWS CodePipeline.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Le pipeline sera configuré en deux étapes (CodeCommit et CodeBuild, comme indiqué dans le schéma d'architecture) pour identifier les images du référentiel privé qui existent également dans le référentiel public. Le pipeline est configuré avec les ressources suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrateur AWS, AWS DevOps | 
| Renseignez le CodeCommit référentiel. | Pour remplir le CodeCommit référentiel, effectuez les opérations suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrateur AWS, AWS DevOps | 
| Nettoyer. | Pour éviter d'encourir de futurs frais, supprimez les ressources en procédant comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrateur AWS | 

## Résolution des problèmes
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Lorsque vous essayez de pousser, d'extraire ou d'interagir avec un CodeCommit référentiel depuis le terminal ou la ligne de commande, vous êtes invité à fournir un nom d'utilisateur et un mot de passe, et vous devez fournir les informations d'identification Git de votre utilisateur IAM. | Les causes les plus fréquentes de cette erreur sont les suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)En fonction de votre système d'exploitation et de votre environnement local, vous devrez peut-être installer un gestionnaire d'informations d'identification, configurer celui qui est inclus dans votre système d'exploitation ou personnaliser votre environnement local de manière à utiliser le stockage des informations d'identification. Par exemple, si votre ordinateur exécute macOS, vous pouvez utiliser l'utilitaire Keychain Access pour stocker vos informations d'identification. Si votre ordinateur est sous Windows, vous pouvez utiliser le gestionnaire d'informations d'identification Git installé avec Git pour Windows. Pour plus d'informations, consultez [Configuration pour les utilisateurs HTTPS à l'aide des informations d'identification Git](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html) dans la CodeCommit documentation et [Stockage des informations d'identification](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage) dans la documentation Git. | 
| Vous rencontrez des erreurs HTTP 403 ou « aucun identifiant d'authentification de base » lorsque vous transférez une image vers le référentiel Amazon ECR. | **Ces messages d'erreur peuvent provenir de la commande **docker push ou docker** **pull**, même si vous vous êtes authentifié avec succès auprès de Docker à l'aide de la commande aws ecr. get-login-password** Les causes connues sont les suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 

## Ressources connexes
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-resources"></a>
+ [Solution automatisée pour identifier les images de conteneur dupliquées entre les référentiels](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/) (GitHub référentiel)
+ [Galerie publique Amazon ECR](https://gallery.ecr.aws/)
+ [Images privées dans Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/images.html) (documentation Amazon ECR)
+ [AWS::CodePipeline::Pipeline ressource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html) (CloudFormation documentation)
+ [Spécification du format d'image OCI](https://github.com/opencontainers/image-spec/blob/main/spec.md)

## Informations supplémentaires
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-additional"></a>

**Résultat de l'inspection Docker pour l'image dans le référentiel public Amazon ECR**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

**Résultat de l'inspection Docker pour une image dans le référentiel privé Amazon ECR**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

# Installation de l'agent SSM sur les nœuds de travail Amazon EKS à l'aide de Kubernetes DaemonSet
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset"></a>

*Mahendra Evasiddappa, Amazon Web Services*

## Résumé
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-summary"></a>

**Remarque, septembre 2021 :** la dernière version optimisée d'Amazon EKS AMIs installe automatiquement l'agent SSM. Pour plus d'informations, consultez les [notes de publication](https://github.com/awslabs/amazon-eks-ami/releases/tag/v20210621) du mois de juin 2021 AMIs.

Dans Amazon Elastic Kubernetes Service (Amazon EKS), pour des raisons de sécurité, aucune paire de clés Secure Shell (SSH) n'est associée aux nœuds de travail. Ce modèle montre comment utiliser le type de DaemonSet ressource Kubernetes pour installer l'agent AWS Systems Manager (agent SSM) sur tous les nœuds de travail, au lieu de l'installer manuellement ou de remplacer l'Amazon Machine Image (AMI) pour les nœuds. DaemonSet utilise une tâche cron sur le nœud de travail pour planifier l'installation de l'agent SSM. Vous pouvez également utiliser ce modèle pour installer d'autres packages sur les nœuds de travail.

Lorsque vous résolvez des problèmes dans le cluster, l'installation de l'agent SSM à la demande vous permet d'établir une session SSH avec le nœud de travail, de collecter des journaux ou d'examiner la configuration de l'instance, sans paires de clés SSH.

## Conditions préalables et limitations
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-prereqs"></a>

**Conditions préalables**
+ Un cluster Amazon EKS existant avec des nœuds de travail Amazon Elastic Compute Cloud (Amazon EC2).
+ Les instances de conteneur doivent disposer des autorisations requises pour communiquer avec le service SSM. Le rôle géré AWS Identity and Access Management (IAM) **Amazon SSMManaged InstanceCore** fournit les autorisations requises pour que l'agent SSM s'exécute sur EC2 des instances. Pour plus d'informations, consultez la [documentation d'AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html).

**Limites**
+ Ce modèle ne s'applique pas à AWS Fargate, DaemonSets car il n'est pas pris en charge sur la plateforme Fargate.
+ Ce modèle s'applique uniquement aux nœuds de travail basés sur Linux.
+ Les DaemonSet pods fonctionnent en mode privilégié. Si le cluster Amazon EKS possède un webhook qui bloque les pods en mode privilégié, l'agent SSM ne sera pas installé.

## Architecture
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-architecture"></a>

Le schéma suivant illustre l'architecture de ce modèle.

![\[Utilisation de Kubernetes DaemonSet pour installer l'agent SSM sur les nœuds de travail Amazon EKS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/016d53f3-45c1-4913-b542-67124e1462b8/images/3a6dfd00-e54b-44d5-843a-4c26ce9826c9.png)


## Outils
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools"></a>

**Outils**
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) est un utilitaire de ligne de commande utilisé pour interagir avec un cluster Amazon EKS. Ce modèle est utilisé `kubectl` pour déployer un agent DaemonSet sur le cluster Amazon EKS, qui installera l'agent SSM sur tous les nœuds de travail.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) vous permet d'exécuter facilement Kubernetes sur AWS sans avoir à installer, exploiter et gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes. Kubernetes est un système open source destiné à l'automatisation du déploiement, la mise à l'échelle et la gestion d'applications conteneurisées.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) vous permet de gérer vos EC2 instances, vos instances sur site et vos machines virtuelles (VMs) via un shell interactif basé sur un navigateur en un clic ou via l'interface de ligne de commande AWS (AWS CLI).

**Code**

Utilisez le code suivant pour créer un fichier DaemonSet de configuration qui installera l'agent SSM sur le cluster Amazon EKS. Suivez les instructions de la section [Epics](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics).

```
cat << EOF > ssm_daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    k8s-app: ssm-installer
  name: ssm-installer
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: ssm-installer
  template:
    metadata:
      labels:
        k8s-app: ssm-installer
    spec:
      containers:
      - name: sleeper
        image: busybox
        command: ['sh', '-c', 'echo I keep things running! && sleep 3600']
      initContainers:
      - image: amazonlinux
        imagePullPolicy: Always
        name: ssm
        command: ["/bin/bash"]
        args: ["-c","echo '* * * * * root yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm & rm -rf /etc/cron.d/ssmstart' > /etc/cron.d/ssmstart"]
        securityContext:
          allowPrivilegeEscalation: true
        volumeMounts:
        - mountPath: /etc/cron.d
          name: cronfile
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      volumes:
      - name: cronfile
        hostPath:
          path: /etc/cron.d
          type: Directory
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      terminationGracePeriodSeconds: 30
EOF
```

## Épopées
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics"></a>

### Configurer kubectl
<a name="set-up-kubectl"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez et configurez kubectl pour accéder au cluster EKS. | S'il `kubectl` n'est pas déjà installé et configuré pour accéder au cluster Amazon EKS, consultez la section [Installation de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) dans la documentation Amazon EKS. | DevOps | 

### Déployez le DaemonSet
<a name="deploy-the-daemonset"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le fichier DaemonSet de configuration. | Utilisez le code de la section [Code](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools) plus haut dans ce modèle pour créer un fichier de DaemonSet configuration appelé`ssm_daemonset.yaml`, qui sera déployé sur le cluster Amazon EKS. La nacelle lancée par DaemonSet possède un conteneur principal et un `init` conteneur. Le conteneur principal possède une `sleep` commande. Le `init` conteneur inclut une `command` section qui crée un fichier de travail cron pour installer l'agent SSM sur le chemin. `/etc/cron.d/` La tâche cron ne s'exécute qu'une seule fois et le fichier qu'elle crée est automatiquement supprimé une fois la tâche terminée. Lorsque le conteneur d'initialisation est terminé, le conteneur principal attend 60 minutes avant de sortir. Au bout de 60 minutes, un nouveau module est lancé. Ce module installe l'agent SSM, s'il est manquant, ou met à jour l'agent SSM vers la dernière version.Si nécessaire, vous pouvez modifier la `sleep` commande pour redémarrer le module une fois par jour ou pour l'exécuter plus souvent.  | DevOps | 
| Déployez le DaemonSet sur le cluster Amazon EKS. | Pour déployer le fichier DaemonSet de configuration que vous avez créé à l'étape précédente sur le cluster Amazon EKS, utilisez la commande suivante :<pre>kubectl apply -f ssm_daemonset.yaml </pre>Cette commande crée un DaemonSet pour exécuter les pods sur les nœuds de travail afin d'installer l'agent SSM. | DevOps | 

## Ressources connexes
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-resources"></a>
+ [Installation de kubectl (documentation](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) Amazon EKS)
+ [Configuration du gestionnaire de sessions](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started.html) (documentation AWS Systems Manager)

# Installez l'agent SSM et l' CloudWatch agent sur les nœuds de travail Amazon EKS à l'aide de preBootstrapCommands
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands"></a>

*Akkamahadevi Hiremath, Amazon Web Services*

## Résumé
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-summary"></a>

Ce modèle fournit des exemples de code et des étapes pour installer l'agent AWS Systems Manager (agent SSM) et l' CloudWatch agent Amazon sur les nœuds de travail Amazon Elastic Kubernetes Service (Amazon EKS) dans le cloud Amazon Web Services (AWS) lors de la création du cluster Amazon EKS. Vous pouvez installer l'agent SSM et l' CloudWatch agent en utilisant la `preBootstrapCommands` propriété du [schéma du fichier de `eksctl` configuration (documentation](https://eksctl.io/usage/schema/) Weaveworks). Vous pouvez ensuite utiliser l'agent SSM pour vous connecter à vos nœuds de travail sans utiliser de paire de clés Amazon Elastic Compute Cloud (Amazon EC2). En outre, vous pouvez utiliser l' CloudWatch agent pour surveiller l'utilisation de la mémoire et du disque sur vos nœuds de travail Amazon EKS.

## Conditions préalables et limitations
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ L'[utilitaire de ligne de commande eksctl](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html), installé et configuré sur macOS, Linux ou Windows
+ L'[utilitaire de ligne de commande kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html), installé et configuré sur macOS, Linux ou Windows

**Limites**
+ Nous vous recommandons d'éviter d'ajouter des scripts de longue durée à la `preBootstrapCommands`**** propriété, car cela retarde l'adhésion du nœud au cluster Amazon EKS pendant les activités de dimensionnement. Nous vous recommandons plutôt de créer une [Amazon Machine Image (AMI) personnalisée](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.customenv.html).
+ Ce modèle s'applique uniquement aux instances Amazon EC2 Linux.

## Architecture
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-architecture"></a>

**Pile technologique**
+ Amazon CloudWatch
+ Amazon Elastic Kubernetes Service (Amazon EKS)
+ AWS Systems Manager Parameter Store

**Architecture cible**

Le schéma suivant montre un exemple d'utilisateur se connectant aux nœuds de travail Amazon EKS à l'aide de l'agent SSM installé à l'aide du`preBootstrapCommands`.

![\[User connecting to Amazon EKS worker nodes via Systems Manager, with SSM Agent and CloudWatch agent on each node.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/b37a3cdb-204f-4014-8317-3600a793dac7/images/9a5760af-23bb-4616-97b0-b401a9d080cf.png)


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

1. L'utilisateur crée un cluster Amazon EKS en utilisant le fichier `eksctl` de configuration avec la `preBootstrapCommands` propriété, qui installe l'agent SSM et CloudWatch l'agent.

1. Toute nouvelle instance qui rejoint le cluster ultérieurement en raison d'activités de dimensionnement est créée avec l'agent SSM et CloudWatch l'agent préinstallés.

1. L'utilisateur se connecte à Amazon à l'aide EC2 de l'agent SSM, puis surveille l'utilisation de la mémoire et du disque à l'aide de l' CloudWatch agent.

## Outils
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-tools"></a>
+ [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 Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous aide à exécuter Kubernetes sur AWS sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) fournit un stockage hiérarchique sécurisé pour la gestion des données de configuration et la gestion des secrets.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) vous aide à gérer vos EC2 instances, vos instances sur site et vos machines virtuelles via un shell interactif basé sur un navigateur en un clic ou via l'interface de ligne de commande AWS (AWS CLI).
+ [eksctl](https://eksctl.io/usage/schema/) est un utilitaire de ligne de commande permettant de créer et de gérer des clusters Kubernetes sur Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) est un utilitaire de ligne de commande permettant de communiquer avec le serveur API du cluster.

## Épopées
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-epics"></a>

### Création d’un cluster Amazon EKS
<a name="create-an-amazon-eks-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Stockez le fichier de configuration de l' CloudWatch agent. | Stockez le fichier de configuration de l' CloudWatch agent dans le [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) de la région AWS dans laquelle vous souhaitez créer votre cluster Amazon EKS. Pour ce faire, [créez un paramètre](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) dans AWS Systems Manager Parameter Store et notez le nom du paramètre (par exemple,`AmazonCloudwatch-linux`).Pour plus d'informations, consultez l'*exemple de code de fichier de configuration de l' CloudWatch agent* dans la section [Informations supplémentaires](#install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional) de ce modèle. | DevOps ingénieur | 
| Créez le fichier de configuration et le cluster eksctl.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

### Vérifiez que l'agent SSM et l' CloudWatch agent fonctionnent
<a name="verify-that-the-ssm-agent-and-cloudwatch-agent-work"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez l'agent SSM. | Utilisez SSH pour vous connecter à vos nœuds de cluster Amazon EKS en utilisant l'une des méthodes décrites dans la [section Démarrer une session](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console%20%20or%20https:%2F%2Fdocs.aws.amazon.com%2Fsystems-manager%2Flatest%2Fuserguide%2Fsession-manager-working-with-sessions-start.html%23sessions-start-cli) dans la documentation AWS Systems Manager. | AWS DevOps | 
| Testez l' CloudWatch agent. | Utilisez la CloudWatch console pour valider l' CloudWatch agent :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

## Ressources connexes
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-resources"></a>
+ [Installation et exécution de l' CloudWatch agent sur vos serveurs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html) ( CloudWatch documentation Amazon)
+ [Création d'un paramètre Systems Manager (console)](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) (documentation AWS Systems Manager)
+ [Création du fichier de configuration de l' CloudWatch agent](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html) ( CloudWatch documentation Amazon)
+ [Démarrage d'une session (AWS CLI)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli) (documentation AWS Systems Manager)
+ [Démarrage d'une session ( EC2 console Amazon)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console) (documentation AWS Systems Manager)

## Informations supplémentaires
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional"></a>

**Exemple de fichier CloudWatch de configuration de l'agent**

Dans l'exemple suivant, l' CloudWatch agent est configuré pour surveiller l'utilisation du disque et de la mémoire sur les instances Amazon Linux :

```
{
    "agent": {
        "metrics_collection_interval": 60,
        "run_as_user": "cwagent"
    },
    "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            "disk": {
                "measurement": [
                    "used_percent"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "mem": {
                "measurement": [
                    "mem_used_percent"
                ],
                "metrics_collection_interval": 60
            }
        }
    }
}
```

**Exemple de fichier de configuration eksctl**

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: test
  region: us-east-2
  version: "1.24"
managedNodeGroups:
  - name: test
    minSize: 2
    maxSize: 4
    desiredCapacity: 2
    volumeSize: 20
    instanceType: t3.medium
    preBootstrapCommands:
    - sudo yum install amazon-ssm-agent -y
    - sudo systemctl enable amazon-ssm-agent
    - sudo systemctl start amazon-ssm-agent
    - sudo yum install amazon-cloudwatch-agent -y
    - sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudwatch-linux
    iam:
      attachPolicyARNs:
        - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
        - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
        - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
        - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
```

**Informations supplémentaires sur le code**
+ Dans la dernière ligne de la `preBootstrapCommands` propriété `AmazonCloudwatch-linux` se trouve le nom du paramètre créé dans le magasin de paramètres AWS System Manager. Vous devez l'inclure `AmazonCloudwatch-linux` dans Parameter Store dans la même région AWS où vous avez créé le cluster Amazon EKS. Vous pouvez également spécifier un chemin de fichier, mais nous vous recommandons d'utiliser Systems Manager pour faciliter l'automatisation et la réutilisation.
+ Si vous les utilisez `preBootstrapCommands` dans le fichier `eksctl` de configuration, deux modèles de lancement s'affichent dans l'AWS Management Console. Le premier modèle de lancement inclut les commandes spécifiées dans`preBootstrapCommands`. Le second modèle inclut les commandes spécifiées dans les données utilisateur Amazon EKS par défaut `preBootstrapCommands` et les contient. Ces données sont nécessaires pour que les nœuds rejoignent le cluster. Le groupe Auto Scaling du groupe de nœuds utilise ces données utilisateur pour créer de nouvelles instances.
+ Si vous utilisez l'`iam`attribut dans le fichier de `eksctl` configuration, vous devez répertorier les politiques Amazon EKS par défaut ainsi que toutes les politiques supplémentaires requises dans les politiques AWS Identity and Access Management (IAM) jointes. Dans l'extrait de code issu de l'étape *Créer le fichier de configuration et le cluster eksctl*, `CloudWatchAgentServerPolicy` des politiques supplémentaires `AmazonSSMMangedInstanceCore` sont ajoutées pour garantir que l' CloudWatch agent et l'agent SSM fonctionnent comme prévu. Les `AmazonEC2ContainerRegistryReadOnly` politiques `AmazonEKSWorkerNodePolicy``AmazonEKS_CNI_Policy`, sont des politiques obligatoires requises pour que le cluster Amazon EKS fonctionne correctement.

# Migrer les contrôleurs d'entrée NGINX lors de l'activation du mode automatique Amazon EKS
<a name="migrate-nginx-ingress-controller-eks-auto-mode"></a>

*Olawale Olaleye et Shamanth Devagari, Amazon Web Services*

## Résumé
<a name="migrate-nginx-ingress-controller-eks-auto-mode-summary"></a>

[Le mode automatique EKS](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) pour Amazon Elastic Kubernetes Service (Amazon EKS) peut réduire la charge opérationnelle liée à l'exécution de vos charges de travail sur des clusters Kubernetes. Ce mode AWS permet également de configurer et de gérer l'infrastructure en votre nom. Lorsque vous activez le mode automatique EKS sur un cluster existant, vous devez planifier soigneusement la migration des configurations du contrôleur d'[entrée NGINX](https://docs.nginx.com/nginx-ingress-controller/overview/about/). Cela est dû au fait que le transfert direct d'équilibreurs de charge réseau n'est pas possible.

Vous pouvez utiliser une stratégie de blue/green déploiement pour migrer une instance de NGINX Ingress Controller lorsque vous activez le mode automatique EKS dans un cluster Amazon EKS existant.

## Conditions préalables et limitations
<a name="migrate-nginx-ingress-controller-eks-auto-mode-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Un [cluster Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) exécutant Kubernetes version 1.29 ou ultérieure
+ Extensions Amazon EKS exécutant des [versions minimales](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html#auto-addons-required)
+ Dernière version de [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html#kubectl-install-update)
+ Une instance de [NGINX Ingress](https://kubernetes.github.io/ingress-nginx/deploy/#aws) Controller existante
+ (Facultatif) Une [zone hébergée](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) dans Amazon Route 53 pour le transfert de trafic basé sur le DNS

## Architecture
<a name="migrate-nginx-ingress-controller-eks-auto-mode-architecture"></a>

Un *déploiement bleu/vert* est une stratégie de déploiement dans laquelle vous créez deux environnements distincts mais identiques. Blue/green les déploiements offrent des fonctionnalités de lancement et de restauration quasi nulles. L'idée fondamentale est de transférer le trafic entre deux environnements identiques exécutant des versions différentes de votre application.

L'image suivante montre la migration des équilibreurs de charge réseau à partir de deux instances différentes de NGINX Ingress Controller lors de l'activation du mode automatique EKS. Vous utilisez un blue/green déploiement pour transférer le trafic entre les deux équilibreurs de charge réseau.

![\[Utilisation d'une stratégie blue/green de déploiement pour migrer les instances de NGINX Ingress Controller.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/57e8c14f-cb50-4027-8ef6-ce8ea3f2db25/images/211a029a-90d8-4c92-8200-19e54062f936.png)


L'espace de noms d'origine est l'espace de noms *bleu*. C'est ici que s'exécutent le service et l'instance NGINX Ingress Controller d'origine, avant que vous n'activiez le mode automatique EKS. Le service et l'instance d'origine se connectent à un Network Load Balancer dont le nom DNS est configuré dans Route 53. Le [AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.11/) a déployé ce Network Load Balancer dans le cloud privé virtuel (VPC) cible.

Le diagramme montre le flux de travail suivant pour configurer un environnement pour un blue/green déploiement :

1. *Installez et configurez une autre instance de NGINX Ingress Controller dans un espace de noms différent, un espace de noms vert.*

1. Dans Route 53, configurez un nom DNS pour un nouveau Network Load Balancer.

## Outils
<a name="migrate-nginx-ingress-controller-eks-auto-mode-tools"></a>

**Services AWS**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) répartit le trafic applicatif ou réseau entrant sur plusieurs cibles. Par exemple, vous pouvez répartir le trafic entre les instances, les conteneurs et les adresses IP d'Amazon Elastic Compute Cloud (Amazon EC2) dans une ou plusieurs zones de disponibilité.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) est un service Web DNS hautement disponible et évolutif.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d' AWS.

**Autres outils**
+ [Helm](https://helm.sh/) est un gestionnaire de packages open source pour Kubernetes qui vous aide à installer et à gérer des applications sur votre cluster Kubernetes.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) est une interface de ligne de commande qui vous permet d'exécuter des commandes sur des clusters Kubernetes.
+ [Le NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/overview/about/) connecte les applications et les services Kubernetes à la gestion des demandes, à l'authentification, aux ressources personnalisées en libre-service et au débogage.

## Épopées
<a name="migrate-nginx-ingress-controller-eks-auto-mode-epics"></a>

### Passez en revue l'environnement existant
<a name="review-the-existing-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez que l'instance NGINX Ingress Controller d'origine est opérationnelle. | Entrez la commande suivante pour vérifier que les ressources de l'espace de `ingress-nginx` noms sont opérationnelles. Si vous avez déployé NGINX Ingress Controller dans un autre espace de noms, mettez à jour le nom de l'espace de noms dans cette commande.<pre>kubectl get all -n ingress-nginx</pre>Dans le résultat, vérifiez que les pods du NGINX Ingress Controller sont en cours d'exécution. Voici un exemple de résultat :<pre>NAME                                           READY   STATUS      RESTARTS      AGE<br />pod/ingress-nginx-admission-create-xqn9d       0/1     Completed   0             88m<br />pod/ingress-nginx-admission-patch-lhk4j        0/1     Completed   1             88m<br />pod/ingress-nginx-controller-68f68f859-xrz74   1/1     Running     2 (10m ago)   72m<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.67.255    k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com   80:30330/TCP,443:31462/TCP   88m<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.201.176   <none>                                                                          443/TCP                      88m<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           88m<br /><br />NAME                                                 DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-68f68f859   1         1         1       72m<br />replicaset.apps/ingress-nginx-controller-d8c96cf68   0         0         0       88m<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         88m<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         88m</pre> | DevOps ingénieur | 

### Déployez un exemple de HTTPd charge de travail pour utiliser le NGINX Ingress Controller
<a name="deploy-a-sample-httpd-workload-to-use-the-nginx-ingress-controller"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez les ressources Kubernetes. | Entrez les commandes suivantes pour créer un exemple de déploiement, de service et d'entrée Kubernetes :<pre>kubectl create deployment demo --image=httpd --port=80</pre><pre>kubectl expose deployment demo</pre><pre> kubectl create ingress demo --class=nginx \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps ingénieur | 
| Passez en revue les ressources déployées. | Entrez la commande suivante pour afficher la liste des ressources déployées :<pre>kubectl get all,ingress</pre>Dans le résultat, vérifiez que le HTTPd module d'échantillonnage est en cours d'exécution. Voici un exemple de résultat :<pre>NAME                        READY   STATUS    RESTARTS   AGE<br />pod/demo-7d94f8cb4f-q68wc   1/1     Running   0          59m<br /><br />NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE<br />service/demo         ClusterIP   10.100.78.155   <none>        80/TCP    59m<br />service/kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP   117m<br /><br />NAME                   READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/demo   1/1     1            1           59m<br /><br />NAME                              DESIRED   CURRENT   READY   AGE<br />replicaset.apps/demo-7d94f8cb4f   1         1         1       59m<br /><br />NAME                             CLASS   HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />ingress.networking.k8s.io/demo   nginx   nginxautomode.local.dev                k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                 80      56m</pre> | DevOps ingénieur | 
| Vérifiez que le service est accessible. | Entrez la commande suivante pour vérifier que le service est accessible via le nom DNS du Network Load Balancer :<pre>curl -H "Host: nginxautomode.local.dev" http://k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com</pre>Le résultat attendu est le suivant :<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps ingénieur | 
| (Facultatif) Créez un enregistrement DNS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps ingénieur, AWS DevOps | 

### Activer le mode automatique EKS sur le cluster existant
<a name="enable-eks-auto-mode-on-the-existing-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Activez le mode automatique EKS. | Suivez les instructions de la [section Activer le mode automatique EKS sur un cluster existant](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentation Amazon EKS). | AWS DevOps | 

### Installer un nouveau contrôleur d'entrée NGINX
<a name="install-a-new-nginx-ingress-controller"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez une nouvelle instance de NGINX Ingress Controller. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps ingénieur | 
| Déployez la nouvelle instance NGINX Instance Controller. | Entrez la commande suivante pour appliquer le fichier manifeste modifié :<pre>kubectl apply -f deploy.yaml</pre> | DevOps ingénieur | 
| Confirmez le déploiement réussi. | Entrez la commande suivante pour vérifier que les ressources de l'espace de `ingress-nginx-v2` noms sont opérationnelles :<pre>kubectl get all -n ingress-nginx-v2</pre>Dans le résultat, vérifiez que les pods du NGINX Ingress Controller sont en cours d'exécution. Voici un exemple de résultat :<pre>NAME                                            READY   STATUS      RESTARTS   AGE<br />pod/ingress-nginx-admission-create-7shrj        0/1     Completed   0          24s<br />pod/ingress-nginx-admission-patch-vkxr5         0/1     Completed   1          24s<br />pod/ingress-nginx-controller-757bfcbc6d-4fw52   1/1     Running     0          24s<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.208.114   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com   80:31469/TCP,443:30658/TCP   24s<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.150.114   <none>                                                                          443/TCP                      24s<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           24s<br /><br />NAME                                                  DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-757bfcbc6d   1         1         1       24s<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         24s<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         24s</pre> | DevOps ingénieur | 
| Créez une nouvelle entrée pour l'exemple de HTTPd charge de travail. | Entrez la commande suivante pour créer une nouvelle entrée pour l'exemple de HTTPd charge de travail existant :<pre>kubectl create ingress demo-new --class=nginx-v2 \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps ingénieur | 
| Vérifiez que la nouvelle entrée fonctionne. | Entrez la commande suivante pour vérifier que la nouvelle entrée fonctionne :<pre>curl -H "Host: nginxautomode.local.dev" k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com</pre>Le résultat attendu est le suivant :<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps ingénieur | 

### Découper
<a name="cut-over"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Passez au nouvel espace de noms. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | AWS DevOps, DevOps ingénieur | 
| Passez en revue les deux entrées. | Entrez la commande suivante pour passer en revue les deux entrées créées pour l'exemple de HTTPd charge de travail :<pre>kubectl get ingress</pre>Voici un exemple de résultat :<pre>NAME       CLASS      HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />demo       nginx      nginxautomode.local.dev   k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                              80      95m<br />demo-new   nginx-v2   nginxautomode.local.dev   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com                80      33s</pre> | DevOps ingénieur | 

## Ressources connexes
<a name="migrate-nginx-ingress-controller-eks-auto-mode-resources"></a>
+ [Activer le mode automatique EKS sur un cluster existant](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentation Amazon EKS)
+ [Résoudre les problèmes liés aux équilibreurs de charge créés par le contrôleur de service Kubernetes dans Amazon EKS](https://repost.aws/knowledge-center/eks-load-balancers-troubleshooting) (Re:Post Knowledge Center)AWS 
+ [Contrôleur d'entrée NGINX](https://docs.nginx.com/nginx-ingress-controller/) (documentation NGINX)

# Migrez vos charges de travail de conteneurs d'Azure Red Hat OpenShift (ARO) vers Red Hat OpenShift Service on AWS (ROSA)
<a name="migrate-container-workloads-from-aro-to-rosa"></a>

*Naveen Ramasamy, Srikanth Rangavajhala et Gireesh Sreekantan, Amazon Web Services*

## Résumé
<a name="migrate-container-workloads-from-aro-to-rosa-summary"></a>

Ce modèle fournit des step-by-step instructions pour la migration des charges de travail de conteneur d'Azure Red Hat OpenShift (ARO) vers [Red Hat OpenShift Service on AWS (ROSA](https://aws.amazon.com/rosa/)). ROSA est un service Kubernetes géré fourni par Red Hat en collaboration avec. AWS Il vous aide à déployer, à gérer et à faire évoluer vos applications conteneurisées à l'aide de la plateforme Kubernetes et bénéficie de l'expertise de Red Hat en matière de Kubernetes et d'infrastructure. AWS Cloud 

La migration des charges de travail de conteneurs d'ARO, d'autres clouds ou d'un environnement sur site vers ROSA implique le transfert d'applications, de configurations et de données d'une plateforme à une autre. Ce modèle permet d'assurer une transition en douceur tout en optimisant les AWS Cloud services, la sécurité et la rentabilité. Il couvre deux méthodes pour migrer vos charges de travail vers des clusters ROSA : CI/CD et le Migration Toolkit for Containers (MTC).

Ce modèle couvre les deux méthodes. La méthode que vous choisissez dépend de la complexité et de la certitude de votre processus de migration. Si vous contrôlez totalement l'état de votre application et pouvez garantir une configuration cohérente via un pipeline, nous vous recommandons d'utiliser cette CI/CD méthode. Toutefois, si l'état de votre application implique des incertitudes, des changements imprévus ou un écosystème complexe, nous vous recommandons d'utiliser le MTC comme chemin fiable et contrôlé pour migrer votre application et ses données vers un nouveau cluster. Pour une comparaison détaillée des deux méthodes, consultez la section [Informations supplémentaires](#migrate-container-workloads-from-aro-to-rosa-additional).

Avantages de la migration vers ROSA :
+ ROSA s'intègre parfaitement AWS en tant que service natif. Il est facilement accessible par le biais du AWS Management Console et facturé par le biais d'un single Compte AWS. Il offre une compatibilité totale avec les autres Services AWS et fournit un support collaboratif de la part de Red Hat AWS et de Red Hat.
+ ROSA prend en charge les déploiements hybrides et multicloud. Il permet aux applications de s'exécuter de manière cohérente dans les centres de données sur site et dans plusieurs environnements cloud.
+ ROSA bénéficie de l'accent mis par Red Hat sur la sécurité et fournit des fonctionnalités telles que le contrôle d'accès basé sur les rôles (RBAC), la numérisation d'images et les évaluations des vulnérabilités pour garantir un environnement de conteneurs sécurisé.
+ ROSA est conçu pour faire évoluer facilement les applications et propose des options de haute disponibilité. Il permet aux applications de se développer en fonction des besoins tout en préservant leur fiabilité.
+ ROSA automatise et simplifie le déploiement d'un cluster Kubernetes par rapport aux méthodes de configuration et de gestion manuelles. Cela accélère le processus de développement et de déploiement.
+ ROSA bénéficie de AWS Cloud services et assure une intégration parfaite avec des AWS offres telles que les services de base de données, les solutions de stockage et les services de sécurité.

## Conditions préalables et limitations
<a name="migrate-container-workloads-from-aro-to-rosa-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ Autorisations configurées à Services AWS cet effet sur lesquelles ROSA s'appuie pour fournir des fonctionnalités. Pour plus d'informations, consultez la section [Conditions préalables](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html) dans la documentation ROSA.
+ ROSA activé sur la [console ROSA](https://console.aws.amazon.com/rosa). Pour obtenir des instructions, consultez la [documentation ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html#enable-rosa).
+ Le cluster ROSA est installé et configuré. Pour plus d'informations, voir [Commencer avec ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started.html) dans la documentation ROSA. Pour comprendre les différentes méthodes de configuration d'un cluster ROSA, consultez le guide AWS prescriptif sur les stratégies de [mise en œuvre de ROSA](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/).
+ Connectivité réseau établie à partir du réseau local vers AWS le réseau [AWS Direct Connect](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-direct-connect.html)(préféré) ou [AWS Virtual Private Network (Site-to-Site VPN).](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)
+ Une instance Amazon Elastic Compute Cloud (Amazon EC2) ou un autre serveur virtuel pour installer des outils tels que le `aws client` client OpenShift CLI (`oc`), le client ROSA et le binaire Git.

Conditions préalables supplémentaires pour la CI/CD méthode :
+ Accès au serveur Jenkins sur site avec les autorisations nécessaires pour créer un nouveau pipeline, ajouter des stages, ajouter des OpenShift clusters et effectuer des builds.
+ Accès au référentiel Git où le code source de l'application est conservé, avec les autorisations nécessaires pour créer une nouvelle branche Git et effectuer des validations sur la nouvelle branche.

Conditions préalables supplémentaires pour la méthode MTC :
+ Un bucket Amazon Simple Storage Service (Amazon S3), qui sera utilisé comme référentiel de réplication.
+ Accès administratif au cluster ARO source. Cela est nécessaire pour configurer la connexion MTC.

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

## Architecture
<a name="migrate-container-workloads-from-aro-to-rosa-architecture"></a>

ROSA propose trois modèles de déploiement réseau : public, privé et [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html). PrivateLinkpermet aux équipes d'ingénierie de fiabilité des sites (SRE) de Red Hat de gérer le cluster en utilisant un sous-réseau privé connecté au PrivateLink point de terminaison du cluster dans un VPC existant.

Le choix de PrivateLink cette option permet d'obtenir la configuration la plus sécurisée. C'est pourquoi nous le recommandons pour les charges de travail sensibles ou pour les exigences de conformité strictes. Pour plus d'informations sur les options de déploiement sur les réseaux publics et privés, consultez la [ OpenShift documentation Red Hat](https://docs.openshift.com/rosa/architecture/rosa-architecture-models.html#rosa-hcp-architecture_rosa-architecture-models).

**Important**  
Vous ne pouvez créer un PrivateLink cluster qu'au moment de l'installation. Vous ne pouvez pas modifier un cluster à utiliser PrivateLink après l'installation.

Le schéma suivant illustre l' PrivateLink architecture d'un cluster ROSA utilisé pour se connecter Direct Connect aux environnements sur site et ARO.

![\[Cluster ROSA qui utilise AWS Direct Connect et AWS PrivateLink.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/eff9b017-6fc7-4874-b610-849a42071ef4.png)


**AWS autorisations pour ROSA**

Pour obtenir AWS des autorisations sur ROSA, nous vous recommandons d'utiliser AWS Security Token Service (AWS STS) avec des jetons dynamiques de courte durée. Cette méthode utilise des rôles et des politiques prédéfinis de moindre privilège pour accorder à ROSA des autorisations minimales pour opérer dans le Compte AWS, et prend en charge l'installation, le plan de contrôle et les fonctionnalités de calcul de ROSA.

**Redéploiement du pipeline CI/CD**

CI/CD pipeline redeployment is the recommended method for users who have a mature CI/CDoléoduc. Lorsque vous choisissez cette option, vous pouvez utiliser n'importe quelle [stratégie de DevOps déploiement](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/deployment-strategies.html) pour transférer progressivement la charge de votre application vers des déploiements sur ROSA.

**Note**  
Ce modèle suppose un cas d'utilisation courant dans lequel vous disposez d'un pipeline Git, JFrog Artifactory et Jenkins sur site. Cette approche nécessite que vous établissiez une connectivité réseau entre votre réseau sur site et AWS via Direct Connect, et que vous configuriez le cluster ROSA avant de suivre les instructions de la section [Epics](#migrate-container-workloads-from-aro-to-rosa-epics). Consultez la section [Conditions préalables](#migrate-container-workloads-from-aro-to-rosa-prereqs) pour plus de détails.

Le schéma suivant montre le flux de travail de cette méthode.

![\[Migration de conteneurs d'ARO vers ROSA à l'aide de la CI/CD méthode.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/f658590e-fbd9-4297-a02c-0b516694d436.png)


**Méthode MTC**

Vous pouvez utiliser le [kit de migration pour les conteneurs (MTC)](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html) pour**** migrer vos charges de travail conteneurisées entre différents environnements Kubernetes, tels que d'ARO à ROSA. MTC simplifie le processus de migration en automatisant plusieurs tâches clés et en fournissant un cadre complet pour gérer le cycle de vie de la migration.

Le schéma suivant montre le flux de travail de cette méthode.

![\[Migration de conteneurs d'ARO vers ROSA à l'aide de la méthode MTC.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/979bbc7b-2e39-4dd1-b4f0-ea1032880a38.png)


## Outils
<a name="migrate-container-workloads-from-aro-to-rosa-tools"></a>

**Services AWS**
+ [AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html)est un service de transfert et de découverte de données en ligne qui vous permet de déplacer des fichiers ou des données d'objets vers, depuis et entre les services AWS de stockage.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)relie votre réseau interne à un Direct Connect emplacement via un câble à fibre optique Ethernet standard. Grâce à cette connexion, vous pouvez créer des interfaces virtuelles directement destinées au public Services AWS tout en contournant les fournisseurs de services Internet sur votre chemin réseau.
+ [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.
+ [Red Hat OpenShift Service on AWS (ROSA)](https://docs.aws.amazon.com/rosa/latest/userguide/what-is-rosa.html) est un service géré qui aide les OpenShift utilisateurs de Red Hat à créer, à faire évoluer et à gérer des applications conteneurisées sur. AWS
+ [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) vous permet de demander des informations d'identification temporaires à privilèges limités pour les utilisateurs.

**Autres outils**
+ Le [Migration Toolkit for Containers (MTC)](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html) fournit une console et une API pour la migration d'applications conteneurisées d'ARO vers ROSA.

## Bonnes pratiques
<a name="migrate-container-workloads-from-aro-to-rosa-best-practices"></a>
+ Pour des [raisons de résilience](https://docs.aws.amazon.com/ROSA/latest/userguide/disaster-recovery-resiliency.html) et si vous avez des charges de travail de conformité en matière de sécurité, configurez un cluster ROSA multi-AZ qui utilise. PrivateLink Pour plus d'informations, consultez la [documentation ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started-classic-private-link.html).
**Note**  
PrivateLink ne peut pas être configuré après l'installation.
+ Le compartiment S3 que vous utilisez pour le référentiel de réplication ne doit pas être public. Utilisez les politiques de compartiment S3 appropriées pour restreindre l'accès.
+ Si vous choisissez la méthode MTC, utilisez l'option de migration par **étapes** pour réduire la période d'indisponibilité pendant le passage.
+ Passez en revue vos quotas de service avant et après le provisionnement du cluster ROSA. Si nécessaire, demandez une augmentation de quota en fonction de vos besoins. Pour de plus amples informations, veuillez consulter la [documentation sur les quotas de service](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html).
+ Consultez les [directives de sécurité ROSA et mettez](https://docs.aws.amazon.com/ROSA/latest/userguide/security.html) en œuvre les meilleures pratiques en matière de sécurité.
+ Nous vous recommandons de supprimer l'administrateur de cluster par défaut après l'installation. Pour plus d'informations, consultez la [ OpenShift documentation Red Hat](https://docs.openshift.com/container-platform/4.13/post_installation_configuration/cluster-tasks.html).
+ Utilisez le dimensionnement automatique du pool de machines pour réduire les nœuds de travail inutilisés dans le cluster ROSA afin d'optimiser les coûts. Pour plus d'informations, consultez l'[atelier ROSA](https://catalog.workshops.aws/aws-openshift-workshop/en-US/5-nodes-storage/3-autoscale-machine-pool).
+ Utilisez le service Red Hat Cost Management pour OpenShift Container Platform afin de mieux comprendre et suivre les coûts des clouds et des conteneurs. Pour plus d'informations, consultez l'[atelier ROSA](https://catalog.workshops.aws/aws-openshift-workshop/en-US/10-cost-management).
+ Surveillez et auditez les services et applications d'infrastructure du cluster ROSA en utilisant Services AWS. Pour plus d'informations, consultez l'[atelier ROSA](https://catalog.workshops.aws/aws-openshift-workshop/en-US/8-observability).

## Épopées
<a name="migrate-container-workloads-from-aro-to-rosa-epics"></a>

### Option 1 : utiliser un CI/CD pipeline
<a name="option-1-use-a-ci-cd-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez le nouveau cluster ROSA à Jenkins. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrateur AWS, administrateur système AWS, AWS DevOps | 
| Ajoutez le `oc` client à vos nœuds Jenkins. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrateur AWS, administrateur système AWS, AWS DevOps | 
| Créez une nouvelle branche Git. | Créez une nouvelle branche dans votre dépôt Git pour`rosa-dev`. Cette branche sépare les modifications de code ou de paramètres de configuration pour ROSA de votre pipeline existant. | AWS DevOps | 
| Images de tags pour ROSA. | Au cours de votre phase de création, utilisez une autre balise pour identifier les images créées à partir du pipeline ROSA. | Administrateur AWS, administrateur système AWS, AWS DevOps | 
| Créez un pipeline. | Créez un nouveau pipeline Jenkins similaire à votre pipeline existant. Pour ce pipeline, utilisez la branche `rosa-dev` Git que vous avez créée précédemment et assurez-vous d'inclure les étapes de validation, de numérisation du code et de compilation Git identiques à celles de votre pipeline existant. | Administrateur AWS, administrateur système AWS, AWS DevOps | 
| Ajoutez une phase de déploiement ROSA. | Dans le nouveau pipeline, ajoutez une étape à déployer sur le cluster ROSA et référencez le cluster ROSA que vous avez ajouté à la configuration globale de Jenkins. | Administrateur AWS, AWS DevOps, administrateur système AWS | 
| Commencez une nouvelle construction. | Dans Jenkins, sélectionnez votre pipeline et choisissez **Construire maintenant**, ou lancez une nouvelle construction en validant une modification de la `rosa-dev` branche dans Git. | Administrateur AWS, AWS DevOps, administrateur système AWS | 
| Vérifier le déploiement. | Utilisez la commande **oc** ou la [console ROSA](https://console.aws.amazon.com/rosa) pour vérifier que l'application a été déployée sur votre cluster ROSA cible. | Administrateur AWS, AWS DevOps, administrateur système AWS | 
| Copiez les données dans le cluster cible. | Pour les charges de travail dynamiques, copiez les données du cluster source vers le cluster cible à l'aide AWS DataSync d'utilitaires open source tels que **rsync**, ou vous pouvez utiliser la méthode MTC. Pour plus d’informations, consultez la [documentation AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html). | Administrateur AWS, AWS DevOps, administrateur système AWS | 
| Testez votre application. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrateur AWS, AWS DevOps, administrateur système AWS | 
| Découpez. | Si vos tests sont réussis, utilisez la politique Amazon Route 53 appropriée pour déplacer le trafic de l'application hébergée par ARO vers l'application hébergée par Rosa. Lorsque vous aurez terminé cette étape, la charge de travail de votre application sera entièrement transférée vers le cluster ROSA. | Administrateur AWS, administrateur système AWS | 

### Option 2 : utiliser le MTC
<a name="option-2-use-mtc"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez l'opérateur MTC. | Installez l'opérateur MTC sur les clusters ARO et ROSA :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrateur AWS, AWS DevOps, administrateur système AWS | 
| Configurez le trafic réseau vers le référentiel de réplication. | Si vous utilisez un serveur proxy, configurez-le pour autoriser le trafic réseau entre le référentiel de réplication et les clusters. Le référentiel de réplication est un objet de stockage intermédiaire que MTC utilise pour migrer les données. Les clusters source et cible doivent disposer d'un accès réseau au référentiel de réplication pendant la migration. | Administrateur AWS, AWS DevOps, administrateur système AWS | 
| Ajoutez le cluster source au MTC. | Sur la console Web MTC, ajoutez le cluster source ARO. | Administrateur AWS, AWS DevOps, administrateur système AWS | 
| Ajoutez Amazon S3 comme référentiel de réplication. | Sur la console Web MTC, ajoutez le compartiment Amazon S3 (voir [Conditions préalables](#migrate-container-workloads-from-aro-to-rosa-prereqs)) en tant que référentiel de réplication. | Administrateur AWS, AWS DevOps, administrateur système AWS | 
| Créez un plan de migration. | Sur la console Web MTC, créez un plan de migration et spécifiez le type de transfert de données comme **Copy**. Cela indiquera à MTC de copier les données du cluster source (ARO) vers le compartiment S3, et du compartiment vers le cluster cible (ROSA). | Administrateur AWS, AWS DevOps, administrateur système AWS | 
| Exécutez le plan de migration. | Exécutez le plan de migration à l'aide de l'**option Stage** ou **Cutover** :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrateur AWS, AWS DevOps, administrateur système AWS | 

## Résolution des problèmes
<a name="migrate-container-workloads-from-aro-to-rosa-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Problèmes de connectivité | Lorsque vous migrez vos charges de travail de conteneurs d'ARO vers ROSA, vous pouvez rencontrer des problèmes de connectivité qui doivent être résolus pour garantir une migration réussie. Pour résoudre ces problèmes de connectivité (répertoriés dans ce tableau) lors de la migration, une planification méticuleuse, une coordination avec votre réseau et vos équipes de sécurité, ainsi que des tests approfondis sont essentiels. La mise en œuvre d'une stratégie de migration progressive et la vérification de la connectivité à chaque étape permettront de minimiser les perturbations potentielles et d'assurer une transition harmonieuse d'ARO à ROSA. | 
| Différences de configuration réseau | ARO et ROSA peuvent présenter des variations dans leurs configurations réseau, telles que les paramètres du réseau virtuel (VNet), les sous-réseaux et les politiques réseau. Pour une communication correcte entre les services, assurez-vous que les paramètres réseau correspondent aux deux plateformes. | 
| Règles de groupe de sécurité et de pare-feu | ROSA et ARO peuvent avoir des paramètres de groupe de sécurité et de pare-feu par défaut différents. Assurez-vous d'ajuster et de mettre à jour ces règles pour autoriser le trafic nécessaire au maintien de la connectivité entre les conteneurs et les services pendant la migration.  | 
| Modifications d'adresse IP et de DNS | Lorsque vous migrez des charges de travail, les adresses IP et les noms DNS peuvent changer. Reconfigurez les applications qui s'appuient sur des noms DNS statiques IPs ou spécifiques.  | 
| Accès aux services externes | Si votre application dépend de services externes tels que des bases de données APIs, vous devrez peut-être mettre à jour leurs paramètres de connexion pour vous assurer qu'ils peuvent communiquer avec les nouveaux services de ROSA. | 
| Configuration d'Azure Private Link | Si vous utilisez Azure Private Link ou des services de point de terminaison privés dans ARO, vous devrez configurer les fonctionnalités équivalentes dans ROSA pour garantir une connectivité privée entre les ressources. | 
| Site-to-Site VPN ou Direct Connect configuration  | S'il existe des Direct Connect connexions Site-to-Site VPN ou des connexions entre votre réseau local et ARO, vous devrez établir des connexions similaires avec ROSA pour une communication ininterrompue avec vos ressources locales. | 
| Paramètres d'entrée et d'équilibrage de charge | Les configurations des contrôleurs d'entrée et des équilibreurs de charge peuvent différer entre ARO et ROSA. Reconfigurez ces paramètres pour conserver l'accès externe à vos services. | 
| Gestion des certificats et du protocole TLS | Si vos applications utilisent des certificats SSL ou TLS, assurez-vous que les certificats sont valides et correctement configurés dans ROSA. | 
| Accès au registre des conteneurs | Si vos conteneurs sont hébergés dans un registre de conteneurs externe, configurez l'authentification et les autorisations d'accès appropriées pour ROSA. | 
| Surveillance et journalisation | Mettez à jour les configurations de surveillance et de journalisation pour tenir compte de la nouvelle infrastructure de ROSA afin que vous puissiez continuer à surveiller efficacement l'état et les performances de vos conteneurs. | 

## Ressources connexes
<a name="migrate-container-workloads-from-aro-to-rosa-resources"></a>

**AWS****références**
+ [Qu'est-ce que c'est Red Hat OpenShift Service on AWS ?](https://docs.aws.amazon.com/ROSA/latest/userguide/what-is-rosa.html) (documentation ROSA)
+ [Commencez avec ROSA](https://docs.aws.amazon.com/ROSA/latest/userguide/getting-started.html) (documentation ROSA)
+ [Red Hat OpenShift Service on AWS stratégies de mise en œuvre](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/) (AWS directives prescriptives)
+ [Red Hat OpenShift Service on AWS Now GA](https://aws.amazon.com/blogs/aws/red-hat-openshift-service-on-aws-now-generally-availably/) (article de AWS blog)
+ [Atelier ROSA](https://catalog.workshops.aws/aws-openshift-workshop/en-US/0-introduction)
+ [FAQ SUR ROSA](https://aws.amazon.com/rosa/faqs/)
+ [FAQ sur l'atelier ROSA](https://www.rosaworkshop.io/rosa/14-faq/)
+ [Tarifs ROSA](https://aws.amazon.com/rosa/pricing/)

** OpenShift Documentation Red Hat**
+ [Installation rapide d'un cluster sur AWS](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-default.html)
+ [Installation d'un cluster AWS sur un réseau restreint](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws-installer-provisioned.html)
+ [Installation d'un cluster AWS dans un VPC existant](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-vpc.html)
+ [Installation d'un cluster sur une infrastructure provisionnée par l'utilisateur à l'aide de AWS modèles CloudFormation ](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-user-infra.html)
+ [Installation d'un cluster sur AWS un réseau restreint avec une infrastructure provisionnée par l'utilisateur](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws.html)
+ [Installation d'un cluster AWS avec des personnalisations](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-customizations.html)
+ [Commencer à utiliser la OpenShift CLI](https://docs.openshift.com/container-platform/4.13/cli_reference/openshift_cli/getting-started-cli.html)

## Informations supplémentaires
<a name="migrate-container-workloads-from-aro-to-rosa-additional"></a>

**Choix entre les options de redéploiement du MTC et CI/CD du pipeline**

La migration d'applications d'un OpenShift cluster à un autre nécessite un examen attentif. Idéalement, vous souhaiteriez une transition fluide en utilisant un CI/CD pipeline pour redéployer l'application et gérer la migration des données de volume persistantes. Cependant, dans la pratique, une application en cours d'exécution sur un cluster est susceptible de subir des changements imprévus au fil du temps. Ces modifications peuvent entraîner une déviation progressive de l'application par rapport à son état de déploiement initial. MTC propose une solution pour les scénarios dans lesquels le contenu exact d'un espace de noms est incertain et où une migration fluide de tous les composants de l'application vers un nouveau cluster est importante.

Pour faire le bon choix, il faut évaluer votre scénario spécifique et évaluer les avantages de chaque approche. Ce faisant, vous pouvez garantir une migration réussie et fluide qui correspond à vos besoins et à vos priorités. Voici des directives supplémentaires pour choisir entre les deux options.

**Redéploiement du pipeline CI/CD**

La méthode du CI/CD pipeline est l'approche recommandée si votre application peut être redéployée en toute confiance à l'aide d'un pipeline. Cela garantit que la migration est contrôlée, prévisible et alignée sur vos pratiques de déploiement existantes. Lorsque vous choisissez cette méthode, vous pouvez utiliser des stratégies de [déploiement bleu/vert](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html) ou Canary pour transférer progressivement la charge vers les déploiements sur ROSA. Pour ce scénario, ce modèle suppose que Jenkins orchestre les déploiements d'applications à partir de l'environnement sur site.

Avantages :
+ Vous n'avez pas besoin d'un accès administratif au cluster ARO source ni de déployer d'opérateurs sur le cluster source ou de destination.
+ Cette approche vous permet de changer de trafic progressivement en utilisant une DevOps stratégie.

Inconvénients :
+ Il faut déployer davantage d'efforts pour tester les fonctionnalités de votre application.
+ Si votre application contient des données persistantes, des étapes supplémentaires sont nécessaires pour copier les données à l'aide AWS DataSync d'autres outils.

**Migration MTC**

Dans le monde réel, les applications en cours d'exécution peuvent subir des modifications imprévues qui les éloignent du déploiement initial. Choisissez l'option MTC lorsque vous n'êtes pas sûr de l'état actuel de votre application sur le cluster source. Par exemple, si votre écosystème d'applications couvre différents composants, configurations et volumes de stockage de données, nous vous recommandons de choisir MTC pour garantir une migration complète couvrant l'application et l'ensemble de son environnement.

Avantages :
+ MTC fournit une sauvegarde et une restauration complètes de la charge de travail.
+ Il copiera les données persistantes de la source vers la cible lors de la migration de la charge de travail.
+ Il ne nécessite pas d'accès au référentiel du code source.

Inconvénients :
+ Vous devez disposer de privilèges administratifs pour installer l'opérateur MTC sur les clusters source et de destination.
+ L' DevOps équipe a besoin d'une formation pour utiliser l'outil MTC et effectuer des migrations. 

# Exécutez des tâches Amazon ECS sur Amazon WorkSpaces avec Amazon ECS Anywhere
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere"></a>

*Akash Kumar, Amazon Web Services*

## Résumé
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-summary"></a>

Amazon Elastic Container Service (Amazon ECS) Anywhere prend en charge le déploiement de tâches Amazon ECS dans n'importe quel environnement, y compris l'infrastructure gérée par Amazon Web Services (AWS) et l'infrastructure gérée par le client. Vous pouvez le faire en utilisant un plan de contrôle entièrement géré par AWS, exécuté dans le cloud et toujours à jour. 

Les entreprises utilisent souvent Amazon WorkSpaces pour développer des applications basées sur des conteneurs. Cela a nécessité Amazon Elastic Compute Cloud (Amazon EC2) ou AWS Fargate avec un cluster Amazon ECS pour tester et exécuter des tâches ECS. Désormais, en utilisant Amazon ECS Anywhere, vous pouvez ajouter Amazon WorkSpaces en tant qu'instances externes directement à un cluster ECS, et vous pouvez exécuter vos tâches directement. Cela réduit votre temps de développement, car vous pouvez tester votre conteneur avec un cluster ECS localement sur Amazon WorkSpaces. Vous pouvez également économiser sur le coût d'utilisation EC2 des instances Fargate pour tester vos applications de conteneurs.

Ce modèle montre comment déployer des tâches ECS sur Amazon WorkSpaces avec Amazon ECS Anywhere. Il configure le cluster ECS et utilise AWS Directory Service Simple AD pour lancer le WorkSpaces. Ensuite, l'exemple de tâche ECS lance NGINX dans le. WorkSpaces

## Conditions préalables et limitations
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-prereqs"></a>
+ Un compte AWS actif
+ Interface de ligne de commande AWS (AWS CLI)
+ Informations d'identification AWS [configurées sur votre machine](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)

## Architecture
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-architecture"></a>

**Pile technologique cible**
+ Un cloud privé virtuel (VPC)
+ Un cluster Amazon ECS
+ Amazon WorkSpaces
+ AWS Directory Service avec Simple AD

**Architecture cible**

![\[ECS Anywhere configure le cluster ECS et utilise Simple AD pour le lancer WorkSpaces.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/da8b2249-3423-485c-9fef-6f902025e969/images/fd354d14-f29b-4b9e-8f1a-c3cb7ed4d6bf.png)


 

L'architecture inclut les services et ressources suivants :
+ Un cluster ECS avec des sous-réseaux publics et privés dans un VPC personnalisé
+ Simple AD dans le VPC pour permettre aux utilisateurs d'accéder à Amazon WorkSpaces
+ Amazon WorkSpaces provisionné dans le VPC à l'aide de Simple AD
+ AWS Systems Manager est activé pour ajouter Amazon en WorkSpaces tant qu'instances gérées
+ À l'aide d'Amazon ECS et d'AWS Systems Manager Agent (agent SSM), Amazon WorkSpaces a ajouté à Systems Manager et au cluster ECS
+ Exemple de tâche ECS à exécuter WorkSpaces dans le cluster ECS

## Outils
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-tools"></a>
+ [AWS Directory Service Simple Active Directory (Simple AD)](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_simple_ad.html) est un annuaire géré autonome alimenté par un serveur compatible Samba 4 Active Directory. Simple AD fournit un sous-ensemble des fonctionnalités proposées par AWS Managed Microsoft AD, notamment la possibilité de gérer les utilisateurs et de se connecter en toute sécurité aux EC2 instances Amazon.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) est un service de gestion de conteneurs évolutif et rapide, qui facilite l'exécution, l'arrêt et la gestion de conteneurs Docker sur un cluster.
+ [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 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 cloud AWS. 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 ressources AWS en toute sécurité à grande échelle.
+ [Amazon](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html) vous WorkSpaces aide à fournir des postes de travail Microsoft Windows ou Amazon Linux virtuels basés sur le cloud pour vos utilisateurs, connus sous *WorkSpaces*le nom de. WorkSpaces élimine le besoin d'acheter et de déployer du matériel ou d'installer des logiciels complexes.

## Épopées
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-epics"></a>

### Configuration du cluster ECS
<a name="set-up-the-ecs-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez et configurez le cluster ECS. | Pour créer le cluster ECS, suivez les instructions de la [documentation AWS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html), notamment les étapes suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.html) | Architecte du cloud | 

### Lancez Amazon WorkSpaces
<a name="launch-amazon-workspaces"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez Simple AD et lancez Amazon WorkSpaces. | Pour configurer un répertoire Simple AD pour votre VPC nouvellement créé et lancer Amazon WorkSpaces, suivez les instructions de la documentation [AWS](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html). | Architecte du cloud | 

### Configuration d'AWS Systems Manager pour un environnement hybride
<a name="set-up-aws-systems-manager-for-a-hybrid-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Téléchargez les scripts joints. | Sur votre ordinateur local, téléchargez les `ssm-activation.json` fichiers `ssm-trust-policy.json` et qui se trouvent dans la section *Pièces jointes*. | Architecte du cloud | 
| Ajoutez le rôle IAM. | Ajoutez des variables d'environnement en fonction des besoins de votre entreprise.<pre>export AWS_DEFAULT_REGION=${AWS_REGION_ID}<br />export ROLE_NAME=${ECS_TASK_ROLE}<br />export CLUSTER_NAME=${ECS_CLUSTER_NAME}<br />export SERVICE_NAME=${ECS_CLUSTER_SERVICE_NAME}</pre>Exécutez la commande suivante.<pre>aws iam create-role --role-name $ROLE_NAME --assume-role-policy-document file://ssm-trust-policy.json</pre> | Architecte du cloud | 
| Ajoutez la SSMManaged InstanceCore politique Amazon au rôle IAM. | Exécutez la commande suivante.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore</pre> | Architecte du cloud | 
| Ajoutez la politique Amazon EC2 ContainerServicefor EC2 Role au rôle IAM. | Exécutez la commande suivante.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role</pre> | Architecte du cloud | 
| Vérifiez le rôle IAM. | Pour vérifier le rôle IAM, exécutez la commande suivante.<pre>aws iam list-attached-role-policies --role-name $ROLE_NAME</pre> | Architecte du cloud | 
| Activez Systems Manager. | Exécutez la commande suivante.<pre>aws ssm create-activation --iam-role $ROLE_NAME | tee ssm-activation.json</pre> | Architecte du cloud | 

### Ajouter WorkSpaces au cluster ECS
<a name="add-workspaces-to-the-ecs-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
|  Connect à votre WorkSpaces. | Pour vous connecter à vos espaces de travail et les configurer, suivez les instructions de la [documentation AWS](https://docs.aws.amazon.com/workspaces/latest/userguide/workspaces-user-getting-started.html). | Développeur d’applications | 
| Téléchargez le script d'installation ecs-anywhere. | À l’invite de commande, exécutez la commande suivante.<pre>curl -o "ecs-anywhere-install.sh" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh" && sudo chmod +x ecs-anywhere-install.sh</pre> | Développeur d’applications | 
| Vérifiez l'intégrité du script shell. | (Facultatif) Exécutez la commande suivante.<pre>curl -o "ecs-anywhere-install.sh.sha256" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh.sha256" && sha256sum -c ecs-anywhere-install.sh.sha256<br /><br /><br /></pre> | Développeur d’applications | 
| Ajoutez un référentiel EPEL sur Amazon Linux. | Pour ajouter un référentiel EPEL (Extra Packages for Enterprise Linux), exécutez la commande`sudo amazon-linux-extras install epel -y`. | Développeur d’applications | 
| Installez Amazon ECS Anywhere. | Pour exécuter le script d'installation, utilisez la commande suivante.<pre>sudo ./ecs-anywhere-install.sh --cluster $CLUSTER_NAME --activation-id $ACTIVATION_ID --activation-code $ACTIVATION_CODE --region $AWS_REGION<br /><br /><br /></pre> |  | 
| Vérifiez les informations d'instance depuis le cluster ECS. | Pour vérifier les informations relatives à l'instance de cluster Systems Manager et ECS et valider WorkSpaces celles qui ont été ajoutées au cluster, exécutez la commande suivante depuis votre ordinateur local.<pre>aws ssm describe-instance-information" && "aws ecs list-container-instances --cluster $CLUSTER_NAME</pre> | Développeur d’applications | 

### Ajoutez une tâche ECS pour le WorkSpaces
<a name="add-an-ecs-task-for-the-workspaces"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un rôle IAM d'exécution de tâches. | Téléchargez `task-execution-assume-role.json` et `external-task-definition.json` depuis la section *Pièces jointes*. Sur votre ordinateur local, exécutez la commande suivante.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json</pre> | Architecte du cloud | 
| Ajoutez la politique au rôle d'exécution. | Exécutez la commande suivante.<pre>aws iam --region $AWS_DEFAULT_REGION attach-role-policy --role-name $ECS_TASK_EXECUTION_ROLE --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy</pre> | Architecte du cloud | 
| Créez un rôle de tâche. | Exécutez la commande suivante.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json<br /><br /><br /></pre> | Architecte du cloud | 
| Enregistrez la définition de tâche dans le cluster. | Sur votre ordinateur local, exécutez la commande suivante.<pre>aws ecs register-task-definition --cli-input-json file://external-task-definition.json</pre> | Architecte du cloud | 
| Exécutez la tâche. | Sur votre ordinateur local, exécutez la commande suivante.<pre>aws ecs run-task --cluster $CLUSTER_NAME --launch-type EXTERNAL --task-definition nginx</pre> | Architecte du cloud | 
| Validez l'état d'exécution de la tâche. | Pour récupérer l'ID de tâche, exécutez la commande suivante.<pre>export TEST_TASKID=$(aws ecs list-tasks --cluster $CLUSTER_NAME | jq -r '.taskArns[0]')</pre>À l'aide de l'ID de tâche, exécutez la commande suivante.<pre>aws ecs describe-tasks --cluster $CLUSTER_NAME --tasks ${TEST_TASKID}</pre> | Architecte du cloud | 
| Vérifiez la tâche sur le WorkSpace. | Pour vérifier que NGINX s'exécute sur le WorkSpace, exécutez la commande. ` curl http://localhost:8080` | Développeur d’applications | 

## Ressources connexes
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-resources"></a>
+ [clusters ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Configuration d'un environnement hybride](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html)
+ [Amazon WorkSpaces](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html)
+ [Simple AD](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html)

## Pièces jointes
<a name="attachments-da8b2249-3423-485c-9fef-6f902025e969"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/da8b2249-3423-485c-9fef-6f902025e969/attachments/attachment.zip)

# Exécuter un conteneur Docker d'API Web ASP.NET Core sur une instance Amazon Linux EC2
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance"></a>

*Vijai Anand Ramalingam et Sreelaxmi Pai, Amazon Web Services*

## Résumé
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-summary"></a>

Ce modèle s'adresse aux personnes qui commencent à conteneuriser leurs applications sur le cloud Amazon Web Services (AWS). Lorsque vous commencez à conteneuriser des applications dans le cloud, aucune plateforme d'orchestration de conteneurs n'est généralement configurée. Ce modèle vous permet de configurer rapidement une infrastructure sur AWS pour tester vos applications conteneurisées sans avoir besoin d'une infrastructure d'orchestration de conteneurs élaborée.

La première étape du processus de modernisation consiste à transformer l'application. S'il s'agit d'une ancienne application .NET Framework, vous devez d'abord remplacer le moteur d'exécution par ASP.NET Core. Ensuite, procédez comme suit :
+ Création de l'image du conteneur Docker
+ Exécutez le conteneur Docker à l'aide de l'image créée
+ Validez l'application avant de la déployer sur une plateforme d'orchestration de conteneurs, telle qu'Amazon Elastic Container Service (Amazon ECS) ou Amazon Elastic Kubernetes Service (Amazon EKS). 

Ce modèle couvre les aspects liés à la création, à l'exécution et à la validation du développement d'applications modernes sur une instance Linux Amazon Elastic Compute Cloud (Amazon EC2).

## Conditions préalables et limitations
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-prereqs"></a>

**Conditions préalables**
+ Un [compte Amazon Web Services (AWS)](https://aws.amazon.com/account/) actif
+ Un [rôle AWS Identity and Access Management (IAM) avec un](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) accès suffisant pour créer des ressources AWS correspondant à ce modèle 
+ [Visual Studio Community 2022](https://visualstudio.microsoft.com/downloads/) ou version ultérieure téléchargé et installé
+ Un projet .NET Framework modernisé vers ASP.NET Core
+ Un GitHub référentiel

**Versions du produit**
+ Visual Studio Community 2022 ou version ultérieure

## Architecture
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-architecture"></a>

**Architecture cible**

Ce modèle utilise un [ CloudFormation modèle AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) pour créer l'architecture hautement disponible illustrée dans le schéma suivant. Une instance Amazon EC2 Linux est lancée dans un sous-réseau privé. Le gestionnaire de session AWS Systems Manager est utilisé pour accéder à l'instance privée Amazon EC2 Linux et pour tester l'API exécutée dans le conteneur Docker.

![\[Un utilisateur accédant à l'instance Amazon EC2 Linux et testant l'API exécutée dans le conteneur Docker.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/512e61b2-10ba-43be-bbd8-2bdc597c3de3/images/9c5206f6-32b1-47be-9037-360c0bff713c.png)


1. Accès à l'instance Linux via le gestionnaire de session

## Outils
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-tools"></a>

**Services AWS**
+ Interface de [ligne de commande AWS — L'](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)interface de ligne de commande AWS (AWS CLI) est un outil open source permettant d'interagir avec les services AWS via des commandes dans votre shell de ligne de commande. Avec une configuration minimale, vous pouvez exécuter des commandes de l'interface de ligne de commande AWS qui mettent en œuvre des fonctionnalités équivalentes à celles fournies par la console de gestion AWS basée sur un navigateur.
+ [AWS Management Console](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/learn-whats-new.html) — L'AWS Management Console est une application Web qui comprend et fait référence à une vaste collection de consoles de service pour la gestion des ressources AWS. Lors de votre première connexion, vous accédez à la page d’accueil de la console. La page d'accueil donne accès à chaque console de service et propose un emplacement unique pour accéder aux informations dont vous avez besoin pour effectuer vos tâches liées à AWS.
+ Gestionnaire de [session AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) — Le gestionnaire de session est une fonctionnalité AWS Systems Manager entièrement gérée. Avec Session Manager, vous pouvez gérer vos instances Amazon Elastic Compute Cloud (Amazon EC2). Le gestionnaire de session fournit une gestion des nœuds sécurisée et vérifiable sans qu'il soit nécessaire d'ouvrir les ports entrants, de gérer les hôtes Bastion ou de gérer les clés SSH.

**Autres outils**
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/) — Visual Studio 2022 est un environnement de développement intégré (IDE).
+ [Docker](https://www.docker.com/) — Docker 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.

**Code**

```
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
 WORKDIR /app
EXPOSE 80
EXPOSE 443
 
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj", "DemoNetCoreWebAPI/"]
RUN dotnet restore "DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj"
COPY . .
WORKDIR "/src/DemoNetCoreWebAPI"
RUN dotnet build "DemoNetCoreWebAPI.csproj" -c Release -o /app/build
 
FROM build AS publish
RUN dotnet publish "DemoNetCoreWebAPI.csproj" -c Release -o /app/publish
 
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DemoNetCoreWebAPI.dll"]
```

## Épopées
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-epics"></a>

### Développement de l'API Web ASP.NET Core
<a name="develop-the-asp-net-core-web-api"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un exemple d'API Web ASP.NET Core à l'aide de Visual Studio. | Pour créer un exemple d'API Web ASP.NET Core, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Développeur d’applications | 
| Créez un fichier Dockerfile. | Pour créer un Dockerfile, effectuez l'une des opérations suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Pour appliquer les modifications à votre GitHub dépôt, exécutez la commande suivante.<pre>git add --all<br />git commit -m "Dockerfile added"<br />git push</pre> | Développeur d’applications | 

### Configuration de l'instance Amazon EC2 Linux
<a name="set-up-the-amazon-ec2-linux-instance"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez l'infrastructure. | Lancez le [ CloudFormation modèle AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) pour créer l'infrastructure, qui inclut les éléments suivants : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Pour en savoir plus sur l'accès à une EC2 instance Amazon privée à l'aide du gestionnaire de session sans avoir besoin d'un hôte bastion, consultez le billet de [blog Toward a bastion-less world](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/). | Développeur d'applications, administrateur AWS, AWS DevOps | 
| Connectez-vous à l'instance Amazon EC2 Linux. | Pour vous connecter à l'instance Amazon EC2 Linux dans le sous-réseau privé, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Développeur d’applications | 
| Installez et démarrez Docker. | Pour installer et démarrer Docker dans l'instance Amazon EC2 Linux, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Développeur d'applications, administrateur AWS, AWS DevOps | 
| Installez Git et clonez le dépôt. | Pour installer Git sur l'instance Amazon EC2 Linux et cloner le référentiel à partir de GitHub celui-ci, procédez comme suit.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Développeur d'applications, administrateur AWS, AWS DevOps | 
| Créez et exécutez le conteneur Docker. | Pour créer l'image Docker et exécuter le conteneur dans l'instance Amazon EC2 Linux, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Développeur d'applications, administrateur AWS, AWS DevOps | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez l'API Web à l'aide de la commande curl. | Pour tester l'API Web, exécutez la commande suivante.<pre>curl -X GET "http://localhost/WeatherForecast" -H  "accept: text/plain"</pre>Vérifiez la réponse de l'API.Vous pouvez obtenir les commandes curl pour chaque point de terminaison auprès de Swagger lorsque vous l'exécutez localement. | Développeur d’applications | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez toutes les ressources. | Supprimez la pile pour supprimer toutes les ressources. Cela garantit que vous n'êtes pas facturé pour les services que vous n'utilisez pas. | Administrateur AWS, AWS DevOps | 

## Ressources connexes
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-resources"></a>
+ [Connectez-vous à votre instance Linux depuis Windows à l'aide de PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)
+ [Création d'une API Web avec ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual-studio)
+ [Vers un monde sans bastions](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/)

# Exécutez des charges de travail dynamiques avec un stockage de données persistant en utilisant Amazon EFS sur Amazon EKS avec AWS Fargate
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate"></a>

*Ricardo Morais, Rodrigo Bersa et Lucio Pereira, Amazon Web Services*

## Résumé
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-summary"></a>

Ce modèle fournit des conseils pour activer Amazon Elastic File System (Amazon EFS) en tant que périphérique de stockage pour les conteneurs exécutés sur Amazon Elastic Kubernetes Service (Amazon EKS) en utilisant AWS Fargate pour provisionner vos ressources informatiques.

La configuration décrite dans ce modèle suit les meilleures pratiques en matière de sécurité et assure la sécurité au repos et la sécurité en transit par défaut. Pour chiffrer votre système de fichiers Amazon EFS, celui-ci utilise une clé AWS Key Management Service (AWS KMS), mais vous pouvez également spécifier un alias de clé qui gère le processus de création d'une clé KMS.

Vous pouvez suivre les étapes de ce modèle pour créer un espace de noms et un profil Fargate pour proof-of-concept une application (PoC), installer le pilote Amazon EFS Container Storage Interface (CSI) utilisé pour intégrer le cluster Kubernetes à Amazon EFS, configurer la classe de stockage et déployer l'application PoC. Ces étapes aboutissent à un système de fichiers Amazon EFS partagé entre plusieurs charges de travail Kubernetes et exécuté sur Fargate. Le modèle est accompagné de scripts qui automatisent ces étapes.

Vous pouvez utiliser ce modèle si vous souhaitez conserver les données dans vos applications conteneurisées et éviter toute perte de données lors des opérations de dimensionnement. Par exemple :
+ **DevOps outils** — Un scénario courant consiste à développer un outil d'intégration et de livraison continues (CI/CD) strategy. In this case, you can use Amazon EFS as a shared file system to store configurations among different instances of the CI/CD tool or to store a cache (for example, an Apache Maven repository) for pipeline stages among different instances of the CI/CDoutil).
+ **Serveurs Web** — Un scénario courant consiste à utiliser Apache comme serveur Web HTTP. Vous pouvez utiliser Amazon EFS en tant que système de fichiers partagé pour stocker des fichiers statiques partagés entre différentes instances du serveur Web. Dans cet exemple de scénario, les modifications sont appliquées directement au système de fichiers au lieu d'intégrer des fichiers statiques dans une image Docker.

## Conditions préalables et limitations
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Un cluster Amazon EKS existant avec Kubernetes version 1.17 ou ultérieure (testé jusqu'à la version 1.27)
+ Un système de fichiers Amazon EFS existant pour lier un Kubernetes StorageClass et approvisionner des systèmes de fichiers de manière dynamique
+ Autorisations d'administration du cluster
+ Contexte configuré pour pointer vers le cluster Amazon EKS souhaité

**Limites**
+ Certaines limites doivent être prises en compte lorsque vous utilisez Amazon EKS avec Fargate. Par exemple, l'utilisation de certaines constructions Kubernetes, telles que les conteneurs privilégiés, n'est DaemonSets pas prise en charge. Pour plus d'informations sur les limites de Fargate, consultez les considérations relatives à [AWS Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html#fargate-considerations) dans la documentation Amazon EKS.
+ Le code fourni avec ce modèle prend en charge les postes de travail qui exécutent Linux ou macOS.

**Versions du produit**
+ Interface de ligne de commande AWS (AWS CLI) version 2 ou ultérieure
+ pilote Amazon EFS CSI version 1.0 ou ultérieure (testé jusqu'à la version 2.4.8)
+ eksctl version 0.24.0 ou ultérieure (testé jusqu'à la version 0.158.0)
+ jq version 1.6 ou ultérieure
+ kubectl version 1.17 ou ultérieure (testé jusqu'à la version 1.27)
+ Kubernetes version 1.17 ou ultérieure (testé jusqu'à la version 1.27)

## Architecture
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-architecture"></a>

![\[Schéma d'architecture de l'exécution de charges de travail dynamiques avec stockage de données persistant à l'aide d'Amazon EFS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/2487e285-269b-415b-a270-877f973e3aaf/images/ec8de63c-3307-4010-9e03-2bd7b9881fff.png)


L'architecture cible comprend l'infrastructure suivante :
+ Un cloud privé virtuel (VPC)
+ Deux zones de disponibilité
+ Un sous-réseau public avec une passerelle NAT qui fournit un accès à Internet
+ Un sous-réseau privé avec un cluster Amazon EKS et des cibles de montage Amazon EFS (également appelées *points de montage*)
+ Amazon EFS au niveau du VPC

L'infrastructure environnementale du cluster Amazon EKS est la suivante :
+ Profils AWS Fargate adaptés aux constructions Kubernetes au niveau de l'espace de noms
+ Un espace de noms Kubernetes avec :
  + Deux modules d'applications répartis dans les zones de disponibilité
  + Une réclamation de volume persistant (PVC) liée à un volume persistant (PV) au niveau du cluster
+ Un PV à l'échelle du cluster qui est lié au PVC dans l'espace de noms et qui pointe vers les cibles de montage Amazon EFS dans le sous-réseau privé, en dehors du cluster

## Outils
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-tools"></a>

**Services AWS**
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source que vous pouvez utiliser pour interagir avec les services AWS depuis la ligne de commande.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) vous aide à créer et à configurer des systèmes de fichiers partagés dans le cloud AWS. Dans ce modèle, il fournit un système de fichiers simple, évolutif, entièrement géré et partagé à utiliser avec Amazon EKS.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter Kubernetes sur AWS sans avoir à installer ou à exploiter vos propres clusters.
+ [AWS Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) est un moteur de calcul sans serveur pour Amazon EKS. Il crée et gère les ressources de calcul pour vos applications Kubernetes.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.

**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.
+ [eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) est un utilitaire de ligne de commande permettant de créer et de gérer des clusters Kubernetes sur Amazon EKS.
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) est une interface de ligne de commande qui vous permet d'exécuter des commandes sur des clusters Kubernetes.
+ [jq](https://stedolan.github.io/jq/download/) est un outil en ligne de commande pour analyser le JSON.

**Code**

Le code de ce modèle est fourni dans la [configuration de GitHub persistance avec Amazon EFS sur Amazon EKS à l'aide du référentiel AWS Fargate.](https://github.com/aws-samples/eks-efs-share-within-fargate) Les scripts sont organisés par épopée, dans les dossiers `epic01` suivants`epic06`, conformément à l'ordre indiqué dans la section [Epics](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics) de ce modèle.

## Bonnes pratiques
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-best-practices"></a>

L'architecture cible inclut les services et composants suivants, et elle suit les meilleures pratiques d'[AWS Well-Architected Framework](https://aws.amazon.com/architecture/well-architected/) :
+ Amazon EFS, qui fournit un système de fichiers NFS élastique simple, évolutif et entièrement géré. Il est utilisé comme système de fichiers partagé entre toutes les réplications de l'application PoC exécutées dans des pods, qui sont distribués dans les sous-réseaux privés du cluster Amazon EKS choisi.
+ Une cible de montage Amazon EFS pour chaque sous-réseau privé. Cela fournit une redondance par zone de disponibilité au sein du cloud privé virtuel (VPC) du cluster.
+ Amazon EKS, qui exécute les charges de travail Kubernetes. Vous devez provisionner un cluster Amazon EKS avant d'utiliser ce modèle, comme décrit dans la section [Conditions préalables](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs).
+ AWS KMS, qui fournit un chiffrement au repos pour le contenu stocké dans le système de fichiers Amazon EFS.
+ Fargate, qui gère les ressources de calcul des conteneurs afin que vous puissiez vous concentrer sur les exigences de l'entreprise plutôt que sur la charge de l'infrastructure. Le profil Fargate est créé pour tous les sous-réseaux privés. Il fournit une redondance par zone de disponibilité au sein du cloud privé virtuel (VPC) du cluster.
+ Kubernetes Pods, pour valider que le contenu peut être partagé, consommé et écrit par différentes instances d'une application.

## Épopées
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics"></a>

### Provisionner un cluster Amazon EKS (facultatif)
<a name="provision-an-amazon-eks-cluster-optional"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un cluster Amazon EKS. | Si vous avez déjà déployé un cluster, passez à l'épopée suivante. Créez un cluster Amazon EKS dans votre compte AWS existant. Dans le [GitHub répertoire](https://github.com/aws-samples/eks-efs-share-within-fargate/tree/master/bootstrap), utilisez l'un des modèles pour déployer un cluster Amazon EKS à l'aide de Terraform ou eksctl. Pour plus d'informations, consultez la section [Création d'un cluster Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) dans la documentation Amazon EKS. Le modèle Terraform contient également des exemples montrant comment : lier des profils Fargate à votre cluster Amazon EKS, créer un système de fichiers Amazon EFS et déployer le pilote Amazon EFS CSI dans votre cluster Amazon EKS. | Administrateur AWS, administrateur Terraform ou eksctl, administrateur Kubernetes | 
| Exportez les variables d'environnement. | Exécutez le script env.sh. Cela fournit les informations requises lors des prochaines étapes.<pre>source ./scripts/env.sh<br />Inform the AWS Account ID:<br /><13-digit-account-id><br />Inform your AWS Region:<br /><aws-Region-code><br />Inform your Amazon EKS Cluster Name:<br /><amazon-eks-cluster-name><br />Inform the Amazon EFS Creation Token:<br /><self-genereated-uuid></pre>Si ce n'est pas encore le cas, vous pouvez obtenir toutes les informations demandées ci-dessus à l'aide des commandes CLI suivantes.<pre># ACCOUNT ID<br />aws sts get-caller-identity --query "Account" --output text</pre><pre># REGION CODE<br />aws configure get region</pre><pre># CLUSTER EKS NAME<br />aws eks list-clusters --query "clusters" --output text</pre><pre># GENERATE EFS TOKEN<br />uuidgen</pre> | Administrateur système AWS | 

### Création d'un espace de noms Kubernetes et d'un profil Fargate lié
<a name="create-a-kubernetes-namespace-and-a-linked-fargate-profile"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un espace de noms Kubernetes et un profil Fargate pour les charges de travail des applications. | Créez un espace de noms pour recevoir les charges de travail des applications qui interagissent avec Amazon EFS. Exécutez le script `create-k8s-ns-and-linked-fargate-profile.sh`. Vous pouvez choisir d'utiliser un nom d'espace de noms personnalisé ou l'espace de noms `poc-efs-eks-fargate` fourni par défaut.**Avec un nom d'espace de noms d'application personnalisé :**<pre>export $APP_NAMESPACE=<CUSTOM_NAME><br />./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />-c "$CLUSTER_NAME" -n "$APP_NAMESPACE"</pre>**Sans nom d'espace de noms d'application personnalisé :**<pre>./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />    -c "$CLUSTER_NAME"</pre>où `$CLUSTER_NAME` est le nom de votre cluster Amazon EKS. Le `-n <NAMESPACE>` paramètre est facultatif ; si vous n'en êtes pas informé, un nom d'espace de noms généré par défaut sera fourni. | Utilisateur Kubernetes disposant des autorisations accordées | 

### Créer un système de fichiers Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Générez un jeton unique. | Amazon EFS nécessite un jeton de création pour garantir un fonctionnement idempotent (appeler l'opération avec le même jeton de création n'a aucun effet). Pour répondre à cette exigence, vous devez générer un jeton unique à l'aide d'une technique disponible. Par exemple, vous pouvez générer un identifiant unique universel (UUID) à utiliser comme jeton de création. | Administrateur système AWS | 
| Créez un système de fichiers Amazon EFS. | Créez le système de fichiers pour recevoir les fichiers de données lus et écrits par les charges de travail de l'application. Vous pouvez créer un système de fichiers chiffré ou non chiffré. (Il est recommandé que le code de ce modèle crée un système crypté pour activer le chiffrement au repos par défaut.) Vous pouvez utiliser une clé AWS KMS unique et symétrique pour chiffrer votre système de fichiers. Si aucune clé personnalisée n'est spécifiée, une clé gérée par AWS est utilisée.Utilisez le script create-efs.sh pour créer un système de fichiers Amazon EFS chiffré ou non chiffré, après avoir généré un jeton unique pour Amazon EFS.**Avec le chiffrement au repos, sans clé KMS :**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>où `$CLUSTER_NAME` est le nom de votre cluster Amazon EKS et `$EFS_CREATION_TOKEN` est un jeton de création unique pour le système de fichiers.**Avec le chiffrement au repos, avec une clé KMS :**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>où `$CLUSTER_NAME` est le nom de votre cluster Amazon EKS, `$EFS_CREATION_TOKEN` est un jeton de création unique pour le système de fichiers et `$KMS_KEY_ALIAS` est l'alias de la clé KMS.**Sans cryptage :**<pre>./scripts/epic02/create-efs.sh -d \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>où `$CLUSTER_NAME` est le nom de votre cluster Amazon EKS, `$EFS_CREATION_TOKEN` est un jeton de création unique pour le système de fichiers et `–d` désactive le chiffrement au repos. | Administrateur système AWS | 
| Créez un groupe de sécurité. | Créez un groupe de sécurité pour autoriser le cluster Amazon EKS à accéder au système de fichiers Amazon EFS. | Administrateur système AWS | 
| Mettez à jour la règle de trafic entrant pour le groupe de sécurité. | Mettez à jour les règles entrantes du groupe de sécurité pour autoriser le trafic entrant pour les paramètres suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.html) | Administrateur système AWS | 
| Ajoutez une cible de montage pour chaque sous-réseau privé. | Pour chaque sous-réseau privé du cluster Kubernetes, créez une cible de montage pour le système de fichiers et le groupe de sécurité. | Administrateur système AWS | 

### Installation des composants Amazon EFS dans le cluster Kubernetes
<a name="install-amazon-efs-components-into-the-kubernetes-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez le pilote Amazon EFS CSI. | Déployez le pilote Amazon EFS CSI dans le cluster. Le pilote provisionne le stockage en fonction des demandes de volume persistantes créées par les applications. Exécutez le `create-k8s-efs-csi-sc.sh` script pour déployer le pilote Amazon EFS CSI et la classe de stockage dans le cluster.<pre>./scripts/epic03/create-k8s-efs-csi-sc.sh</pre>Ce script utilise l'`kubectl`utilitaire. Assurez-vous donc que le contexte a été configuré et qu'il pointe vers le cluster Amazon EKS souhaité. | Utilisateur Kubernetes disposant des autorisations accordées | 
| Déployez la classe de stockage. | Déployez la classe de stockage dans le cluster pour le fournisseur Amazon EFS (efs.csi.aws.com). | Utilisateur Kubernetes disposant des autorisations accordées | 

### Installez l'application PoC dans le cluster Kubernetes
<a name="install-the-poc-application-into-the-kubernetes-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez le volume persistant. | Déployez le volume persistant et liez-le à la classe de stockage créée et à l'ID du système de fichiers Amazon EFS. L'application utilise le volume persistant pour lire et écrire du contenu. Vous pouvez spécifier n'importe quelle taille pour le volume persistant dans le champ de stockage. Kubernetes requiert ce champ, mais Amazon EFS étant un système de fichiers élastique, il n'impose aucune capacité du système de fichiers. Vous pouvez déployer le volume persistant avec ou sans chiffrement. (Le pilote Amazon EFS CSI active le chiffrement par défaut, conformément aux meilleures pratiques.) Exécutez le `deploy-poc-app.sh` script pour déployer le volume persistant, la demande de volume persistant et les deux charges de travail.**Avec le chiffrement en transit :**<pre>./scripts/epic04/deploy-poc-app.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>où `$EFS_CREATION_TOKEN` est le jeton de création unique pour le système de fichiers.**Sans chiffrement pendant le transport :**<pre>./scripts/epic04/deploy-poc-app.sh -d \<br />    -t "$EFS_CREATION_TOKEN"</pre>où se `$EFS_CREATION_TOKEN` trouve le jeton de création unique pour le système de fichiers et `–d` désactive le chiffrement en transit. | Utilisateur Kubernetes disposant des autorisations accordées | 
| Déployez la réclamation de volume persistante demandée par l'application. | Déployez la demande de volume persistant demandée par l'application et liez-la à la classe de stockage. Utilisez le même mode d'accès que le volume persistant que vous avez créé précédemment. Vous pouvez spécifier n'importe quelle taille pour la réclamation de volume persistant dans le champ de stockage. Kubernetes requiert ce champ, mais Amazon EFS étant un système de fichiers élastique, il n'impose aucune capacité du système de fichiers. | Utilisateur Kubernetes disposant des autorisations accordées | 
| Déployer la charge de travail 1. | Déployez le pod qui représente la charge de travail 1 de l'application. Cette charge de travail écrit du contenu dans le fichier`/data/out1.txt`. | Utilisateur Kubernetes disposant des autorisations accordées | 
| Déployer la charge de travail 2. | Déployez le pod qui représente la charge de travail 2 de l'application. Cette charge de travail écrit du contenu dans le fichier`/data/out2.txt`. | Utilisateur Kubernetes disposant des autorisations accordées | 

### Validation de la persistance, de la durabilité et de la capacité de partage du système de fichiers
<a name="validate-file-system-persistence-durability-and-shareability"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez l'état du`PersistentVolume`. | Entrez la commande suivante pour vérifier l'état du`PersistentVolume`.<pre>kubectl get pv</pre>Pour un exemple de sortie, consultez la section [Informations supplémentaires](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Utilisateur Kubernetes disposant des autorisations accordées | 
| Vérifiez l'état du`PersistentVolumeClaim`. | Entrez la commande suivante pour vérifier l'état du`PersistentVolumeClaim`.<pre>kubectl -n poc-efs-eks-fargate get pvc</pre>Pour un exemple de sortie, consultez la section [Informations supplémentaires](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Utilisateur Kubernetes disposant des autorisations accordées | 
| Vérifiez que la charge de travail 1 peut écrire dans le système de fichiers. | Entrez la commande suivante pour vérifier que le workload 1 écrit sur`/data/out1.txt`.<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -f /data/out1.txt</pre>Les résultats sont similaires aux suivants :<pre>...<br />Thu Sep  3 15:25:07 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:12 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:17 UTC 2023 - PoC APP 1<br />...</pre> | Utilisateur Kubernetes disposant des autorisations accordées | 
| Vérifiez que la charge de travail 2 peut écrire dans le système de fichiers. | Entrez la commande suivante pour vérifier que le workload 2 écrit sur`/data/out2.txt`.<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -f /data/out2.txt</pre>Les résultats sont similaires aux suivants :<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Utilisateur Kubernetes disposant des autorisations accordées | 
| Vérifiez que la charge de travail 1 peut lire le fichier écrit par la charge de travail 2. | Entrez la commande suivante pour vérifier que la charge de travail 1 peut lire le `/data/out2.txt` fichier écrit par la charge de travail 2.<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -n 3 /data/out2.txt</pre>Les résultats sont similaires aux suivants :<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Utilisateur Kubernetes disposant des autorisations accordées | 
| Vérifiez que la charge de travail 2 peut lire le fichier écrit par la charge de travail 1. | Entrez la commande suivante pour vérifier que la charge de travail 2 peut lire le `/data/out1.txt` fichier écrit par la charge de travail 1.<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -n 3 /data/out1.txt</pre>Les résultats sont similaires aux suivants :<pre>...<br />Thu Sep  3 15:29:22 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:27 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:32 UTC 2023 - PoC APP 1<br />...</pre> | Utilisateur Kubernetes disposant des autorisations accordées | 
| Vérifiez que les fichiers sont conservés après avoir supprimé les composants de l'application. | Ensuite, vous utilisez un script pour supprimer les composants de l'application (volume persistant, réclamation de volume persistant et pods) et pour vérifier que les fichiers `/data/out1.txt` `/data/out2.txt` sont conservés dans le système de fichiers. Exécutez le script `validate-efs-content.sh` à l'aide de la commande suivante.<pre>./scripts/epic05/validate-efs-content.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>où `$EFS_CREATION_TOKEN` est le jeton de création unique pour le système de fichiers.Les résultats sont similaires aux suivants :<pre>pod/poc-app-validation created<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Results from execution of 'find /data' on validation process pod:<br />/data<br />/data/out2.txt<br />/data/out1.txt</pre> | Utilisateur Kubernetes avec autorisations accordées, administrateur système | 

### Surveiller les opérations
<a name="monitor-operations"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Surveillez les journaux des applications. | Dans le cadre d'une opération du deuxième jour, envoyez les journaux des applications à Amazon CloudWatch pour surveillance. | Administrateur système AWS, utilisateur de Kubernetes avec autorisations accordées | 
| Surveillez les conteneurs Amazon EKS et Kubernetes avec Container Insights. | Dans le cadre d'une opération de deux jours, surveillez les systèmes Amazon EKS et Kubernetes à l'aide d'Amazon Container Insights. CloudWatch Cet outil collecte, agrège et résume les métriques des applications conteneurisées à différents niveaux et dimensions. Pour plus d'informations, consultez la section [Ressources connexes](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources). | Administrateur système AWS, utilisateur de Kubernetes avec autorisations accordées | 
| Surveillez Amazon EFS avec CloudWatch. | Dans le cadre d'une opération de deux jours, surveillez les systèmes de fichiers à l'aide d'Amazon CloudWatch, qui collecte et traite les données brutes d'Amazon EFS pour en faire des métriques lisibles en temps quasi réel. Pour plus d'informations, consultez la section [Ressources connexes](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources). | Administrateur système AWS | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez toutes les ressources créées pour le modèle. | Une fois ce schéma terminé, nettoyez toutes les ressources afin d'éviter d'avoir à payer des frais AWS. Exécutez le `clean-up-resources.sh` script pour supprimer toutes les ressources une fois que vous avez fini d'utiliser l'application PoC. Complétez l'une des options suivantes.**Avec le chiffrement au repos, avec une clé KMS :**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>où `$CLUSTER_NAME` est le nom de votre cluster Amazon EKS, `$EFS_CREATION_TOKEN` le jeton de création du système de fichiers et `$KMS_KEY_ALIAS` l'alias de la clé KMS.**Sans chiffrement au repos :**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>où `$CLUSTER_NAME` est le nom de votre cluster Amazon EKS et `$EFS_CREATION_TOKEN` le jeton de création du système de fichiers. | Utilisateur Kubernetes avec autorisations accordées, administrateur système | 

## Ressources connexes
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources"></a>

**Références**
+ [AWS Fargate pour Amazon EKS est désormais compatible avec Amazon](https://aws.amazon.com/blogs/aws/new-aws-fargate-for-amazon-eks-now-supports-amazon-efs/) EFS (annonce)
+ [Comment capturer les journaux d'applications lors de l'utilisation d'Amazon EKS sur AWS Fargate](https://aws.amazon.com/blogs/containers/how-to-capture-application-logs-when-using-amazon-eks-on-aws-fargate/) (article de blog)
+ [Utilisation de Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) ( CloudWatch documentation Amazon)
+ [Configuration de Container Insights sur Amazon EKS et Kubernetes (documentation Amazon)](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/deploy-container-insights-EKS.html) CloudWatch 
+ [Métriques Amazon EKS et Kubernetes Container Insights (documentation Amazon)](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-EKS.html) CloudWatch 
+ [Surveillance d'Amazon EFS avec Amazon CloudWatch](https://docs.aws.amazon.com/efs/latest/ug/monitoring-cloudwatch.html) (documentation Amazon EFS)

**GitHub tutoriels et exemples**
+ [Provisionnement statique](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/static_provisioning/README.md)
+ [Chiffrement en transit](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/encryption_in_transit/README.md)
+ [Accès au système de fichiers à partir de plusieurs modules](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/multiple_pods/README.md)
+ [Utilisation d'Amazon EFS dans StatefulSets](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/statefulset/README.md)
+ [Sous-chemins de montage](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/volume_path/README.md)
+ [Utilisation des points d'accès Amazon EFS](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/access_points/README.md)
+ [Blueprints Amazon EKS pour Terraform](https://aws-ia.github.io/terraform-aws-eks-blueprints/)

**Outils nécessaires**
+ [Installation de la version 2 de l'interface de ligne de commande AWS](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)
+ [Installation d'eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)
+ [Installation de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ [Installation de jq](https://stedolan.github.io/jq/download/)

## Informations supplémentaires
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional"></a>

Voici un exemple de sortie de la `kubectl get pv` commande.

```
NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                             STORAGECLASS   REASON   AGE
poc-app-pv   1Mi        RWX            Retain           Bound    poc-efs-eks-fargate/poc-app-pvc   efs-sc                  3m56s
```

Voici un exemple de sortie de la `kubectl -n poc-efs-eks-fargate get pvc` commande.

```
NAME          STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   AGE
poc-app-pvc   Bound    poc-app-pv   1Mi        RWX            efs-sc         4m34s
```

# Configurez le dimensionnement automatique piloté par les événements dans Amazon EKS à l'aide d'Amazon EKS Pod Identity et KEDA
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda"></a>

*Dipen Desai, Abhay Diwan, Kamal Joshi et Mahendra Asiddappa, Amazon Web Services*

## Résumé
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-summary"></a>

Les plateformes d'orchestration, telles qu'[Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS), ont rationalisé la gestion du cycle de vie des applications basées sur des conteneurs. Cela permet aux entreprises de se concentrer sur le développement, la sécurisation, l'exploitation et la maintenance d'applications basées sur des conteneurs. Les déploiements pilotés par des événements devenant de plus en plus courants, les entreprises adaptent de plus en plus fréquemment les déploiements Kubernetes en fonction de diverses sources d'événements. Cette méthode, associée à la mise à l'échelle automatique, peut permettre de réaliser d'importantes économies en fournissant des ressources de calcul à la demande et une mise à l'échelle efficace adaptée à la logique des applications.

[KEDA](https://keda.sh/) est un autoscaler piloté par les événements basé sur Kubernetes. KEDA vous aide à dimensionner n'importe quel conteneur dans Kubernetes en fonction du nombre d'événements à traiter. Il est léger et s'intègre à n'importe quel cluster Kubernetes. Il fonctionne également avec les composants standard de Kubernetes, tels que [Horizontal Pod Autoscaling](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (HPA). KEDA propose [TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/#re-use-credentials-and-delegate-auth-with-triggerauthentication)également une fonctionnalité qui vous permet de déléguer l'authentification. Il vous permet de décrire des paramètres d'authentification distincts des conteneurs ScaledObject et des conteneurs de déploiement.

AWS fournit des rôles Gestion des identités et des accès AWS (IAM) qui prennent en charge diverses options de déploiement de Kubernetes, notamment Amazon EKS, Amazon EKS Anywhere Red Hat OpenShift Service on AWS (ROSA), et des clusters Kubernetes autogérés sur Amazon Elastic Compute Cloud (Amazon). EC2 Ces rôles utilisent des structures IAM, telles que les fournisseurs d'identité OpenID Connect (OIDC) et les politiques de confiance IAM, pour fonctionner dans différents environnements sans s'appuyer directement sur les services Amazon EKS ou. APIs Pour plus d'informations, consultez les [rôles IAM pour les comptes de service](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) dans la documentation Amazon EKS.

[Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) simplifie le processus permettant aux comptes de service Kubernetes d'assumer des rôles IAM sans avoir besoin de fournisseurs OIDC. Il permet de gérer les informations d'identification de vos applications. Au lieu de créer et de distribuer vos AWS informations d'identification aux conteneurs ou d'utiliser le rôle de l' EC2 instance Amazon, vous associez un rôle IAM à un compte de service Kubernetes et configurez vos Pods pour utiliser le compte de service. Cela vous permet d'utiliser un rôle IAM sur plusieurs clusters et simplifie la gestion des politiques en permettant la réutilisation des politiques d'autorisation entre les rôles IAM.

En implémentant KEDA avec Amazon EKS Pod Identity, les entreprises peuvent bénéficier d'une mise à l'échelle automatique efficace axée sur les événements et d'une gestion simplifiée des informations d'identification. Les applications évoluent en fonction de la demande, ce qui optimise l'utilisation des ressources et réduit les coûts.

Ce modèle vous permet d'intégrer Amazon EKS Pod Identity à KEDA. Il montre comment vous pouvez utiliser le compte de `keda-operator` service et déléguer l'authentification avec`TriggerAuthentication`. Il décrit également comment établir une relation de confiance entre un rôle IAM pour l'opérateur KEDA et un rôle IAM pour l'application. Cette relation de confiance permet à KEDA de surveiller les messages dans les files d'attente d'événements et d'ajuster le dimensionnement pour les objets Kubernetes de destination.

## Conditions préalables et limitations
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-prereqs"></a>

**Conditions préalables**
+ AWS Command Line Interface [(AWS CLI) version 2.13.17 ou ultérieure, installée](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Python version 3.11.5 ou ultérieure, installée](https://www.python.org/downloads/)
+ AWS SDK pour Python (Boto3) [version 1.34.135 ou ultérieure, installée](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)
+ [Helm version 3.12.3 ou ultérieure, installée](https://helm.sh/docs/intro/install/)
+ [kubectl version 1.25.1 ou ultérieure, installée](https://kubernetes.io/docs/tasks/tools/)
+ [Docker Engine version 26.1.1 ou ultérieure, installé](https://docs.docker.com/engine/install/)
+ [Un cluster Amazon EKS version 1.24 ou ultérieure, créé](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ [Conditions préalables à la création de l'agent Amazon EKS Pod Identity, remplies](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create)

**Limites**
+ Vous devez établir une relation de confiance entre le `keda-operator` rôle et le `keda-identity` rôle. Les instructions sont fournies dans la section [Epics](#event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics) de ce modèle.

## Architecture
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-architecture"></a>

Dans ce modèle, vous créez les AWS ressources suivantes :
+ Référentiel **Amazon Elastic Container Registry (Amazon ECR)** — Dans ce modèle, ce dépôt est nommé. `keda-pod-identity-registry` Ce dépôt privé est utilisé pour stocker des images Docker de l'exemple d'application.
+ **File d'attente Amazon Simple Queue Service (Amazon SQS)** — Dans ce modèle, cette file d'attente est nommée. `event-messages-queue` La file d'attente agit comme un tampon de messages qui collecte et stocke les messages entrants. KEDA surveille les métriques de file d'attente, telles que le nombre de messages ou la longueur de la file d'attente, et adapte automatiquement l'application en fonction de ces métriques.
+ **Rôle IAM pour l'application** : dans ce modèle, ce rôle est nommé`keda-identity`. Le `keda-operator` rôle assume ce rôle. Ce rôle permet d'accéder à la file d'attente Amazon SQS.
+ **Rôle IAM pour l'opérateur KEDA** — Dans ce modèle, ce rôle est nommé. `keda-operator` L'opérateur KEDA utilise ce rôle pour effectuer les appels d' AWS API requis. Ce rôle est autorisé à assumer ce `keda-identity` rôle. En raison de la relation de confiance entre les `keda-identity` rôles `keda-operator` et, le `keda-operator` rôle dispose des autorisations Amazon SQS.

Par le biais des ressources personnalisées `TriggerAuthentication` et de `ScaledObject` Kubernetes, l'opérateur utilise le `keda-identity` rôle pour se connecter à une file d'attente Amazon SQS. En fonction de la taille de la file d'attente, KEDA adapte automatiquement le déploiement de l'application. Il ajoute 1 pod pour 5 messages non lus dans la file d'attente. Dans la configuration par défaut, s'il n'y a aucun message non lu dans la file d'attente Amazon SQS, l'application est réduite à 0 pods. L'opérateur KEDA surveille la file d'attente à un intervalle que vous spécifiez.

 

L'image suivante montre comment utiliser Amazon EKS Pod Identity pour fournir au `keda-operator` rôle un accès sécurisé à la file d'attente Amazon SQS.

![\[Utilisation de KEDA et Amazon EKS Pod Identity pour dimensionner automatiquement une application basée sur Kubernetes.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/56f7506d-e8d3-43e5-bec6-42267fedd0ae/images/05bdbd09-9eb8-4c0b-8c0d-efe38aecb683.png)


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

1. Vous installez l'agent Amazon EKS Pod Identity dans le cluster Amazon EKS.

1. Vous déployez l'opérateur KEDA dans l'espace de noms KEDA du cluster Amazon EKS.

1. Vous créez les rôles `keda-operator` et `keda-identity` IAM dans la cible Compte AWS.

1. Vous établissez une relation de confiance entre les rôles IAM.

1. Vous déployez l'application dans l'espace de `security` noms.

1. L'opérateur KEDA interroge les messages dans une file d'attente Amazon SQS.

1. KEDA lance le HPA, qui adapte automatiquement l'application en fonction de la taille de la file d'attente.

## Outils
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-tools"></a>

**Services AWS**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [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.

**Autres outils**
+ [KEDA](https://keda.sh/) est un autoscaler piloté par les événements basé sur Kubernetes.

**Référentiel de code**

Le code de ce modèle est disponible dans le [dimensionnement GitHub automatique piloté par les événements à l'aide d'EKS Pod Identity et du référentiel KEDA](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main).

## Bonnes pratiques
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-best-practices"></a>

Nous vous recommandons de respecter les bonnes pratiques ci-dessous :
+ [Bonnes pratiques d'Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html)
+ [Bonnes pratiques de sécurité dans IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)
+ [Bonnes pratiques relatives à Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-best-practices.html)

## Épopées
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics"></a>

### Créez des AWS ressources
<a name="create-aws-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le rôle IAM pour l'opérateur KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrateur AWS | 
| Créez le rôle IAM pour l'exemple d'application. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrateur AWS | 
| Créez une file d’attente Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS général | 
| créer un référentiel Amazon ECR ; | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS général | 

### Configuration du cluster Amazon EKS
<a name="set-up-the-eks-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez l'agent Amazon EKS Pod Identity. | Pour le cluster Amazon EKS cible, configurez l'agent Amazon EKS Pod Identity. Suivez les instructions de la [section Configurer l'agent d'identité Amazon EKS Pod](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create) dans la documentation Amazon EKS. | AWS DevOps | 
| Déployez KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 
| Attribuez le rôle IAM au compte de service Kubernetes. | Suivez les instructions de la section [Attribuer un rôle IAM à un compte de service Kubernetes dans](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html) la documentation Amazon EKS. Utilisez les valeurs suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS DevOps | 
| Créez un espace de noms . | Entrez la commande suivante pour créer un espace de `security` noms dans le cluster Amazon EKS cible :<pre>kubectl create ns security</pre> | DevOps ingénieur | 

### Déploiement de l'exemple d'application
<a name="deploy-the-sample-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez les fichiers de l'application. | Entrez la commande suivante pour cloner le [dimensionnement automatique piloté par les événements à l'aide d'EKS Pod Identity et du référentiel KEDA depuis](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) : GitHub<pre>git clone https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda.git</pre> | DevOps ingénieur | 
| Développez l’image Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 
| Transférez l'image Docker vers Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Vous pouvez trouver les commandes push en accédant à la page du référentiel Amazon ECR, puis en choisissant **Afficher les commandes push**. | DevOps ingénieur | 
| Déployez un exemple d'application | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 
| Attribuez le rôle IAM au compte du service d'application. | Procédez de l'une des manières suivantes pour associer le rôle `keda-identity` IAM au compte de service de l'exemple d'application :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 
| Déployez `ScaledObject` et`TriggerAuthentication`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 

### Testez la mise à l'échelle automatique
<a name="test-auto-scaling"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Envoyez des messages à la file d'attente Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 
| Surveillez les modules de l'application. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 

## Résolution des problèmes
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| L'opérateur KEDA ne peut pas redimensionner l'application. | Entrez la commande suivante pour vérifier les journaux du rôle `keda-operator` IAM :<pre>kubectl logs -n keda -l app=keda-operator -c keda-operator</pre> S'il existe un code de `HTTP 403` réponse, cela signifie que l'application et le scaler KEDA ne disposent pas des autorisations suffisantes pour accéder à la file d'attente Amazon SQS. Procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)En cas d'`Assume-Role`erreur, le [rôle IAM d'un nœud Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) ne peut pas assumer le rôle IAM défini pour. `TriggerAuthentication` Procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | 

## Ressources connexes
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-resources"></a>
+ [Configuration de l'agent d'identité Amazon EKS Pod](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html) (documentation Amazon EKS)
+ [Déploiement de KEDA](https://keda.sh/docs/2.14/deploy/) (documentation KEDA)
+ [ScaledObject spécification](https://keda.sh/docs/2.16/reference/scaledobject-spec/) (documentation KEDA)
+ [Authentification avec TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/) (documentation KEDA)

# Simplifiez les déploiements de PostgreSQL sur Amazon EKS à l'aide de PGO
<a name="streamline-postgresql-deployments-amazon-eks-pgo"></a>

*Shalaka Dengale, Amazon Web Services*

## Résumé
<a name="streamline-postgresql-deployments-amazon-eks-pgo-summary"></a>

Ce modèle intègre l'opérateur Postgres de Crunchy Data (PGO) à Amazon Elastic Kubernetes Service (Amazon EKS) afin de rationaliser les déploiements de PostgreSQL dans les environnements cloud natifs. PGO fournit l'automatisation et l'évolutivité nécessaires à la gestion des bases de données PostgreSQL dans Kubernetes. Lorsque vous associez PGO à Amazon EKS, vous obtenez une plate-forme robuste pour déployer, gérer et dimensionner efficacement les bases de données PostgreSQL.

Cette intégration offre les principaux avantages suivants :
+ Déploiement automatisé : simplifie le déploiement et la gestion des clusters PostgreSQL.
+ Définitions de ressources personnalisées (CRDs) :**** utilise les primitives Kubernetes pour la gestion de PostgreSQL.
+ Haute disponibilité : prend en charge le basculement automatique et la réplication synchrone.
+ Sauvegardes et restaurations automatisées :**** rationalise les processus de sauvegarde et de restauration.
+ Mise à l'échelle horizontale :**** permet une mise à l'échelle dynamique des clusters PostgreSQL.
+ Mises à niveau des versions : facilite les mises à niveau continues avec un minimum de temps d'arrêt.
+ Sécurité : applique le chiffrement, les contrôles d'accès et les mécanismes d'authentification.

## Conditions préalables et limitations
<a name="streamline-postgresql-deployments-amazon-eks-pgo-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ [Interface de ligne de commande AWS (AWS CLI) version](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, installée et configurée sous Linux, macOS ou Windows.
+ [Config de la CLI AWS](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html), pour connecter AWS les ressources à partir de la ligne de commande.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), installé et configuré sous Linux, macOS ou Windows.
+ `kubectl`, installé et configuré pour accéder aux ressources de votre cluster Amazon EKS. Pour plus d'informations, consultez [Configurer kubectl et eksctl dans](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) la documentation Amazon EKS. 
+ Votre terminal informatique est configuré pour accéder au cluster Amazon EKS. Pour plus d'informations, consultez [Configurer votre ordinateur pour communiquer avec votre cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) dans la documentation Amazon EKS.

**Versions du produit**
+ [Versions 1.21 à 1.24 ou ultérieures de Kubernetes (voir la documentation PGO).](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/)
+ PostgreSQL version 10 ou ultérieure. Ce modèle utilise la version 16 de PostgreSQL.

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

## Architecture
<a name="streamline-postgresql-deployments-amazon-eks-pgo-architecture"></a>

**Pile technologique cible**
+ Amazon EKS
+ Amazon Virtual Private Cloud (Amazon VPC)
+ Amazon Elastic Compute Cloud (Amazon EC2)

**Architecture cible**

![\[Architecture d'utilisation de PGO avec trois zones de disponibilité et deux répliques PgBouncer, et opérateur PGO.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/4c164012-7527-4ebe-b6a7-c129600328d6/images/26a5572b-405b-4634-b96a-91254c3ea2c1.png)


Ce modèle crée une architecture qui contient un cluster Amazon EKS avec trois nœuds. Chaque nœud s'exécute sur un ensemble d'instances EC2 dans le backend. Cette configuration de PostgreSQL suit une architecture de réplication principale, particulièrement efficace pour les cas d'utilisation nécessitant beaucoup de lecture. L'architecture inclut les composants suivants :
+ **Le conteneur de base de données principal (pg-primary)** héberge l'instance principale de PostgreSQL vers laquelle toutes les opérations d'écriture sont dirigées.
+ **Les conteneurs de répliques secondaires (pg-replica)** hébergent les instances PostgreSQL qui répliquent les données de la base de données principale et gèrent les opérations de lecture.
+ **PgBouncer**est un pooler de connexions léger pour les bases de données PostgreSQL inclus dans PGO. Il se situe entre le client et le serveur PostgreSQL et sert d'intermédiaire pour les connexions aux bases de données.
+ **PGO** automatise le déploiement et la gestion des clusters PostgreSQL dans cet environnement Kubernetes.
+ **Patroni** est un outil open source qui gère et automatise les configurations de haute disponibilité pour PostgreSQL. Il est inclus dans PGO. Lorsque vous utilisez Patroni avec PGO dans Kubernetes, cela joue un rôle crucial pour garantir la résilience et la tolérance aux pannes d'un cluster PostgreSQL. Pour plus d'informations, consultez la [documentation Patroni](https://patroni.readthedocs.io/en/latest/).

Le flux de travail inclut les étapes suivantes :
+ **Déployez l'opérateur PGO**. Vous déployez l'opérateur PGO sur votre cluster Kubernetes qui s'exécute sur Amazon EKS. Cela peut être fait à l'aide de manifestes Kubernetes ou de diagrammes de Helm. Ce modèle utilise des manifestes Kubernetes.
+ **Définissez les instances de PostgreSQL**. Lorsque l'opérateur est en cours d'exécution, vous créez des ressources personnalisées (CRs) pour spécifier l'état souhaité des instances PostgreSQL. Cela inclut les configurations telles que les paramètres de stockage, de réplication et de haute disponibilité.
+ **Gestion des opérateurs**. Vous interagissez avec l'opérateur via des objets de l'API Kubernetes, par exemple CRs pour créer, mettre à jour ou supprimer des instances PostgreSQL.
+ **Surveillance et maintenance**. Vous pouvez surveiller l'état et les performances des instances PostgreSQL exécutées sur Amazon EKS. Les opérateurs fournissent souvent des métriques et des journaux à des fins de surveillance. Vous pouvez effectuer des tâches de maintenance de routine telles que les mises à niveau et les correctifs si nécessaire. Pour plus d'informations, consultez [Surveiller les performances de votre cluster et consulter les journaux](https://docs.aws.amazon.com/eks/latest/userguide/eks-observe.html) dans la documentation Amazon EKS.
+ **Mise à l'échelle et sauvegarde** : vous pouvez utiliser les fonctionnalités fournies par l'opérateur pour dimensionner les instances PostgreSQL et gérer les sauvegardes.

Ce modèle ne couvre pas les opérations de surveillance, de maintenance et de sauvegarde.

**Automatisation et mise à l'échelle**
+ Vous pouvez l'utiliser CloudFormation pour automatiser la création de l'infrastructure. Pour plus d'informations, consultez la section [Créer des ressources Amazon EKS avec CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) dans la documentation Amazon EKS.
+ Vous pouvez utiliser GitVersion les numéros de build de Jenkins pour automatiser le déploiement des instances de base de données.

## Outils
<a name="streamline-postgresql-deployments-amazon-eks-pgo-tools"></a>

**Services AWS**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.  
+ [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.

**Autres outils**
+ [eksctl](https://eksctl.io/) est un outil de ligne de commande simple permettant de créer des clusters sur Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) est un utilitaire de ligne de commande permettant d'exécuter des commandes sur des clusters Kubernetes.
+ [PGO](https://github.com/CrunchyData/postgres-operator) automatise et fait évoluer la gestion des bases de données PostgreSQL dans Kubernetes.

## Bonnes pratiques
<a name="streamline-postgresql-deployments-amazon-eks-pgo-best-practices"></a>

Suivez ces bonnes pratiques pour garantir un déploiement fluide et efficace :
+ **Sécurisez votre cluster EKS**. Mettez en œuvre les meilleures pratiques de sécurité pour votre cluster EKS, telles que l'utilisation de rôles Gestion des identités et des accès AWS (IAM) pour les comptes de service (IRSA), les politiques réseau et les groupes de sécurité VPC. Limitez l'accès au serveur API du cluster EKS et chiffrez les communications entre les nœuds et le serveur API à l'aide du protocole TLS.
+ **Assurez-vous de la compatibilité des versions** entre PGO et Kubernetes s'exécutant sur Amazon EKS. Certaines fonctionnalités de PGO peuvent nécessiter des versions spécifiques de Kubernetes ou introduire des limitations de compatibilité. Pour plus d'informations, consultez la section [Composants et compatibilité](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/references/components/) dans la documentation PGO.
+ **Planifiez l'allocation des ressources** pour votre déploiement PGO, notamment le processeur, la mémoire et le stockage. Tenez compte des besoins en ressources de PGO et des instances PostgreSQL qu'il gère. Surveillez l'utilisation des ressources et adaptez les ressources en fonction des besoins.
+ **Conçu pour une haute disponibilité**. Concevez votre déploiement PGO pour une haute disponibilité afin de minimiser les temps d'arrêt et de garantir la fiabilité. Déployez plusieurs répliques de PGO dans plusieurs zones de disponibilité pour garantir la tolérance aux pannes.
+ **Mettez en œuvre des procédures de sauvegarde et de restauration** pour vos bases de données PostgreSQL gérées par PGO. Utilisez les fonctionnalités fournies par PGO ou des solutions de sauvegarde tierces compatibles avec Kubernetes et Amazon EKS.
+ **Configurez la surveillance et la journalisation** de votre déploiement PGO afin de suivre les performances, l'état de santé et les événements. Utilisez des outils tels que Prometheus pour surveiller les métriques et Grafana pour la visualisation. Configurez la journalisation pour capturer les journaux PGO à des fins de dépannage et d'audit.
+ **Configurez correctement le réseau** pour autoriser les communications entre PGO, les instances PostgreSQL et les autres services de votre cluster Kubernetes. Utilisez les fonctionnalités réseau Amazon VPC et les plug-ins réseau Kubernetes tels que Calico ou [Amazon VPC](https://github.com/aws/amazon-vpc-cni-k8s) CNI pour appliquer les politiques réseau et isoler le trafic.
+ **Choisissez les options de stockage appropriées** pour vos bases de données PostgreSQL, en tenant compte de facteurs tels que les performances, la durabilité et l'évolutivité. Utilisez les volumes Amazon Elastic Block Store (Amazon EBS) AWS ou les services de stockage gérés pour le stockage persistant. Pour plus d'informations, consultez la section [Stocker des volumes Kubernetes avec Amazon EBS dans la documentation Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html).
+ **Utilisez des outils d'infrastructure en tant que code (IaC)**, par exemple CloudFormation pour automatiser le déploiement et la configuration de PGO sur Amazon EKS. Définissez les composants de l'infrastructure, notamment le cluster EKS, le réseau et les ressources PGO, sous forme de code pour garantir la cohérence, la répétabilité et le contrôle des versions.

## Épopées
<a name="streamline-postgresql-deployments-amazon-eks-pgo-epics"></a>

### Créer un rôle IAM
<a name="create-an-iam-role"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un rôle IAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrateur AWS | 

### Création d’un cluster Amazon EKS
<a name="create-an-eks-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un cluster Amazon EKS. | Si vous avez déjà déployé un cluster, ignorez cette étape. Sinon, déployez un cluster Amazon EKS dans votre cluster actuel en Compte AWS utilisant `eksctl` Terraform ou. CloudFormation Ce modèle est utilisé `eksctl` pour le déploiement de clusters.Ce modèle utilise Amazon EC2 comme groupe de nœuds pour Amazon EKS. Si vous souhaitez l'utiliser AWS Fargate, consultez la `managedNodeGroups` configuration dans la documentation [eksctl](https://eksctl.io/usage/schema/#managedNodeGroups).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrateur AWS, administrateur Terraform ou eksctl, administrateur Kubernetes | 
| Validez le statut du cluster. | Exécutez la commande suivante pour connaître l'état actuel des nœuds du cluster :<pre>kubectl get nodes</pre>Si vous rencontrez des erreurs, consultez la [section de résolution](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html) des problèmes de la documentation Amazon EKS. | Administrateur AWS, administrateur Terraform ou eksctl, administrateur Kubernetes | 

### Création d'un fournisseur d'identité OIDC
<a name="create-an-oidc-identity-provider"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Activez le fournisseur IAM OIDC. | Comme condition préalable au pilote Amazon EBS Container Storage Interface (CSI), vous devez disposer d'un fournisseur IAM OpenID Connect (OIDC) existant pour votre cluster.Activez le fournisseur IAM OIDC à l'aide de la commande suivante :<pre>eksctl utils associate-iam-oidc-provider --region={region} --cluster={YourClusterNameHere} --approve</pre>Pour plus d'informations sur cette étape, consultez la [documentation Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html). | Administrateur AWS | 
| Créez un rôle IAM pour le pilote Amazon EBS CSI. | Utilisez la `eksctl` commande suivante pour créer le rôle IAM pour le pilote CSI :<pre>eksctl create iamserviceaccount \<br />  --region {RegionName} \<br />  --name ebs-csi-controller-sa \<br />  --namespace kube-system \<br />  --cluster {YourClusterNameHere} \<br />  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \<br />  --approve \<br />  --role-only \<br />  --role-name AmazonEKS_EBS_CSI_DriverRole</pre>Si vous utilisez des disques Amazon EBS chiffrés, vous devez configurer davantage la politique. Pour obtenir des instructions, consultez la [documentation du pilote Amazon EBS SCI](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#installation-1). | Administrateur AWS | 
| Ajoutez le pilote Amazon EBS CSI. | Utilisez la `eksctl` commande suivante pour ajouter le pilote Amazon EBS CSI :<pre>eksctl create addon \<br />  --name aws-ebs-csi-driver \<br />  --cluster <YourClusterName> service-account-role-arn arn:aws:iam::$(aws sts get-caller-identity \<br />  --query Account \<br />  --output text):role/AmazonEKS_EBS_CSI_DriverRole \<br />  --force</pre> | Administrateur AWS | 

### Installez PGO
<a name="install-pgo"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le dépôt PGO. | Clonez le GitHub dépôt pour PGO :<pre>git clone https://github.com/CrunchyData/postgres-operator-examples.git </pre> | AWS DevOps | 
| Fournissez les détails du rôle pour la création du compte de service. | Pour accorder au cluster Amazon EKS l'accès aux AWS ressources requises, spécifiez le nom de ressource Amazon (ARN) du rôle OIDC que vous avez créé précédemment dans le `service_account.yaml` fichier qui s'y trouve. [GitHub](https://github.com/CrunchyData/postgres-operator/blob/main/config/rbac/cluster/service_account.yaml)<pre>cd postgres-operator-examples</pre><pre>---<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::<accountId>:role/<role_name> # Update the OIDC role ARN created earlier</pre> | Administrateur AWS, administrateur Kubernetes | 
| Créez l'espace de noms et les prérequis PGO. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrateur Kubernetes | 
| Vérifiez la création des pods. | Vérifiez que l'espace de noms et la configuration par défaut ont été créés :<pre>kubectl get pods -n postgres-operator</pre> | Administrateur AWS, administrateur Kubernetes | 
| Vérifiez PVCs. | Utilisez la commande suivante pour vérifier les demandes de volume persistantes (PVCs) :<pre>kubectl describe pvc -n postgres-operator</pre> | Administrateur AWS, administrateur Kubernetes | 

### Création et déploiement d'un opérateur
<a name="create-and-deploy-an-operator"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un opérateur. | Révisez le contenu du fichier situé `/kustomize/postgres/postgres.yaml` à l'adresse suivante :<pre>spec:<br />  instances:<br />    - name: pg-1<br />      replicas: 3<br />  patroni:<br />    dynamicConfiguration:<br />      postgresql:<br />      pg_hba:<br />        - "host all all 0.0.0.0/0 trust" # this line enabled logical replication with programmatic access<br />        - "host all postgres 127.0.0.1/32 md5"<br />      synchronous_mode: true<br />  users:<br />  - name: replicator<br />    databases:<br />      - testdb<br />    options: "REPLICATION"</pre>Ces mises à jour permettent d'effectuer les opérations suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrateur AWS, DBA, administrateur Kubernetes | 
| Déployez l'opérateur. | Déployez l'opérateur PGO pour rationaliser la gestion et le fonctionnement des bases de données PostgreSQL dans les environnements Kubernetes :<pre>kubectl apply -k kustomize/postgres</pre> | Administrateur AWS, DBA, administrateur Kubernetes | 
| Vérifier le déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html)Dans le résultat de la commande, notez le réplica principal (`primary_pod_name`) et le read replica (`read_pod_name`). Vous les utiliserez dans les prochaines étapes. | Administrateur AWS, DBA, administrateur Kubernetes | 

### Vérifier la réplication en streaming
<a name="verify-streaming-replication"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Écrivez des données dans le réplica principal. | Utilisez les commandes suivantes pour vous connecter à la réplique principale de PostgreSQL et écrire des données dans la base de données :<pre>kubectl exec -it <primary_pod_name> bash -n postgres-operator</pre><pre>psql</pre><pre>CREATE TABLE customers (firstname text, customer_id serial, date_created timestamp);<br />\dt</pre> | Administrateur AWS, administrateur Kubernetes | 
| Vérifiez que la réplique lue contient les mêmes données. | Connectez-vous à la réplique en lecture de PostgreSQL et vérifiez si la réplication en continu fonctionne correctement :<pre>kubectl exec -it {read_pod_name} bash -n postgres-operator</pre><pre>psql</pre><pre>\dt</pre>Le réplica lu doit contenir la table que vous avez créée dans le réplica principal à l'étape précédente. | Administrateur AWS, administrateur Kubernetes | 

## Résolution des problèmes
<a name="streamline-postgresql-deployments-amazon-eks-pgo-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Le module ne démarre pas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Les répliques accusent un retard important par rapport à la base de données principale. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Vous n'avez aucune visibilité sur les performances et l'état du cluster PostgreSQL. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| La réplication ne fonctionne pas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 

## Ressources connexes
<a name="streamline-postgresql-deployments-amazon-eks-pgo-resources"></a>
+ [Amazon Elastic Kubernetes](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html) Service *(présentation des options de déploiement dans le livre blanc AWS)*
+  [CloudFormation](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/aws-cloudformation.html)(*Présentation des options de déploiement sur le livre blanc AWS*)
+ [Commencez avec Amazon EKS — eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) (Guide de l'*utilisateur Amazon EKS*)
+ [Configurer kubectl et eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) (Guide de l'utilisateur *Amazon* EKS)
+ [Création d'un rôle pour la fédération OpenID Connect](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html) (Guide de l'utilisateur *IAM*)
+ [Configuration des paramètres du AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) (*Guide de AWS CLI l'utilisateur*)
+ [Documentation de Crunchy Postgres pour Kubernetes](https://access.crunchydata.com/documentation/postgres-operator/latest)
+ [Crunch & Learn : Crunchy Postgres pour Kubernetes](https://www.youtube-nocookie.com/embed/IIf9WZO3K50) 5.0 (vidéo)

# Simplifiez l'authentification des applications avec le protocole TLS mutuel dans Amazon ECS en utilisant Application Load Balancer
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs"></a>

*Olawale Olaleye et Shamanth Devagari, Amazon Web Services*

## Résumé
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-summary"></a>

[Ce modèle vous permet de simplifier l'authentification de vos applications et de vous décharger des charges liées à la sécurité grâce au protocole TLS mutuel dans Amazon Elastic Container Service (Amazon ECS) en utilisant Application Load Balancer (ALB).](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/mutual-authentication.html) Avec ALB, vous pouvez authentifier les certificats client X.509 auprès de. AWS Autorité de certification privée Cette puissante combinaison permet de sécuriser les communications entre vos services, réduisant ainsi le besoin de mécanismes d'authentification complexes au sein de vos applications. En outre, le modèle utilise Amazon Elastic Container Registry (Amazon ECR) pour stocker les images des conteneurs.

L'exemple de ce modèle utilise des images Docker provenant d'une galerie publique pour créer initialement les exemples de charges de travail. Par la suite, de nouvelles images Docker sont créées pour être stockées dans Amazon ECR. Pour la source, considérez un système basé sur Git tel que GitHub GitLab, ou Bitbucket, ou utilisez Amazon Simple Storage Service Amazon S3 (Amazon S3). Pour créer les images Docker, pensez à AWS CodeBuild les utiliser pour les images suivantes.

## Conditions préalables et limitations
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS ayant accès aux AWS CloudFormation piles de déploiement. Assurez-vous que vous disposez des [autorisations d'utilisateur ou de rôle Gestion des identités et des accès AWS (IAM) nécessaires](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html) au déploiement CloudFormation.
+ AWS Command Line Interface (AWS CLI) [installé](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). [Configurez](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) vos AWS informations d'identification sur votre machine locale ou dans votre environnement en utilisant AWS CLI ou en définissant les variables d'environnement dans le `~/.aws/credentials` fichier.
+ [OpenSSL](https://www.openssl.org/) installé.
+ Docker [installé.](https://www.docker.com/get-started/)
+ Connaissance de ce qui est Services AWS décrit dans la section [Outils](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools).
+ Connaissance de Docker et de NGINX.

**Limites**
+ Le protocole TLS mutuel pour Application Load Balancer ne prend en charge que les certificats clients X.509v3. Les certificats client X.509v1 ne sont pas pris en charge.
+ Le CloudFormation modèle fourni dans le référentiel de code de ce modèle n'inclut pas le provisionnement d'un CodeBuild projet dans le cadre de la pile.
+ 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**
+ Docker version 27.3.1 ou ultérieure
+ AWS CLI version 2.14.5 ou ultérieure

## Architecture
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-architecture"></a>

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

![\[Flux de travail pour s'authentifier avec le protocole TLS mutuel à l'aide d'Application Load Balancer.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a343fa4e-097f-416b-9c83-01a28eb57dc3/images/e1371297-b987-4487-9b13-8120933c921f.png)


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

1. Créez un dépôt Git et validez le code de l'application dans le référentiel.

1. Créez une autorité de certification (CA) privée dans AWS CA privée.

1. Créez un CodeBuild projet. Déclenché par les modifications de validation, crée l'image Docker et publie l'image créée sur Amazon ECR. CodeBuildproject 

1. Copiez la chaîne de certificats et le corps du certificat depuis l'autorité de certification, puis téléchargez le bundle de certificats sur Amazon S3.

1. Créez un trust store avec le bundle CA que vous avez chargé sur Amazon S3. Associez le trust store aux écouteurs TLS mutuels sur l'Application Load Balancer (ALB).

1. Utilisez l'autorité de certification privée pour émettre des certificats clients pour les charges de travail des conteneurs. Créez également un certificat TLS privé à l'aide AWS CA privée de.

1. Importez le certificat TLS privé dans AWS Certificate Manager (ACM) et utilisez-le avec l'ALB.

1. La charge de travail du conteneur dans `ServiceTwo` utilise le certificat client émis pour s'authentifier auprès de l'ALB lorsqu'il communique avec la charge de travail du conteneur dans. `ServiceOne`

1. La charge de travail du conteneur dans `ServiceOne` utilise le certificat client émis pour s'authentifier auprès de l'ALB lorsqu'il communique avec la charge de travail du conteneur dans. `ServiceTwo`

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

Ce modèle peut être entièrement automatisé en utilisant ou CloudFormation en utilisant AWS Cloud Development Kit (AWS CDK) les opérations d'API d'un SDK pour provisionner les AWS ressources.

Vous pouvez l'utiliser AWS CodePipeline pour implémenter un pipeline d'intégration et de déploiement continus (CI/CD) CodeBuild afin d'automatiser le processus de création d'images de conteneur et de déployer de nouvelles versions sur les services de cluster Amazon ECS.

## Outils
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools"></a>

**Services AWS **
+ [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 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 CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) est un service de gestion de conteneurs rapide et hautement évolutif permettant d'exécuter, d'arrêter et de gérer des conteneurs sur un cluster. Vous pouvez exécuter vos tâches et services sur une infrastructure sans serveur gérée par AWS Fargate. Pour mieux contrôler votre infrastructure, vous pouvez également exécuter vos tâches et services sur un cluster d'instances Amazon Elastic Compute Cloud (Amazon EC2) que vous gérez.
+ [Amazon ECS Exec](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html) vous permet d'interagir directement avec les conteneurs sans avoir à interagir au préalable avec le système d'exploitation du conteneur hôte, à ouvrir les ports entrants ou à gérer les clés SSH. Vous pouvez utiliser ECS Exec pour exécuter des commandes ou envoyer un shell à un conteneur exécuté sur une EC2 instance Amazon ou sur AWS Fargate.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) répartit le trafic applicatif ou réseau entrant sur plusieurs cibles. Par exemple, vous pouvez répartir le trafic entre les EC2 instances, les conteneurs et les adresses IP Amazon, dans une ou plusieurs zones de disponibilité. ELB surveille l'état de santé de ses cibles enregistrées et achemine le trafic uniquement vers les cibles saines. ELB adapte votre équilibreur de charge en fonction de l'évolution de votre trafic entrant au fil du temps. Il peut s'adapter automatiquement à la majorité des charges de travail.
+ [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' EC2 instances Amazon. Fargate est compatible avec Amazon ECS et Amazon Elastic Kubernetes Service (Amazon EKS). Vous pouvez exécuter vos tâches et services Amazon ECS avec le type de lancement Fargate ou avec un fournisseur de capacité Fargate. Pour ce faire, empaquetez votre application dans des conteneurs, spécifiez les exigences en termes de processeur et de mémoire, définissez les politiques réseau et IAM, puis lancez l'application. Chaque tâche Fargate possède sa propre limite d'isolation et ne partage pas le noyau sous-jacent, les ressources du processeur, les ressources de mémoire ou l'interface elastic network avec une autre tâche.
+ [AWS Autorité de certification privée](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)permet de créer des hiérarchies d'autorités de certification (CA) privées, y compris racine et subordonnée CAs, sans les coûts d'investissement et de maintenance liés à l'exploitation d'une autorité de certification sur site.

**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.
+ [GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), [GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html), et [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) font partie des systèmes de contrôle de source basés sur Git les plus couramment utilisés pour suivre les modifications du code source.
+ [NGINX Open Source](https://nginx.org/en/docs/?_ga=2.187509224.1322712425.1699399865-405102969.1699399865) est un équilibreur de charge, un cache de contenu et un serveur Web open source. Ce modèle l'utilise comme serveur Web.
+ [OpenSSL](https://www.openssl.org/) est une bibliothèque open source qui fournit des services utilisés par les implémentations OpenSSL de TLS et de CMS. 

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS).

## Bonnes pratiques
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-best-practices"></a>
+ Utilisez Amazon ECS Exec pour exécuter des commandes ou envoyer un shell à un conteneur exécuté sur Fargate. Vous pouvez également utiliser ECS Exec pour collecter des informations de diagnostic pour le débogage.
+ Utilisez des groupes de sécurité et des listes de contrôle d'accès réseau (ACLs) pour contrôler le trafic entrant et sortant entre les services. Les tâches Fargate reçoivent une adresse IP du sous-réseau configuré dans votre cloud privé virtuel (VPC).

## Épopées
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-epics"></a>

### Création du référentiel
<a name="create-the-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Téléchargez le code source. | Pour télécharger le code source de ce modèle, dupliquez ou clonez le référentiel GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS). | DevOps ingénieur | 
| Créez un dépôt Git. | Pour créer un dépôt Git contenant le Dockerfile et les `buildspec.yaml` fichiers, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`git clone https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS.git` | DevOps ingénieur | 

### Création d'une autorité de certification et génération de certificats
<a name="create-ca-and-generate-certificates"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une autorité de certification privée dans AWS CA privée. | Pour créer une autorité de certification (CA) privée, exécutez les commandes suivantes dans votre terminal. Remplacez les valeurs des exemples de variables par vos propres valeurs. <pre>export AWS_DEFAULT_REGION="us-west-2"<br />export SERVICES_DOMAIN="www.example.com"<br /><br />export ROOT_CA_ARN=`aws acm-pca create-certificate-authority \<br />    --certificate-authority-type ROOT \<br />    --certificate-authority-configuration \<br />    "KeyAlgorithm=RSA_2048,<br />    SigningAlgorithm=SHA256WITHRSA,<br />    Subject={<br />        Country=US,<br />        State=WA,<br />        Locality=Seattle,<br />        Organization=Build on AWS,<br />        OrganizationalUnit=mTLS Amazon ECS and ALB Example,<br />        CommonName=${SERVICES_DOMAIN}}" \<br />        --query CertificateAuthorityArn --output text`</pre>Pour plus de détails, voir [Créer une autorité de certification privée AWS CA privée dans](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html) la AWS documentation. | DevOps ingénieur, AWS DevOps | 
| Créez et installez votre certificat CA privé. | Pour créer et installer un certificat pour votre autorité de certification racine privée, exécutez les commandes suivantes dans votre terminal :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | AWS DevOps, DevOps ingénieur | 
| Demandez un certificat géré. | Pour demander un certificat privé AWS Certificate Manager à utiliser avec votre ALB privé, utilisez la commande suivante :<pre>export TLS_CERTIFICATE_ARN=`aws acm request-certificate \<br />    --domain-name "*.${DOMAIN_DOMAIN}" \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --query CertificateArn --output text`</pre> | DevOps ingénieur, AWS DevOps | 
| Utilisez l'autorité de certification privée pour émettre un certificat client. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`openssl req -out client_csr1.pem -new -newkey rsa:2048 -nodes -keyout client_private-key1.pem``openssl req -out client_csr2.pem -new -newkey rsa:2048 -nodes -keyout client_private-key2.pem`Cette commande renvoie le CSR et la clé privée pour les deux services. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)<pre>SERVICE_ONE_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr1.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_ONE_CERT_ARN: ${SERVICE_ONE_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_ONE_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert1.cert<br /><br />SERVICE_TWO_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr2.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_TWO_CERT_ARN: ${SERVICE_TWO_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_TWO_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert2.cert</pre>Pour plus d'informations, consultez la section [Émettre des certificats d'entité finale privés](https://docs.aws.amazon.com/privateca/latest/userguide/PcaIssueCert.html) dans la AWS documentation. | DevOps ingénieur, AWS DevOps | 

### Fournir des services AWS
<a name="provision-aws-services"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Fourniture Services AWS avec le CloudFormation modèle. | Pour configurer le cloud privé virtuel (VPC), le cluster Amazon ECS, les services Amazon ECS, Application Load Balancer et Amazon Elastic Container Registry (Amazon ECR), utilisez le modèle. CloudFormation  | DevOps ingénieur | 
| Obtenez des variables. | Vérifiez que vous disposez d'un cluster Amazon ECS avec deux services en cours d'exécution. Pour récupérer les détails des ressources et les stocker sous forme de variables, utilisez les commandes suivantes :<pre><br />export LoadBalancerDNS=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`LoadBalancerDNS`].OutputValue')<br /><br />export ECRRepositoryUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryUri`].OutputValue')<br /><br />export ECRRepositoryServiceOneUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceOneUri`].OutputValue')<br /><br />export ECRRepositoryServiceTwoUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceTwoUri`].OutputValue')<br /><br />export ClusterName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ClusterName`].OutputValue')<br /><br />export BucketName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`BucketName`].OutputValue')<br /><br />export Service1ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service1ListenerArn`].OutputValue')<br /><br />export Service2ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service2ListenerArn`].OutputValue')</pre> | DevOps ingénieur | 
| Créez un CodeBuild projet. | Pour utiliser un CodeBuild projet afin de créer les images Docker pour vos services Amazon ECS, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Pour plus de détails, voir [Créer un projet de construction AWS CodeBuild dans](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html) la AWS documentation. | AWS DevOps, DevOps ingénieur | 
| Créez les images Docker. | Vous pouvez l'utiliser CodeBuild pour exécuter le processus de création d'image. CodeBuild a besoin d'autorisations pour interagir avec Amazon ECR et pour travailler avec Amazon S3.Dans le cadre du processus, l'image Docker est créée et envoyée au registre Amazon ECR. Pour plus de détails sur le modèle et le code, voir [Informations supplémentaires](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional).(Facultatif) Pour créer localement à des fins de test, utilisez la commande suivante :<pre># login to ECR<br />aws ecr get-login-password | docker login --username AWS --password-stdin $ECRRepositoryUri<br /><br /># build image for service one<br />cd /service1<br />aws s3 cp s3://$BucketName/serviceone/ service1/ --recursive<br />docker build -t $ECRRepositoryServiceOneUri .<br />docker push $ECRRepositoryServiceOneUri<br /><br /># build image for service two<br />cd ../service2<br />aws s3 cp s3://$BucketName/servicetwo/ service2/ --recursive<br />docker build -t $ECRRepositoryServiceTwoUri .<br />docker push $ECRRepositoryServiceTwoUri</pre> | DevOps ingénieur | 

### Activer le protocole TLS mutuel
<a name="enable-mutual-tls"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Téléchargez le certificat CA sur Amazon S3. | Pour télécharger le certificat CA dans le compartiment Amazon S3, utilisez l'exemple de commande suivant :`aws s3 cp ca-cert.pem s3://$BucketName/acm-trust-store/ ` | AWS DevOps, DevOps ingénieur | 
| Créez le trust store. | Pour créer le trust store, utilisez l'exemple de commande suivant :<pre>TrustStoreArn=`aws elbv2 create-trust-store --name acm-pca-trust-certs \<br />    --ca-certificates-bundle-s3-bucket $BucketName \<br />    --ca-certificates-bundle-s3-key acm-trust-store/ca-cert.pem --query 'TrustStores[].TrustStoreArn' --output text`</pre> | AWS DevOps, DevOps ingénieur | 
| Téléchargez les certificats clients. | Pour télécharger des certificats clients sur Amazon S3 pour des images Docker, utilisez l'exemple de commande suivant :<pre># for service one<br />aws s3 cp client_cert1.cert s3://$BucketName/serviceone/<br />aws s3 cp client_private-key1.pem s3://$BucketName/serviceone/<br /><br /># for service two<br />aws s3 cp client_cert2.cert s3://$BucketName/servicetwo/<br />aws s3 cp client_private-key2.pem s3://$BucketName/servicetwo/</pre> | AWS DevOps, DevOps ingénieur | 
| Modifiez l'écouteur. | Pour activer le protocole TLS mutuel sur l'ALB, modifiez les écouteurs HTTPS à l'aide des commandes suivantes :<pre>aws elbv2 modify-listener \<br />    --listener-arn $Service1ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8080 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /><br />aws elbv2 modify-listener \<br />    --listener-arn $Service2ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8090 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /></pre>Pour plus d'informations, consultez [la section Configuration du protocole TLS mutuel sur un Application Load](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/configuring-mtls-with-elb.html) Balancer dans AWS la documentation. | AWS DevOps, DevOps ingénieur | 

### Mettre à jour les services
<a name="update-the-services"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Mettez à jour la définition de tâche Amazon ECS. | Pour mettre à jour la définition de tâche Amazon ECS, modifiez le `image` paramètre dans la nouvelle révision.Pour obtenir les valeurs des services respectifs, mettez à jour les définitions de tâches avec le nouvel URI des images Docker que vous avez créé lors des étapes précédentes : ou `echo $ECRRepositoryServiceOneUri` `echo $ECRRepositoryServiceTwoUri`<pre><br />    "containerDefinitions": [<br />        {<br />            "name": "nginx",<br />            "image": "public.ecr.aws/nginx/nginx:latest",   # <----- change to new Uri<br />            "cpu": 0,</pre>Pour plus d'informations, consultez la section [Mise à jour d'une définition de tâche Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-task-definition-console-v2.html) à l'aide de la console dans la AWS documentation.  | AWS DevOps, DevOps ingénieur | 
| Mettez à jour le service Amazon ECS. | Mettez à jour le service avec la dernière définition de tâche. Cette définition de tâche est le modèle pour les images Docker nouvellement créées, et elle contient le certificat client requis pour l'authentification TLS mutuelle.  Pour mettre à jour le service, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Répétez les étapes pour l'autre service. | Administrateur AWS, AWS DevOps, DevOps ingénieur | 

### Accédez à l'application
<a name="access-the-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Copiez l'URL de l'application. | Utilisez la console Amazon ECS pour consulter la tâche. Lorsque le statut de la tâche est passé à En **cours d'exécution**, sélectionnez la tâche. Dans la section **Tâche**, copiez l'ID de la tâche. | Administrateur AWS, AWS DevOps | 
| Testez votre application. | Pour tester votre application, utilisez ECS Exec pour accéder aux tâches.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | Administrateur AWS, AWS DevOps | 

## Ressources connexes
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-resources"></a>

**Documentation Amazon ECS**
+ [Création d'une définition de tâche Amazon ECS à l'aide de la console](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html)
+ [Création d'une image de conteneur à utiliser sur Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Clusters Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Amazon ECS pour AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html#create-container-image-next-steps)
+ [Bonnes pratiques de mise en réseau d’Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/networking-best-practices.html)
+ [Paramètres de définition du service Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html)

**Autres AWS ressources**
+ [Comment utiliser AWS une autorité de certification privée pour configurer les MTL sur l'Application Load Balancer ?](https://repost.aws/knowledge-center/elb-alb-configure-private-ca-mtls) (AWS re:Post)

## Informations supplémentaires
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional"></a>

**Modification du Dockerfile******

Le code suivant montre les commandes que vous modifiez dans le Dockerfile pour le service 1 :

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 1: Ok" > /usr/share/nginx/html/index.html
ADD client_cert1.cert client_private-key1.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

Le code suivant montre les commandes que vous modifiez dans le Dockerfile pour le service 2 :

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 2: Ok" > /usr/share/nginx/html/index.html
ADD client_cert2.cert client_private-key2.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

Si vous créez les images Docker avec CodeBuild, le `buildspec` fichier utilise le numéro de CodeBuild version pour identifier de manière unique les versions de l'image en tant que valeur de balise. Vous pouvez modifier le `buildspec` fichier en fonction de vos besoins, comme indiqué dans le code `buildspec ` personnalisé suivant : 

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ECR_REPOSITORY_URI
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
        # change the S3 path depending on the service
      - aws s3 cp s3://$YOUR_S3_BUCKET_NAME/serviceone/ $CodeBuild_SRC_DIR/ --recursive 
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $ECR_REPOSITORY_URI:latest .
      - docker tag $ECR_REPOSITORY_URI:latest $ECR_REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $ECR_REPOSITORY_URI:latest
      - docker push $ECR_REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      # for ECS deployment reference
      - printf '[{"name":"%s","imageUri":"%s"}]' $CONTAINER_NAME $ECR_REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json   

artifacts:
  files:
    - imagedefinitions.json
```

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

**Topics**
+ [Automatisez la suppression des AWS CloudFormation piles et des ressources associées](automate-deletion-cloudformation-stacks-associated-resources.md)
+ [Automatisez la gestion dynamique du pipeline pour le déploiement de solutions de correctifs dans les environnements Gitflow en utilisant et AWS Service Catalog AWS CodePipeline](automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.md)
+ [Créez automatiquement des CI/CD pipelines et des clusters Amazon ECS pour les microservices à l'aide d'AWS CDK](automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.md)
+ [Créez et envoyez des images Docker vers Amazon ECR à l'aide d' GitHub Actions et de Terraform](build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.md)
+ [Conteneurisez les charges de travail du mainframe qui ont été modernisées par Blu Age](containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.md)
+ [Créez un analyseur de journaux personnalisé pour Amazon ECS à l'aide d'un routeur de journaux Firelens](create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.md)
+ [Déployez des systèmes agentic sur Amazon Bedrock avec le framework CrewAI en utilisant Terraform](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [Déployez un environnement pour les applications Blu Age conteneurisées à l'aide de Terraform](deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.md)
+ [Déployez une logique de prétraitement dans un modèle de machine learning sur un seul point de terminaison à l'aide d'un pipeline d'inférence sur Amazon SageMaker](deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.md)
+ [Déployez des charges de travail à partir de DevOps pipelines Azure vers des clusters Amazon EKS privés](deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.md)
+ [Implémentez les diagnostics et le dépannage de Kubernetes basés sur l'IA grâce à l'intégration de K8sGPT et Amazon Bedrock](implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.md)
+ [Gérez les blue/green déploiements de microservices vers plusieurs comptes et régions à l'aide des services de code AWS et des clés multirégionales AWS KMS](manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.md)
+ [Gérez les applications de conteneur sur site en configurant Amazon ECS Anywhere avec le kit AWS CDK](manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk.md)
+ [Migrer d'Oracle WebLogic vers Apache Tomcat (ToMee) sur Amazon ECS](migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs.md)
+ [Modernisez les applications ASP.NET Web Forms sur AWS](modernize-asp-net-web-forms-applications-on-aws.md)
+ [Surveillez les référentiels Amazon ECR pour détecter les autorisations génériques à l'aide d'AWS et d'AWS Config CloudFormation](monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.md)
+ [Surveillez l'activité des applications à l'aide de CloudWatch Logs Insights](monitor-application-activity-by-using-cloudwatch-logs-insights.md)
+ [Configurez un CI/CD pipeline pour les charges de travail hybrides sur Amazon ECS Anywhere à l'aide d'AWS CDK et GitLab](set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.md)
+ [Configurer le end-to-end chiffrement des applications sur Amazon EKS à l'aide du gestionnaire de certificats et de Let's Encrypt](set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.md)
+ [Simplifiez le déploiement d'applications multi-locataires Amazon EKS en utilisant Flux](simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.md)
+ [Rationalisez les flux de travail d'apprentissage automatique, du développement local aux expériences évolutives en utilisant l' SageMaker IA et Hydra](streamline-machine-learning-workflows-by-using-amazon-sagemaker.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)
+ [AWS Infrastructure de test à l'aide LocalStack de tests Terraform](test-aws-infra-localstack-terraform.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)

# 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 des lacs de AWS Supply Chain données dans une configuration à référentiels multiples](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)
+ [Automatisez la configuration du peering interrégional avec AWS Transit Gateway](automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.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)
+ [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)

# Réseaux
<a name="networking-pattern-list"></a>

**Topics**
+ [Automatisez la configuration du peering interrégional avec AWS Transit Gateway](automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.md)
+ [Centralisez la connectivité réseau à l'aide d'AWS Transit Gateway](centralize-network-connectivity-using-aws-transit-gateway.md)
+ [Configurer le chiffrement HTTPS pour Oracle JD Edwards EnterpriseOne sur Oracle à l'aide WebLogic d'un Application Load Balancer](configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.md)
+ [Connectez-vous aux données et aux plans de contrôle du service de migration des applications via un réseau privé](connect-to-application-migration-service-data-and-control-planes-over-a-private-network.md)
+ [Créez des objets Infoblox à l'aide des ressources CloudFormation personnalisées AWS et d'Amazon SNS](create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.md)
+ [Créez une architecture IPAM hiérarchique multirégionale à l'aide de AWS Terraform](multi-region-ipam-architecture.md)
+ [Personnalisez les CloudWatch alertes Amazon pour AWS Network Firewall](customize-amazon-cloudwatch-alerts-for-aws-network-firewall.md)
+ [Déployez des ressources dans une AWS Wavelength zone à l'aide de Terraform](deploy-resources-wavelength-zone-using-terraform.md)
+ [Migrer des enregistrements DNS en masse vers une zone hébergée privée Amazon Route 53](migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.md)
+ [Modifiez les en-têtes HTTP lors de la migration de F5 vers un Application Load Balancer sur AWS](modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.md)
+ [Créez un rapport sur les résultats de l'analyseur d'accès réseau pour l'accès Internet entrant en plusieurs Comptes AWS](create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.md)
+ [Configuration de la résolution DNS pour les réseaux hybrides dans un environnement multi-comptes AWS](set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.md)
+ [Vérifiez que les équilibreurs de charge ELB nécessitent une terminaison TLS](verify-that-elb-load-balancers-require-tls-termination.md)
+ [Consultez les journaux et les statistiques d'AWS Network Firewall à l'aide de Splunk](view-aws-network-firewall-logs-and-metrics-by-using-splunk.md)
+ [Plus de modèles](networking-more-patterns-pattern-list.md)

# Automatisez la configuration du peering interrégional avec AWS Transit Gateway
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway"></a>

*Ram Kandaswamy, Amazon Web Services*

## Résumé
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-summary"></a>

[AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)connecte les clouds privés virtuels (VPCs) et les réseaux sur site via un hub central. Le trafic Transit Gateway ne traverse pas l'Internet public, ce qui réduit les vecteurs de menaces, tels que les exploits courants et les attaques par déni de service (DDoS) distribué.

Si vous avez besoin de communiquer entre deux ou plusieurs Régions AWS, vous pouvez utiliser le peering inter-region Transit Gateway pour établir des connexions de peering entre les passerelles de transit de différentes régions. Cependant, la configuration manuelle du peering interrégional avec Transit Gateway peut s'avérer complexe et fastidieuse. Ce modèle fournit des conseils pour l'utilisation de l'infrastructure en tant que code (IaC) pour configurer le peering. Vous pouvez utiliser cette approche si vous devez configurer plusieurs régions à plusieurs reprises et Comptes AWS pour la configuration d'une organisation multirégionale.

Ce modèle définit une [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)pile qui inclut un AWS Step Functions [flux](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html) de travail, des AWS Lambda [fonctions](https://docs.aws.amazon.com/lambda/latest/dg/concepts-basics.html#gettingstarted-concepts-function), des [rôles Gestion des identités et des accès AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) (IAM) et des [groupes](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html) de CloudWatch journaux dans Amazon Logs. Vous exécutez ensuite le flux de travail Step Functions pour créer la connexion d'appairage interrégionale pour vos passerelles de transport en commun.

## Conditions préalables et limitations
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ [Un IDE doté d'une capacité de génération de code, tel que Kiro.](https://kiro.dev/#what-is-kiro)
+ Un compartiment Amazon Simple Storage Service (Amazon S3) et les autorisations nécessaires pour y charger des objets.
+ Passerelles de transit créées dans les régions demandeuses et réceptrices.
+ VPCs créé dans les régions demandeuses et acceptantes. Marquez le VPCs avec une `addToTransitGateway` clé dont la valeur est de`true`.
+ [Groupes de sécurité](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html) configurés pour vous VPCs en fonction de vos besoins.
+ [Listes de contrôle d'accès réseau (ACLs)](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) configurées pour vous VPCs en fonction de vos besoins.

**Limites**
+ Seuls certains Régions AWS soutiennent le peering interrégional. Pour une liste complète des régions qui prennent en charge le peering interrégional, consultez le. [AWS Transit Gateway FAQs](https://aws.amazon.com/transit-gateway/faqs/)

## Architecture
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-architecture"></a>

 L'approche de développement de l'IA agentique décrite dans ce modèle implique les étapes suivantes :

1. **Définissez l'invite d'automatisation** — Kiro reçoit une invite en langage naturel qui détaille les exigences de peering.

1. **Générer un script d'automatisation** : Kiro génère les scripts CloudFormation et Lambda en fonction de l'invite fournie.

1. **Déployer la pile** : Kiro utilise CloudFormation pour déployer les ressources requises.

1. **Configuration du peering** : Kiro exécute le flux de travail Step Functions, qui appelle les fonctions Lambda pour créer des connexions d'appairage et modifier les tables de routage.

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

![\[Workflow Step Functions pour appeler la fonction Lambda afin de modifier les tables de routage pour le peering des passerelles de transit.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/b678bb87-c7b9-4f7b-b26e-eaac650e5d1b/images/2f235f47-5d68-492c-b954-7dc170939cae.png)


 

Le flux de travail comprend les étapes suivantes :

1. Le flux de travail Step Functions appelle la fonction Lambda pour le peering de Transit Gateway. 

1. Le flux de travail attend une minute.

1. Le flux de travail récupère l'état du peering et l'envoie au bloc de conditions. Le bloc est responsable de la boucle. 

1. Si la condition de réussite n'est pas remplie, le flux de travail est codé pour passer à l'étape du chronomètre. 

1. Si la condition de réussite est remplie, une fonction Lambda modifie les tables de routage. 

1. Le flux de travail Step Functions se termine.

## Outils
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-tools"></a>
+ [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 CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) vous aide à centraliser les journaux de tous vos systèmes et applications, Services AWS afin que vous puissiez les surveiller et les archiver en toute sécurité.
+ [Gestion des identités et des accès AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)[(](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)[IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)[)](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.
+ [Kiro](https://kiro.dev/#what-is-kiro) est un outil de développement d'intelligence artificielle qui vous aide à créer des applications prêtes pour la production grâce à un développement piloté par les spécifications. 
+ [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 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 autres Services AWS pour créer des applications critiques pour l'entreprise.  

## Épopées
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-epics"></a>

### Génération du code Lambda et Step Functions
<a name="generate-lam-and-sfn-code"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Remplir les espaces réservés des messages instantanés avec des détails spécifiques | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html)Vous pouvez également l'ajouter sous forme d'invite en ligne qui fait référence aux variables ci-dessus sans joindre le fichier pour le contexte. | AWS général, administrateur réseau | 
| Créez une fonction Lambda qui crée les pièces jointes d'appairage. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS général, administrateur réseau, Prompt engineering | 
| Créez une fonction Lambda qui interroge l'état de la pièce jointe au peering. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS général, administrateur réseau, Prompt engineering | 
| Créez une fonction Lambda qui ajoute des itinéraires statiques aux deux régions. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS général, administrateur réseau | 
| Créez le CloudFormation modèle. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS DevOps, AWS général, Ingénierie rapide | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez la CloudFormation pile à l'aide des instructions. | Entrez le message suivant :<pre>Using the outputs from Prompts 1-4, package and deploy the full stack. Steps:<br /><br />1. For each of the three Python files from Prompts 1-3, create a zip named after the file (e.g. peer-transit-gateway.zip that contains peer-transit-gateway.py).<br />2. Upload all three zips to S3_BUCKET.<br />3. Deploy the CloudFormation template from Prompt 4 to ACTIVE_REGION with S3BucketName=S3_BUCKET and CAPABILITY_NAMED_IAM.<br />4. Initiate the Step Function from the deployed stack.<br /><br />Zip file names must match the S3Key values in the template exactly.</pre> | AWS DevOps, Administrateur du cloud, AWS général, Prompt engineering | 
| Validez le déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS général | 

## Ressources connexes
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-resources"></a>
+ [Démarrage des exécutions par machine à états dans Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-state-machine-executions.html)
+ [Accessoires de peering Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html)
+ [Interconnexion Régions AWS via VPCs l'utilisation AWS Transit Gateway](https://www.youtube.com/watch?v=cj1rQqLxXU8) (vidéo)

# Centralisez la connectivité réseau à l'aide d'AWS Transit Gateway
<a name="centralize-network-connectivity-using-aws-transit-gateway"></a>

*Mydhili Palagummi et Nikhil Marrapu, Amazon Web Services*

## Résumé
<a name="centralize-network-connectivity-using-aws-transit-gateway-summary"></a>

Ce modèle décrit la configuration la plus simple dans laquelle AWS Transit Gateway peut être utilisé pour connecter un réseau sur site à des clouds privés virtuels (VPCs) dans plusieurs comptes AWS au sein d'une région AWS. À l'aide de cette configuration, vous pouvez établir un réseau hybride qui connecte plusieurs réseaux VPC dans une région et un réseau sur site. Cela se fait en utilisant une passerelle de transit et une connexion de réseau privé virtuel (VPN) au réseau local. 

## Conditions préalables et limitations
<a name="centralize-network-connectivity-using-aws-transit-gateway-prereqs"></a>

**Conditions préalables**
+ Un compte pour héberger des services réseau, géré en tant que compte membre d'une organisation dans AWS Organizations
+ VPCs dans plusieurs comptes AWS, sans chevauchement de blocs de routage interdomaines sans classe (CIDR)

**Limites**

Ce modèle ne permet pas d'isoler le trafic entre certains réseaux VPCs ou le réseau local. Tous les réseaux rattachés à la passerelle de transit pourront se joindre les uns aux autres. Pour isoler le trafic, vous devez utiliser des tables de routage personnalisées sur la passerelle de transit. Ce modèle connecte uniquement le réseau VPCs et le réseau local à l'aide d'une seule table de routage de passerelle de transit par défaut, ce qui constitue la configuration la plus simple.

## Architecture
<a name="centralize-network-connectivity-using-aws-transit-gateway-architecture"></a>

**Pile technologique cible**
+ AWS Transit Gateway
+  Site-to-SiteVPN AWS
+ VPC
+ AWS Resource Access Manager (AWS RAM)

 

**Architecture cible**

![\[AWS Transit Gateway connecte le réseau sur site VPCs à plusieurs comptes AWS au sein d'une région.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e23f5faf-e75e-42a3-80e3-142516a2db4e/images/1ecf7e04-bbf8-4304-88c8-6aceb7271d1e.jpeg)


## Outils
<a name="centralize-network-connectivity-using-aws-transit-gateway-tools"></a>

**Services AWS**
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) vous permet de partager en toute sécurité vos ressources entre vos comptes AWS, vos unités organisationnelles ou l'ensemble de votre organisation depuis AWS Organizations.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html) est un hub central qui connecte des clouds privés virtuels (VPCs) et des réseaux sur site.

## Épopées
<a name="centralize-network-connectivity-using-aws-transit-gateway-epics"></a>

### Création d'une passerelle de transit dans le compte de services réseau
<a name="create-a-transit-gateway-in-the-network-services-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une passerelle de transit. | Dans le compte AWS sur lequel vous souhaitez héberger les services réseau, créez une passerelle de transit dans la région AWS cible. Pour obtenir des instructions, voir [Création d'une passerelle de transit](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#create-tgw). Notez ce qui suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/centralize-network-connectivity-using-aws-transit-gateway.html) | Administrateur réseau | 

### Connectez la passerelle de transit à votre réseau sur site
<a name="connect-the-transit-gateway-to-your-on-premises-network"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez un dispositif de passerelle client pour la connexion VPN. | Le dispositif de passerelle client est connecté du côté local de la connexion Site-to-Site VPN entre la passerelle de transit et votre réseau local. Pour plus d'informations, consultez la section [Votre dispositif de passerelle client](https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html) dans la documentation du Site-to-Site VPN AWS. Identifiez ou lancez un appareil client sur site pris en charge et notez son adresse IP publique. La configuration du VPN sera terminée plus tard dans cette épopée.  | Administrateur réseau | 
| Dans le compte de services réseau, créez une connexion VPN à la passerelle de transit. | Pour configurer une connexion, créez une pièce jointe VPN pour la passerelle de transit. Pour obtenir des instructions, consultez la section [Pièces jointes du VPN Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpn-attachments.html). | Administrateur réseau | 
| Configurez le VPN sur le dispositif de passerelle client de votre réseau local.  | Téléchargez le fichier de configuration de la connexion Site-to-Site VPN associée à la passerelle de transit et configurez les paramètres VPN sur le périphérique de passerelle client. Pour obtenir des instructions, voir [Télécharger le fichier de configuration](https://docs.aws.amazon.com/vpn/latest/s2svpn/SetUpVPNConnections.html#vpn-download-config). | Administrateur réseau | 

### Partagez la passerelle de transit du compte de services réseau avec d'autres comptes AWS ou avec votre organisation
<a name="share-the-transit-gateway-in-the-network-services-account-to-other-aws-accounts-or-your-organization"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Dans le compte de gestion AWS Organizations, activez le partage. | Pour partager la passerelle de transit avec votre organisation ou avec certaines unités organisationnelles, activez le partage dans AWS Organizations. Dans le cas contraire, vous devrez partager la passerelle de transit pour chaque compte individuellement. Pour obtenir des instructions, consultez [Activer le partage de ressources au sein d'AWS Organizations](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs). | Administrateur système AWS | 
| Créez le partage de ressources de la passerelle de transit dans le compte de services réseau. | Pour autoriser VPCs d'autres comptes AWS de votre organisation à se connecter à la passerelle de transit, dans le compte de services réseau, utilisez la console AWS RAM pour partager les ressources de la passerelle de transit. Pour obtenir des instructions, voir [Création d'un partage de ressources](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-create). | Administrateur système AWS | 

### Connect VPCs à la passerelle de transit
<a name="connect-vpcs-to-the-transit-gateway"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez des pièces jointes VPC dans des comptes individuels.  | Dans les comptes avec lesquels la passerelle de transit a été partagée, créez des pièces jointes VPC de passerelle de transit. Pour obtenir des instructions, consultez la section [Créer une passerelle de transit attachée à un VPC](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#create-vpc-attachment). | Administrateur réseau | 
| Acceptez les demandes de pièces jointes VPC. | Dans le compte de services réseau, acceptez les demandes de rattachement VPC de la passerelle de transit. Pour obtenir des instructions, voir [Accepter une pièce jointe partagée](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#tgw-accept-shared-attachment). | Administrateur réseau | 

### Configurer le routage
<a name="configure-routing"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez les itinéraires dans un compte individuel VPCs. | Dans chaque compte VPC individuel, ajoutez des itinéraires vers le réseau local et vers d'autres réseaux VPC, en utilisant la passerelle de transit comme cible. Pour obtenir des instructions, voir [Ajouter et supprimer des itinéraires dans une table de routage](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes). | Administrateur réseau | 
| Configurez les itinéraires dans la table des itinéraires de la passerelle de transit. | Les itinéraires en provenance VPCs et la connexion VPN doivent être propagés et doivent apparaître dans la table de routage par défaut de la passerelle de transit. Si nécessaire, créez des itinéraires statiques (par exemple des itinéraires statiques pour la connexion VPN statique) dans la table de routage par défaut de la passerelle de transit. Pour obtenir des instructions, consultez la section [Création d'un itinéraire statique](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-create-static-route). | Administrateur réseau | 
| Ajoutez des règles de groupe de sécurité et de liste de contrôle d'accès réseau (ACL). | Pour les EC2 instances et autres ressources du VPC, assurez-vous que les règles du groupe de sécurité et les règles ACL du réseau autorisent le trafic entre VPCs le réseau local et le réseau local. Pour obtenir des instructions, voir [Contrôler le trafic vers les ressources à l'aide de groupes de sécurité](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules) [et Ajouter et supprimer des règles dans une ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#Rules). | Administrateur réseau | 

### Testez la connectivité
<a name="test-connectivity"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez la connectivité entre VPCs. | Assurez-vous que les ACL du réseau et les groupes de sécurité autorisent le trafic ICMP (Internet Control Message Protocol), puis envoyez un ping depuis les instances d'un VPC vers un autre VPC également connecté à la passerelle de transit. | Administrateur réseau | 
| Testez la connectivité entre le réseau local VPCs et le réseau local. | Assurez-vous que les règles ACL du réseau, les règles des groupes de sécurité et les éventuels pare-feux autorisent le trafic ICMP, puis envoyez un ping entre le réseau local et les EC2 instances du. VPCs La communication réseau doit d'abord être initiée à partir du réseau local pour que la connexion VPN soit rétablie`UP`. | Administrateur réseau | 

## Ressources connexes
<a name="centralize-network-connectivity-using-aws-transit-gateway-resources"></a>
+ [Création d'une infrastructure réseau AWS multi-VPC évolutive et sécurisée (livre blanc](https://d1.awsstatic.com/whitepapers/building-a-scalable-and-secure-multi-vpc-aws-network-infrastructure.pdf) AWS)
+ [Utilisation de ressources partagées](https://docs.aws.amazon.com/ram/latest/userguide/working-with.html) (documentation AWS RAM)
+ [Utilisation des passerelles de transit](https://docs.aws.amazon.com/vpc/latest/tgw/working-with-transit-gateways.html) (documentation AWS Transit Gateway)

# Configurer le chiffrement HTTPS pour Oracle JD Edwards EnterpriseOne sur Oracle à l'aide WebLogic d'un Application Load Balancer
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer"></a>

*Thanigaivel Thirumalai, Amazon Web Services*

## Résumé
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-summary"></a>

Ce modèle explique comment configurer le chiffrement HTTPS pour le déchargement SSL dans Oracle JD Edwards EnterpriseOne sur des charges de WebLogic travail Oracle. Cette approche chiffre le trafic entre le navigateur de l'utilisateur et un équilibreur de charge afin de soulager les serveurs de la charge de chiffrement. EnterpriseOne 

De nombreux utilisateurs font évoluer le niveau de la machine virtuelle EnterpriseOne JAVA (JVM) horizontalement à l'aide d'un [AWS Application Load](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) Balancer.L'équilibreur de charge sert de point de contact unique pour les clients et répartit le trafic entrant sur plusieurs JVMs sites. En option, l'équilibreur de charge peut répartir le trafic entre plusieurs zones de disponibilité et augmenter la disponibilité de EnterpriseOne.

Le processus décrit dans ce modèle configure le chiffrement entre le navigateur et l'équilibreur de charge au lieu de chiffrer le trafic entre l'équilibreur de charge et le. EnterpriseOne JVMs Cette approche est connue sous le nom de *déchargement SSL*. Le transfert du processus de déchiffrement SSL du serveur EnterpriseOne Web ou du serveur d'applications vers l'Application Load Balancer réduit la charge de travail du côté de l'application. Après l'arrêt du protocole SSL au niveau de l'équilibreur de charge, le trafic non chiffré est acheminé vers l'application sur AWS.

[Oracle JD Edwards EnterpriseOne](https://www.oracle.com/applications/jd-edwards-enterpriseone/) est une solution de planification des ressources d'entreprise (ERP) destinée aux entreprises qui fabriquent, construisent, distribuent, entretiennent ou gèrent des produits ou des actifs physiques. JD Edwards EnterpriseOne prend en charge divers matériels, systèmes d'exploitation et plateformes de base de données.

## Conditions préalables et limitations
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Rôle AWS Identity and Access Management (IAM) autorisé à effectuer des appels de service AWS et à gérer les ressources AWS
+ Un certificat SSL

**Versions du produit**
+ Ce modèle a été testé avec Oracle WebLogic 12c, mais vous pouvez également utiliser d'autres versions.

## Architecture
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-architecture"></a>

Il existe plusieurs approches pour effectuer le déchargement SSL. Ce modèle utilise un Application Load Balancer et un serveur HTTP Oracle (OHS), comme illustré dans le schéma suivant.

![\[Déchargement SSL avec un équilibreur de charge et OHS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/c62b976b-31e4-42ca-b7e8-13f7c9d9a187/images/2ae2d0eb-b9f3-41f8-ad86-9af3aade7072.png)


Le schéma suivant montre la structure JVM de JD Edwards EnterpriseOne, d'Application Load Balancer et de Java Application Server (JAS).

![\[EnterpriseOne, équilibreur de charge et disposition de la JVM JAS\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/c62b976b-31e4-42ca-b7e8-13f7c9d9a187/images/72ea35b0-2907-48b3-aeb7-0c5d9a3b831b.png)


## Outils
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-tools"></a>

**Services AWS**
+ [Les équilibreurs de charge des applications](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) distribuent le trafic applicatif entrant sur plusieurs cibles, telles qu'Amazon Elastic Compute Cloud ( EC2 instances Amazon), 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 sites Web et applications AWS.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) est un service Web DNS hautement disponible et évolutif.

## Bonnes pratiques
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-best-practices"></a>
+ Pour connaître les meilleures pratiques d'ACM, consultez la documentation d'[ACM.](https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html)

## Épopées
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-epics"></a>

### Configuration WebLogic et SST
<a name="set-up-weblogic-and-ohs"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez et configurez les composants Oracle. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrateur WebLogic  | 
| Activez le WebLogic plugin au niveau du domaine. | Le WebLogic plugin est nécessaire pour l'équilibrage de charge. Pour activer le plugin :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrateur WebLogic  | 
| Modifiez le fichier de configuration. | Le `mod_wl_ohs.conf` fichier configure les demandes proxy d'OHS à WebLogic.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)<pre><VirtualHost *:8000><br /><Location /jde><br />WLSRequest On<br />SetHandler weblogic-handler<br />WebLogicHost localhost<br />WebLogicPort 8000<br />WLProxySSL On<br />WLProxySSLPassThrough On<br /></Location><br /></VirtualHost></pre> | JDE CNC, administrateur WebLogic  | 
| Démarrez OHS à l'aide de l'Enterprise Manager. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrateur WebLogic  | 

### Configuration de l'Application Load Balancer
<a name="configure-the-application-load-balancer"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez un groupe cible. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)Pour obtenir des instructions détaillées, consultez la [documentation d'Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html). | Administrateur AWS | 
| Configurez l'équilibreur de charge. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | Administrateur AWS | 
| Ajoutez un enregistrement Route 53 (DNS). | (Facultatif) Vous pouvez ajouter un enregistrement DNS Amazon Route 53 pour le sous-domaine. Cet enregistrement pointerait vers votre Application Load Balancer. Pour obtenir des instructions, consultez la [documentation de Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html). | Administrateur AWS | 

## Résolution des problèmes
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Le serveur HTTP ne s'affiche pas. | Si le **serveur HTTP** n'apparaît pas dans la liste **de navigation cible** de la console Enterprise Manager, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)Lorsque l'instance a été créée et que les modifications ont été activées, vous pouvez voir le serveur HTTP dans le panneau de **navigation Target**. | 

## Ressources connexes
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-resources"></a>

**Documentation AWS**
+ [Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)
+ [Utilisation des zones hébergées publiques](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/AboutHZWorkingWith.html)
+ [Utilisation des zones hébergées privées](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html)

**Documentation Oracle :**
+ [Présentation du plug-in Oracle WebLogic Server Proxy](https://docs.oracle.com/middleware/1221/webtier/develop-plugin/overview.htm#PLGWL391)
+ [Installation WebLogic du serveur à l'aide de l'installateur d'infrastructure](https://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/wls/12c/12_2_1/02-01-004-InstallWLSInfrastructure/installweblogicinfrastructure.html)
+ [Installation et configuration du serveur HTTP Oracle](https://docs.oracle.com/middleware/1221/core/install-ohs/toc.htm)

# Connectez-vous aux données et aux plans de contrôle du service de migration des applications via un réseau privé
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network"></a>

*Dipin Jain et Mike Kuznetsov, Amazon Web Services*

## Résumé
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-summary"></a>

Ce modèle explique comment vous connecter à un plan de AWS Application Migration Service données et à un plan de contrôle sur un réseau privé sécurisé à l'aide de points de terminaison VPC d'interface.

Le service de migration d'applications est une solution hautement automatisée lift-and-shift (réhébergement) qui simplifie, accélère et réduit le coût de la migration des applications vers. AWS Il permet aux entreprises de réhéberger un grand nombre de serveurs physiques, virtuels ou cloud sans problèmes de compatibilité, sans interruption des performances ou sans longues périodes de transition. Le service de migration des applications est disponible auprès du AWS Management Console. Cela permet une intégration fluide avec d'autres entreprises Services AWS AWS CloudTrail, telles qu'Amazon CloudWatch et Gestion des identités et des accès AWS (IAM).

Vous pouvez vous connecter d'un centre de données source à un plan de données, c'est-à-dire à un sous-réseau servant de zone intermédiaire pour la réplication des données dans le VPC de destination Site-to-Site VPN , via une connexion privée à l'aide de services AWS Direct Connect ou du peering VPC dans Application Migration Service. Vous pouvez également utiliser les [points de terminaison VPC d'interface](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) alimentés par AWS PrivateLink pour vous connecter à un plan de contrôle du service de migration d'applications via un réseau privé. 

## Conditions préalables et limitations
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-prereqs"></a>

**Conditions préalables**
+ **Sous-réseau de zone intermédiaire** : avant de configurer le service de migration d'applications, créez un sous-réseau à utiliser comme zone intermédiaire pour les données répliquées depuis vos serveurs sources vers AWS (c'est-à-dire un plan de données). Vous devez spécifier ce sous-réseau dans le [modèle de paramètres de réplication](https://docs.aws.amazon.com/mgn/latest/ug/template-vs-server.html) lorsque vous accédez pour la première fois à la console du service de migration d'applications. Vous pouvez remplacer ce sous-réseau pour des serveurs source spécifiques dans le modèle de paramètres de réplication. Bien que vous puissiez utiliser un sous-réseau existant dans votre Compte AWS, nous vous recommandons de créer un nouveau sous-réseau dédié à cette fin.
+ **Configuration réseau requise** — Les serveurs de réplication lancés par Application Migration Service dans votre sous-réseau de zone de transit doivent être en mesure d'envoyer des données au point de terminaison de l'API Application Migration Service à l'adresse`https://mgn.<region>.amazonaws.com/`, où se `<region>` trouve le code vers lequel Région AWS vous effectuez la réplication (par exemple,`https://mgn.us-east-1.amazonaws.com`). Le service Amazon Simple Storage Service (Amazon S3) est requis pour télécharger le logiciel Application Migration URLs Service.
  + Le programme d'installation de l'agent de AWS réplication doit avoir accès à l'URL du compartiment Amazon Simple Storage Service (Amazon S3) que vous utilisez avec Application Migration Service. Région AWS 
  + Le sous-réseau de la zone de transit doit avoir accès à Amazon S3.
  + Les serveurs sources sur lesquels l'agent de AWS réplication est installé doivent être en mesure d'envoyer des données aux serveurs de réplication du sous-réseau de la zone de transit et au point de terminaison de l'API du service de migration des applications à `https://mgn.<region>.amazonaws.com/` l'adresse.

Le tableau suivant répertorie les ports requis.


| 
| 
| Source | Destination |  Port | Pour plus d’informations, veuillez consulter la rubrique | 
| --- |--- |--- |--- |
| Centre de données source | Service Amazon S3 URLs | 443 (TCP) | [Communication via le port TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 
| Centre de données source | Région AWS-adresse de console spécifique pour le service de migration d'applications | 443 (TCP) | [Communication entre les serveurs sources et le service de migration d'applications via le port TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Source-Manager-TCP-443) | 
| Centre de données source | Sous-réseau de zone de transit | 1500 (TCP) | [Communication entre les serveurs sources et le sous-réseau de la zone de transit via le port TCP 1500](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Communication-TCP-1500) | 
| Sous-réseau de zone de transit | Région AWS-adresse de console spécifique pour le service de migration d'applications | 443 (TCP) | [Communication entre le sous-réseau de la zone de transit et le service de migration des applications via le port TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Communication-TCP-443-Staging) | 
| Sous-réseau de zone de transit | Service Amazon S3 URLs | 443 (TCP) | [Communication via le port TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 
| Sous-réseau de zone de transit | Point de terminaison Amazon Elastic Compute Cloud (Amazon EC2) du sous-réseau Région AWS | 443 (TCP) | [Communication via le port TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 

**Limitations liées à **

Le service de migration d'applications n'est actuellement pas disponible sur tous Régions AWS les systèmes d'exploitation.
+ [Soutenu Régions AWS](https://docs.aws.amazon.com/mgn/latest/ug/supported-regions.html)
+ [Systèmes d'exploitation pris en charge](https://docs.aws.amazon.com/mgn/latest/ug/Supported-Operating-Systems.html)

## Architecture
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-architecture"></a>

Le schéma suivant illustre l'architecture réseau d'une migration classique. Pour plus d'informations sur cette architecture, consultez la [documentation du service de migration des applications](https://docs.aws.amazon.com/mgn/latest/ug/Network-Settings-Video.html) et la [vidéo sur l'architecture du service de migration des applications et l'architecture réseau](https://youtu.be/ao8geVzmmRo).

![\[Architecture réseau pour le service de migration d'applications pour une migration classique\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/21346c0f-0643-4f4f-b21f-fdfe24fc6a8f/images/546598b2-8026-4849-a441-eaa2bc2bf6bb.png)


La vue détaillée suivante montre la configuration des points de terminaison VPC d'interface dans la zone de transit (VPC) pour connecter Amazon S3 et Application Migration Service.

![\[Architecture réseau pour le service de migration d'applications pour une migration classique - vue détaillée\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/21346c0f-0643-4f4f-b21f-fdfe24fc6a8f/images/bd0dfd42-4ab0-466f-b696-804dedcf4513.png)


## Outils
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-tools"></a>
+ [AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)simplifie, accélère et réduit le coût de réhébergement des applications sur. AWS
+ Les [points de terminaison VPC d'interface](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) vous permettent de vous connecter à des services alimentés par AWS PrivateLink sans avoir besoin d'une passerelle Internet, d'un périphérique NAT, d'une connexion VPN ou d'une connexion. AWS Direct Connect Les instances de votre VPC ne requièrent pas d'adresses IP publiques pour communiquer avec les ressources du service. Le trafic entre votre VPC et les autres services ne quitte pas le réseau Amazon.

## Épopées
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-epics"></a>

### Créez des points de terminaison pour Application Migration Service EC2, Amazon et Amazon S3
<a name="create-endpoints-for-mgn-ec2-and-s3"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le point de terminaison de l'interface pour le service de migration d'applications. | Le centre de données source et le VPC de la zone de transit se connectent de manière privée au plan de contrôle du service de migration des applications via le point de terminaison d'interface que vous créez dans le VPC de la zone de transit cible. Pour créer le point de terminaison :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Pour plus d'informations, consultez la section [Accès et Service AWS utilisation d'un point de terminaison VPC d'interface dans la documentation Amazon VPC.](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) | Responsable de la migration | 
| Configurez le point de terminaison de l'interface pour Amazon EC2. | Le VPC de zone de transit se connecte de manière privée à l' EC2 API Amazon via le point de terminaison d'interface que vous créez dans le VPC de zone de transit cible. Pour créer le point de terminaison, suivez les instructions fournies dans l'article précédent.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html) | Responsable de la migration | 
| Configurez le point de terminaison de l'interface pour Amazon S3. | Le centre de données source et le VPC de la zone de transit se connectent de manière privée à l'API Amazon S3 via le point de terminaison d'interface que vous créez dans le VPC de la zone de transit cible. Pour créer le point de terminaison, suivez les instructions fournies dans le premier article.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Vous utilisez un point de terminaison d'interface car les connexions de point de terminaison de passerelle ne peuvent pas être étendues hors d'un VPC. (Pour plus de détails, consultez la [AWS PrivateLink documentation](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-gateway.html).) | Responsable de la migration | 
| Configurez le point de terminaison Amazon S3 Gateway. | Pendant la phase de configuration, le serveur de réplication doit se connecter à un compartiment S3 pour télécharger les mises à jour logicielles du serveur de AWS réplication. Toutefois, les points de terminaison de l'interface Amazon S3 ne prennent pas en charge les noms DNS privés*,* et il n'existe aucun moyen de fournir un nom DNS de point de terminaison Amazon S3 à un serveur de réplication. Pour atténuer ce problème, vous créez un point de terminaison de passerelle Amazon S3 dans le VPC auquel appartient le sous-réseau de la zone de transit, et vous mettez à jour les tables de routage du sous-réseau de transit avec les routes pertinentes. Pour plus d'informations, consultez la section [Créer un point de terminaison de passerelle](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#create-gateway-endpoint-s3) dans la AWS PrivateLink documentation. | Administrateur du cloud | 
| Configurez le DNS local pour résoudre les noms DNS privés des points de terminaison. | Les points de terminaison de l'interface pour Application Migration Service et Amazon EC2 possèdent des noms DNS privés qui peuvent être résolus dans le VPC. Toutefois, vous devez également configurer des serveurs locaux pour résoudre les noms DNS privés pour ces points de terminaison d'interface.Il existe plusieurs manières de configurer ces serveurs. Dans ce modèle, nous avons testé cette fonctionnalité en transférant les requêtes DNS locales au point de terminaison Amazon Route 53 Resolver entrant dans le VPC de la zone de transit. Pour plus d'informations, consultez [la section Résolution des requêtes DNS entre VPCs et votre réseau](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-overview-DSN-queries-to-vpc.html) dans la documentation Route 53. | Ingénieur en migration | 

### Connectez-vous au plan de contrôle du service de migration des applications via un lien privé
<a name="connect-to-the-mgn-control-plane-over-a-private-link"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez l'agent AWS de réplication à l'aide de AWS PrivateLink. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Voici un exemple pour Linux :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Après avoir établi votre connexion avec le service de migration d'applications et installé l'agent de AWS réplication, suivez les instructions de la [documentation du service de migration d'applications](https://docs.aws.amazon.com/mgn/latest/ug/migration-workflow-gs.html) pour migrer vos serveurs sources vers votre VPC et votre sous-réseau cibles. | Ingénieur en migration | 

## Ressources connexes
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-resources"></a>

**Documentation du service de migration d'applications**
+ [Concepts](https://docs.aws.amazon.com/mgn/latest/ug/CloudEndure-Concepts.html)
+ [Flux de travail de migration](https://docs.aws.amazon.com/mgn/latest/ug/migration-workflow-gs.html)
+ [Guide de démarrage rapide](https://docs.aws.amazon.com/mgn/latest/ug/quick-start-guide-gs.html)
+ [FAQ](https://docs.aws.amazon.com/mgn/latest/ug/FAQ.html)
+ [Résolution des problèmes](https://docs.aws.amazon.com/mgn/latest/ug/troubleshooting.html)

**Ressources supplémentaires**
+ [Réhébergement de vos applications dans une architecture multi-comptes en AWS utilisant des points de terminaison d'interface VPC](https://docs.aws.amazon.com/prescriptive-guidance/latest/rehost-multi-account-architecture-interface-endpoints/) (guide prescriptif)AWS 
+ [AWS Application Migration Service — Une introduction technique (présentation](https://www.aws.training/Details/eLearning?id=71732) détaillée de AWS la formation et de la certification)
+ [AWS Application Migration Service architecture et architecture réseau](https://youtu.be/ao8geVzmmRo) (vidéo)

## Informations supplémentaires
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-additional"></a>

**Résolution des problèmes** d'**installation de l'agent de *AWS *réplication sur des serveurs Linux**

Si une erreur **gcc** s'affiche sur un serveur Amazon Linux, configurez le référentiel de packages et utilisez la commande suivante :

```
## sudo yum groupinstall "Development Tools"
```

# Créez des objets Infoblox à l'aide des ressources CloudFormation personnalisées AWS et d'Amazon SNS
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns"></a>

*Tim Sutton, Amazon Web Services*

## Résumé
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-summary"></a>

**Remarque** : n' AWS Cloud9 est plus disponible pour les nouveaux clients. Les clients existants de AWS Cloud9 peuvent continuer à utiliser le service normalement. [En savoir plus](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Le système de noms de domaine (DNS) Infoblox, le protocole DHCP (Dynamic Host Configuration Protocol) et la gestion des adresses IP ([Infoblox DDI](https://www.infoblox.com/products/ddi/)) vous permettent de centraliser et de contrôler efficacement un environnement hybride complexe. Avec Infoblox DDI, vous pouvez découvrir et enregistrer tous les actifs du réseau dans une base de données de gestion des adresses IP (IPAM) faisant autorité, en plus de gérer le DNS sur site et sur le cloud Amazon Web Services (AWS) en utilisant les mêmes appareils.

Ce modèle décrit comment utiliser une ressource CloudFormation personnalisée AWS pour créer des objets Infoblox (par exemple, des enregistrements DNS ou des objets IPAM) en appelant l'API Infoblox WAPI. Pour plus d'informations sur l'Infoblox WAPI, consultez la documentation WAPI dans la [documentation](https://www.infoblox.com/wp-content/uploads/infoblox-deployment-infoblox-rest-api.pdf) Infoblox.

En utilisant l'approche de ce modèle, vous pouvez obtenir une vue unifiée des enregistrements DNS et des configurations IPAM pour vos environnements AWS et sur site, en plus de supprimer les processus manuels qui créent des enregistrements et approvisionnent vos réseaux. Vous pouvez utiliser l'approche de ce modèle pour les cas d'utilisation suivants :
+ Ajouter un enregistrement A après avoir créé une instance Amazon Elastic Compute Cloud (Amazon EC2) 
+ Ajouter un enregistrement CNAME après avoir créé un Application Load Balancer
+ Ajouter un objet réseau après la création d'un cloud privé virtuel (VPC)
+ Fournir la plage réseau suivante et utiliser cette plage pour créer des sous-réseaux

Vous pouvez également étendre ce modèle et utiliser d'autres fonctionnalités de l'appareil Infoblox, telles que l'ajout de différents types d'enregistrement DNS ou la configuration d'Infoblox vDiscovery. 

Le modèle utilise une hub-and-spoke conception dans laquelle le hub nécessite une connectivité à l'appliance Infoblox sur le cloud AWS ou sur site et utilise AWS Lambda pour appeler l'API Infoblox. Le spoke se trouve sur le même compte ou sur un compte différent de la même organisation dans AWS Organizations et appelle la fonction Lambda à l'aide d'une ressource CloudFormation personnalisée AWS.

## Conditions préalables et limitations
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-prereqs"></a>

**Conditions préalables**
+ Une appliance ou une grille Infoblox existante, installée sur le cloud AWS, sur site, ou les deux, et configurée avec un utilisateur administrateur capable d'administrer les actions IPAM et DNS. Pour plus d'informations à ce sujet, consultez la section [À propos des comptes d'administrateur](https://docs.infoblox.com/display/nios86/About+Admin+Accounts) dans la documentation d'Infoblox. 
+ Zone DNS autoritaire existante à laquelle vous souhaitez ajouter des enregistrements sur l'appliance Infoblox. Pour plus d'informations à ce sujet, consultez la [section Configuration des zones faisant autorité](https://docs.infoblox.com/display/nios86/Configuring+Authoritative+Zones) dans la documentation d'Infoblox.  
+ Deux comptes AWS actifs dans AWS Organizations. L'un des comptes est le compte hub et l'autre est le compte Spoke.
+ Les comptes hub et spoke doivent se trouver dans la même région AWS. 
+ Le VPC du compte hub doit se connecter à l'appliance Infoblox, par exemple en utilisant AWS Transit Gateway ou le peering VPC.
+ [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html), installé et configuré localement avec AWS Cloud9 ou AWS. CloudShell
+ Les `ClientTest.yaml` fichiers `Infoblox-Hub.zip` et (joints), téléchargés dans l'environnement local qui contient AWS SAM.

**Limites**
+ Le jeton de service de la ressource CloudFormation personnalisée AWS doit provenir de la même région que celle dans laquelle la pile est créée. Nous vous recommandons d'utiliser un compte hub dans chaque région, au lieu de créer une rubrique Amazon Simple Notification Service (Amazon SNS) dans une région et d'appeler la fonction Lambda dans une autre région.

**Versions du produit**
+ API Infoblox version 2.7

## Architecture
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-architecture"></a>

Les diagrammes suivants montrent le flux de travail de ce modèle. 

![\[Création d'objets Infoblox à l'aide des ressources CloudFormation personnalisées d'AWS et d'Amazon SNS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/8d609d3f-6f5e-4084-849f-ca191db8055e/images/3594a064-e103-4211-84b7-da67c41ebb15.png)


Le schéma montre les composants suivants pour la solution de ce modèle :

1.  CloudFormation Les ressources personnalisées AWS vous permettent d'écrire une logique de provisionnement personnalisée dans des modèles qu'AWS CloudFormation exécute lorsque vous créez, mettez à jour ou supprimez des piles. Lorsque vous créez une pile, AWS CloudFormation envoie une `create` demande à une rubrique SNS surveillée par une application exécutée sur une EC2 instance.

1. La notification Amazon SNS provenant de la ressource CloudFormation personnalisée AWS est chiffrée au moyen d'une clé AWS Key Management Service (AWS KMS) spécifique et l'accès est limité aux comptes de votre organisation dans Organizations. La rubrique SNS lance la ressource Lambda qui appelle l'API WAPI Infoblox.

1. Amazon SNS invoque les fonctions Lambda suivantes qui utilisent l'URL de l'API Infoblox, le nom d'utilisateur et le mot de passe AWS Secrets Manager Amazon Resource Names () comme variables d'environnement : ARNs 
   + `dnsapi.lambda_handler`— Reçoit les `DNSValue` valeurs `DNSName``DNSType`, et de la ressource CloudFormation personnalisée AWS et les utilise pour créer des enregistrements DNS A et des CNAMES.
   + `ipaddr.lambda_handler`— Reçoit les `Network Name` valeurs `VPCCIDR` `Type``SubnetPrefix`,, et de la ressource CloudFormation personnalisée AWS et les utilise pour ajouter les données réseau dans la base de données Infoblox IPAM ou fournir la ressource personnalisée au prochain réseau disponible pouvant être utilisé pour créer de nouveaux sous-réseaux.
   + `describeprefixes.lambda_handler`— Appelle l'API `describe_managed_prefix_lists` AWS en utilisant le `"com.amazonaws."+Region+".s3"` filtre pour récupérer les informations requises`prefix ID`.
**Important**  
Ces fonctions Lambda sont écrites en Python et sont similaires les unes aux autres, mais leurs appels sont différents. APIs

1. Vous pouvez déployer la grille Infoblox sous forme d'appliances réseau physiques, virtuelles ou basées sur le cloud.  Il peut être déployé sur site ou en tant qu'appliance virtuelle à l'aide d'une gamme d'hyperviseurs, notamment VMware ESXi Microsoft Hyper-V, Linux KVM et Xen. Vous pouvez également déployer la grille Infoblox sur le cloud AWS avec une Amazon Machine Image (AMI).

1. Le schéma montre une solution hybride pour la grille Infoblox qui fournit le DNS et l'IPAM aux ressources sur le cloud AWS et sur site.

**Pile technologique**
+ AWS CloudFormation
+ IAM
+ AWS KMS
+ AWS Lambda
+ AWS SAM
+ AWS Secrets Manager
+ Amazon SNS
+ Amazon VPC 

## Outils
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-tools"></a>
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) vous CloudFormation aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur l'ensemble des comptes et des régions AWS.
+ [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 Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
+ [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.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) est un service de gestion de comptes qui vous aide à consolider plusieurs comptes AWS au sein d'une organisation que vous créez et gérez de manière centralisée.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) vous aide à remplacer les informations d'identification codées en dur dans votre code, y compris les mots de passe, par un appel d'API à Secrets Manager pour récupérer le secret par programmation.
+ [AWS Serverless Application Model (AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html)) est un framework open source qui vous aide à créer des applications sans serveur dans le cloud AWS.
+ [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.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer des ressources AWS dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous exploiteriez dans votre propre centre de données, avec les avantages liés à l'utilisation de l'infrastructure évolutive d'AWS.

**Code**

Vous pouvez utiliser l'`ClientTest.yaml`exemple de CloudFormation modèle AWS (ci-joint) pour tester le hub Infoblox. Vous pouvez personnaliser le CloudFormation modèle AWS pour inclure les ressources personnalisées du tableau suivant.


|  | 
| --- |
| Créez un enregistrement A à l'aide de la ressource personnalisée Infoblox Spoke | Valeurs renvoyées : `infobloxref `— Références InfobloxExemple de ressource :

```
ARECORDCustomResource:

  Type: "Custom::InfobloxAPI"

  Properties:

    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxDNSFunction

    DNSName: 'arecordtest.company.com'

    DNSType: 'ARecord' 

    DNSValue: '10.0.0.1'
``` | 
| --- |--- |
| Créez un enregistrement CNAME à l'aide de la ressource personnalisée Infoblox Spoke | **Valeurs renvoyées** : `infobloxref `— Références Infoblox**Exemple de ressource** :<pre>CNAMECustomResource:<br /><br />  Type: "Custom::InfobloxAPI"<br /><br />  Properties:<br /><br />    ServiceToken: !Sub arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfoblox    <br /><br />    DNSFunction<br /><br />    DNSName: 'cnametest.company.com'<br /><br />    DNSType: 'cname' <br /><br />    DNSValue: 'aws.amazon.com'</pre> | 
| Créez un objet réseau à l'aide de la ressource personnalisée Infoblox Spoke | **Valeurs renvoyées :**`infobloxref `— Références Infoblox`network`— Portée du réseau (identique à`VPCCIDR`)**Exemple de ressource :**<pre>VPCCustomResource:<br /><br />  Type: 'Custom::InfobloxAPI'<br /><br />  Properties:<br /><br />    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxNextSubnetFunction<br /><br />    VPCCIDR: !Ref VpcCIDR<br /><br />    Type: VPC<br /><br />    NetworkName: My-VPC</pre> | 
| Récupérez le prochain sous-réseau disponible à l'aide de la ressource personnalisée Infoblox Spoke | **Valeurs renvoyées :**`infobloxref`— Références Infoblox`network `— La portée réseau du sous-réseau**Exemple de ressource :**<pre>Subnet1CustomResource:<br /><br />  Type: 'Custom::InfobloxAPI'<br /><br />  DependsOn: VPCCustomResource<br /><br />  Properties:<br /><br />    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxNextSubnetFunction<br /><br />    VPCCIDR: !Ref VpcCIDR<br /><br />    Type: Subnet<br /><br />    SubnetPrefix: !Ref SubnetPrefix<br /><br />NetworkName: My-Subnet</pre> | 

## Épopées
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-epics"></a>

### Création et configuration du VPC du compte hub
<a name="create-and-configure-the-hub-accountrsquor-s-vpc"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un VPC avec une connexion à l'appliance Infoblox. | Connectez-vous à la console de gestion AWS pour votre compte hub et créez un VPC en suivant les étapes décrites dans le [déploiement de référence Amazon VPC on the AWS Cloud Quick Start à partir d'AWS Quick](https://aws-quickstart.github.io/quickstart-aws-vpc/) Starts.Le VPC doit disposer d'une connectivité HTTPS avec l'appliance Infoblox et nous vous recommandons d'utiliser un sous-réseau privé pour cette connexion. | Administrateur réseau, administrateur système | 
| (Facultatif) Créez les points de terminaison VPC pour les sous-réseaux privés.  | Les points de terminaison VPC fournissent une connectivité aux services publics pour vos sous-réseaux privés. Les points de terminaison suivants sont requis :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.html)Pour plus d'informations sur la création de points de terminaison pour les sous-réseaux privés, consultez la section [Points de terminaison VPC dans la documentation](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints.html) Amazon VPC. | Administrateur réseau, administrateur système | 

### Déployez le hub Infoblox
<a name="deploy-the-infoblox-hub"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le modèle AWS SAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.html) | Développeur, administrateur système | 
| Déployez le modèle AWS SAM. | La `sam deploy` commande prend les paramètres requis et les enregistre dans le `samconfig.toml` fichier, stocke le CloudFormation modèle AWS et les fonctions Lambda dans un compartiment S3, puis déploie le CloudFormation modèle AWS dans votre compte de hub.  L'exemple de code suivant montre comment déployer le modèle AWS SAM :<pre>$ sam deploy --guided<br /><br />Configuring SAM deploy<br />======================<br />        Looking for config file [samconfig.toml] :  Found<br />        Reading default arguments  :  Success<br />        Setting default arguments for 'sam deploy'<br />        =========================================<br />        Stack Name [Infoblox-Hub]:<br />        AWS Region [eu-west-1]:<br />        Parameter InfobloxUsername:<br />        Parameter InfobloxPassword:<br />        Parameter InfobloxIPAddress [xxx.xxx.xx.xxx]:<br />        Parameter AWSOrganisationID [o-xxxxxxxxx]:<br />        Parameter VPCID [vpc-xxxxxxxxx]:<br />        Parameter VPCCIDR [xxx.xxx.xxx.xxx/16]:<br />        Parameter VPCSubnetID1 [subnet-xxx]:<br />        Parameter VPCSubnetID2 [subnet-xxx]:<br />        Parameter VPCSubnetID3 [subnet-xxx]:<br />        Parameter VPCSubnetID4 []: <br />        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy<br />        Confirm changes before deploy [Y/n]: y<br />        #SAM needs permission to be able to create roles to connect to the resources in your template<br />Allow SAM CLI IAM role creation [Y/n]: n<br />Capabilities [['CAPABILITY_NAMED_IAM']]:<br />        Save arguments to configuration file [Y/n]: y<br />        SAM configuration file [samconfig.toml]:<br />        SAM configuration environment [default]: </pre>Vous devez utiliser `--guided` cette option à chaque fois car les informations de connexion à Infoblox ne sont pas stockées dans le fichier. `samconfig.toml` | Développeur, administrateur système | 

## Ressources connexes
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-resources"></a>
+ [Commencer à WAPIs utiliser Postman](https://blogs.infoblox.com/community/getting-started-with-wapis-using-postman/) (Infoblox Blog)
+ [Provisionner des VNIO pour AWS à l'aide du modèle BYOL](https://docs.infoblox.com/display/NAIG/Provisioning+vNIOS+for+AWS+Using+the+BYOL+Model) (documentation Infoblox)
+ [quickstart-aws-vpc](https://github.com/aws-quickstart/quickstart-aws-vpc)(GitHub dépôt)
+ [describe\$1managed\$1prefix\$1lists (kit](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.describe_managed_prefix_lists) de développement logiciel AWS pour la documentation Python)

## Pièces jointes
<a name="attachments-8d609d3f-6f5e-4084-849f-ca191db8055e"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/8d609d3f-6f5e-4084-849f-ca191db8055e/attachments/attachment.zip)

# Créez une architecture IPAM hiérarchique multirégionale à l'aide de AWS Terraform
<a name="multi-region-ipam-architecture"></a>

*Donny Schreiber, Amazon Web Services*

## Résumé
<a name="multi-region-ipam-architecture-summary"></a>

*La gestion des adresses IP (IPAM)* est un élément essentiel de la gestion du réseau, et elle devient de plus en plus complexe à mesure que les entreprises font évoluer leur infrastructure cloud. Sans un IPAM approprié, les entreprises risquent de connaître des conflits d'adresses IP, de gaspiller de l'espace d'adressage et de résoudre des problèmes complexes susceptibles d'entraîner des pannes et des interruptions de service des applications. Ce modèle montre comment implémenter une solution IPAM complète pour les environnements AWS d'entreprise à l'aide de HashiCorp Terraform. [Il aide les organisations à créer une architecture IPAM hiérarchique multirégionale qui facilite la gestion centralisée des adresses IP Comptes AWS dans l'ensemble de l'organisation AWS .](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organization-structure)

Ce modèle vous aide à implémenter le [gestionnaire d'adresses IP Amazon VPC](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html) avec une hiérarchie de pool sophistiquée à quatre niveaux : pool de niveau supérieur, pools régionaux, pools d'unités commerciales et pools spécifiques à l'environnement. Cette structure permet une bonne gouvernance des adresses IP tout en permettant de déléguer la gestion des adresses IP aux équipes appropriées au sein de l'organisation. La solution utilise AWS Resource Access Manager (AWS RAM) pour partager de manière fluide les pools de gestionnaires d'adresses IP au sein de l'organisation. AWS RAM centralise et normalise les spécifications IPAM, sur lesquelles les équipes peuvent s'appuyer pour tous les comptes gérés.

Ce modèle peut vous aider à atteindre les objectifs suivants :
+ Automatisez l'allocation des adresses IP entre Régions AWS les unités commerciales et les environnements.
+ Appliquez les politiques du réseau organisationnel par le biais de la validation programmatique.
+ Adaptez efficacement l'infrastructure réseau à mesure que les exigences de l'entreprise évoluent.
+ Réduisez les frais d'exploitation grâce à une gestion centralisée des espaces d'adresses IP.
+ Accélérez les déploiements de charges de travail natives dans le cloud grâce à l'allocation de plages CIDR en libre-service.
+ Prévenez les conflits d'adresses grâce à des contrôles et à une validation basés sur des politiques.

## Conditions préalables et limitations
<a name="multi-region-ipam-architecture-prereqs"></a>

**Conditions préalables**
+ Un ou plusieurs Comptes AWS, gérés en tant qu'organisation dans AWS Organizations.
+ Un hub réseau ou un compte de gestion réseau qui servira d'administrateur délégué du gestionnaire d'adresses IP.
+ AWS Command Line Interface (AWS CLI), [installé](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) et [configuré](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
+ [Terraform version 1.5.0 ou ultérieure, installée.](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ AWS [Fournisseur pour Terraform, configuré.](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ Autorisations pour gérer le [gestionnaire d'adresses IP](https://docs.aws.amazon.com/vpc/latest/ipam/iam-ipam.html) et [les clouds privés virtuels (VPCs)](https://docs.aws.amazon.com/vpc/latest/userguide/security-iam.html) configurés dans Gestion des identités et des accès AWS (IAM). [AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/security-iam.html)

**Limites**
+ Le gestionnaire d'adresses IP est soumis à des [quotas de service](https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html). Le quota de service par défaut pour les pools est de 50 par étendue. L'exécution de ce déploiement pour 6 régions, 2 unités commerciales et 4 environnements créerait 67 pools. Par conséquent, une augmentation des quotas peut s'avérer nécessaire.
+ La modification ou la suppression de pools du gestionnaire d'adresses IP une fois les ressources allouées peut entraîner des problèmes de dépendance. Vous devez [libérer l'allocation](https://docs.aws.amazon.com/vpc/latest/ipam/release-alloc-ipam.html) avant de pouvoir supprimer le pool.
+ Dans le gestionnaire d'adresses IP, la [surveillance des ressources](https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html) peut être légèrement retardée avant de refléter les modifications des ressources. Ce délai peut être d'environ 20 minutes.
+ Le gestionnaire d'adresses IP ne peut pas appliquer automatiquement l'unicité des adresses IP dans différentes zones d'application.
+ Les balises personnalisées doivent respecter les [meilleures pratiques en matière AWS de balisage](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html). Par exemple, chaque clé doit être unique et ne peut pas commencer par`aws:`.
+ L'intégration du Gestionnaire [d'adresses IP à des comptes extérieurs à votre organisation comporte des considérations et des limites](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam-outside-org-considerations.html).

## Architecture
<a name="multi-region-ipam-architecture-architecture"></a>

**Architecture cible**

*Configuration du gestionnaire d'adresses IP et hiérarchie du pool*

Le schéma suivant montre les structures logiques de l'architecture cible. Un *scope* est le conteneur de plus haut niveau dans le Gestionnaire d'adresses IP. Chaque étendue représente l'espace d'adresses IP d'un réseau unique. Les *pools* sont des ensembles de plages d'adresses IP contiguës (ou plages CIDR) comprises dans le périmètre. Les pools vous aident à organiser vos adresses IP en fonction de vos besoins en matière de routage et de sécurité. Ce diagramme montre quatre niveaux hiérarchiques de pools : un pool de niveau supérieur, des pools régionaux, des pools d'unités commerciales et des pools d'environnement.

![\[Un périmètre privé et quatre niveaux de pools dans une seule région AWS dans un compte réseau.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/780e344e-37f7-4b70-8d7c-94ec67a29305/images/1e23b2a7-a274-4a19-9097-61d8a31dfbf8.png)


Cette solution établit une hiérarchie claire des pools de gestionnaires d'adresses IP :

1. Le pool de niveau supérieur englobe l'ensemble de l'espace d'adresses IP de l'organisation, tel que`10.176.0.0/12`.

1. Les pools régionaux sont destinés aux allocations spécifiques à la région, par exemple pour. `10.176.0.0/15` `us-east-1`

1. Les pools d'unités commerciales sont des allocations spécifiques au domaine au sein de chacun d'entre eux. Région AWS Par exemple, l'unité financière de la `us-east-1` région pourrait avoir`10.176.0.0/16`.

1. Les pools d'environnements sont des allocations spécifiques pour différents environnements. Par exemple, l'unité financière de la `us-east-1` région peut avoir `10.176.0.0/18` pour environnement de production.

Cette topologie de déploiement répartit géographiquement les ressources du gestionnaire d'adresses IP tout en maintenant un contrôle centralisé. Ses caractéristiques sont les suivantes :
+ Le gestionnaire d'adresses IP est déployé dans un seul serveur principal Région AWS.
+ Des régions supplémentaires sont enregistrées en tant que [régions d'exploitation, dans](https://docs.aws.amazon.com/vpc/latest/ipam/mod-ipam-region.html) lesquelles le gestionnaire d'adresses IP peut gérer les ressources.
+ Chaque région d'exploitation reçoit un pool d'adresses dédié du pool de niveau supérieur.
+ Les ressources de toutes les régions d'exploitation sont gérées de manière centralisée via le gestionnaire d'adresses IP dans la région principale.
+ Chaque pool régional possède une propriété locale liée à sa région pour vous aider à allouer correctement les ressources.

*Validation avancée de la plage CIDR*

Cette solution est conçue pour empêcher le déploiement de configurations non valides. Lorsque vous déployez les pools via Terraform, les éléments suivants sont validés pendant la phase du plan Terraform :
+ Vérifie que toutes les plages CIDR de l'environnement sont contenues dans les plages CIDR de l'unité commerciale mère
+ Confirme que toutes les plages de CIDR des unités commerciales sont contenues dans les plages CIDR régionales de leur société mère
+ Vérifie que toutes les plages CIDR régionales sont contenues dans les plages CIDR de niveau supérieur
+ Vérifie les plages CIDR qui se chevauchent au sein du même niveau hiérarchique
+ Valide le mappage correct des environnements par rapport à leurs unités commerciales respectives

*Allocation de plage CIDR*

Le schéma suivant montre un exemple de la manière dont les développeurs ou les administrateurs peuvent créer de nouvelles adresses IP VPCs et les allouer à partir des niveaux du pool.

![\[Un périmètre privé et quatre niveaux de pools dans une seule région AWS dans un compte réseau.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/780e344e-37f7-4b70-8d7c-94ec67a29305/images/7c3de2e3-e71b-4fc0-abcd-7e88cfab5c87.png)


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

1. Par le biais du AWS Management Console AWS CLI, ou via l'infrastructure en tant que code (IaC), un développeur ou un administrateur demande la prochaine plage d'adresses CIDR disponible dans le pool d'`AY3`environnements.

1. Le gestionnaire d'adresses IP alloue la prochaine plage d'adresses CIDR disponible dans ce pool au VPC. `AY3-4` Cette plage d'adresses CIDR ne peut plus être utilisée.

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

Cette solution est conçue pour être évolutive comme suit :
+ **Expansion régionale** — Ajoutez de nouvelles régions en étendant la configuration Terraform avec des entrées de pool régionales supplémentaires.
+ **Croissance des unités commerciales** — Supportez les nouvelles unités commerciales en les ajoutant à la carte de configuration des BU.
+ **Flexibilité de l'**environnement : configurez différents types d'environnement, tels que le développement ou la production, en fonction des besoins de l'organisation.
+ **Support multi-comptes** : partagez les pools entre tous les comptes de votre organisation via AWS RAM.
+ Provisionnement **VPC automatisé : intégrez-le aux flux de travail de provisionnement** VPC pour automatiser l'allocation de plages d'adresses CIDR.

La structure hiérarchique permet également différentes échelles de délégation et de contrôle, telles que les suivantes :
+ Les administrateurs réseau peuvent gérer les pools de niveau supérieur et régionaux.
+ Les équipes informatiques des unités commerciales peuvent avoir délégué le contrôle de leurs pools respectifs.
+ Les équipes chargées des applications peuvent consommer des adresses IP provenant de leurs pools d'environnement désignés.

**Note**  
Vous pouvez également intégrer cette solution à [AWS Control Tower Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html). Pour plus d'informations, voir *Intégration avec AFT* dans la section [Informations supplémentaires](#multi-region-ipam-architecture-additional) de ce modèle.

## Outils
<a name="multi-region-ipam-architecture-tools"></a>

**Services AWS**
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) vous CloudWatch aide à surveiller les indicateurs de vos AWS ressources et des applications que vous utilisez AWS en temps réel.
+ [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 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.
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) vous permet de partager vos ressources en toute sécurité afin Comptes AWS de réduire les frais opérationnels et de garantir visibilité et auditabilité.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d' AWS. [Le gestionnaire d'adresses IP](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html) est une fonctionnalité d'Amazon VPC. Il vous aide à planifier, suivre et surveiller les adresses IP pour vos AWS charges de travail.

**Autres outils**
+ [HashiCorp Terraform](https://www.terraform.io/docs) est un outil d'infrastructure en tant que code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud.

**Référentiel de code**

Le code de ce modèle est disponible dans le [Sample Terraform Implementation for Hierarchical IPAM sur le référentiel sur AWS****](https://github.com/aws-samples/sample-amazon-vpc-ipam-terraform). GitHub La structure du référentiel inclut :
+ **Module racine** : orchestration du déploiement et variables d'entrée.
+ **Module IPAM** — Implémentation principale de l'architecture décrite dans ce modèle.
+ **Module de balises** : balisage standardisé pour toutes les ressources.

## Bonnes pratiques
<a name="multi-region-ipam-architecture-best-practices"></a>

Tenez compte des meilleures pratiques suivantes pour la planification du réseau :
+ **Planifiez d'abord** : planifiez soigneusement votre espace d'adresses IP avant le déploiement. Pour plus d'informations, voir [Planifier le provisionnement des adresses IP](https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html).
+ **Évitez le chevauchement des plages d'adresses CIDR** : assurez-vous que les plages d'adresses CIDR de chaque niveau ne se chevauchent pas.
+ **Réservez de l'espace tampon** — Allouez toujours des plages CIDR supérieures à celles qui sont immédiatement nécessaires pour faire face à la croissance.
+ **Documenter l'attribution des adresses IP** — Conservez la documentation de votre stratégie d'allocation d'adresses IP.

Tenez compte des meilleures pratiques de déploiement suivantes :
+ **Commencez par la non-production** : déployez d'abord dans des environnements hors production.
+ **Utiliser la gestion des états Terraform** : implémentez le stockage et le verrouillage d'états à distance. Pour plus d'informations, consultez [State Storage and locking](https://developer.hashicorp.com/terraform/language/state/backends) dans la documentation Terraform.
+ **Implémenter le contrôle de version** — Contrôle de version de tout le code Terraform.
+ **Mettre en œuvre CI/CD l'intégration** : utilisez des pipelines d'intégration continue et de livraison continue (CI/CD) pour des déploiements reproductibles.

Tenez compte des meilleures pratiques opérationnelles suivantes :
+ **Activer l'importation automatique** : configurez un pool de gestionnaires d'adresses IP pour découvrir et importer automatiquement les ressources existantes. Suivez les instructions de la [section Modifier un pool IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/mod-pool-ipam.html) pour activer l'importation automatique.
+ **Surveiller l'utilisation des adresses IP** : configurez des alarmes pour les seuils d'utilisation des adresses IP. Pour plus d'informations, consultez [Surveiller l'IPAM avec Amazon CloudWatch](https://docs.aws.amazon.com/vpc/latest/ipam/cloudwatch-ipam.html).
+ **Audit régulier — Vérifiez régulièrement** l'utilisation et la conformité des adresses IP. Pour plus d'informations, consultez la section [Suivi de l'utilisation des adresses IP dans IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/tracking-ip-addresses-ipam.html).
+ **Nettoyer les allocations inutilisées** : libérez les allocations d'adresses IP lorsque les ressources sont mises hors service. Pour plus d'informations, voir [Déprovisionner CIDRs à partir d'un pool](https://docs.aws.amazon.com/vpc/latest/ipam/depro-pool-cidr-ipam.html).

Tenez compte des meilleures pratiques de sécurité suivantes :
+ **Implémenter le moindre privilège** : utilisez des rôles IAM dotés des autorisations minimales requises. Pour plus d'informations, consultez les [meilleures pratiques de sécurité dans IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) et la [gestion des identités et des accès dans IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/iam-ipam.html).
+ **Utiliser des politiques de contrôle des** services : implémentez des politiques de contrôle des services (SCPs) pour renforcer l'utilisation du gestionnaire d'adresses IP dans votre organisation. Pour plus d'informations, consultez Imposer l'[utilisation d'IPAM pour la création de VPC](https://docs.aws.amazon.com/vpc/latest/ipam/scp-ipam.html) avec. SCPs
+ **Contrôlez le partage des ressources** : gérez avec soin l'étendue du partage des ressources du gestionnaire d'adresses IP dans AWS RAM. Pour plus d'informations, voir [Partager un pool IPAM à l'aide AWS RAM](https://docs.aws.amazon.com/vpc/latest/ipam/share-pool-ipam.html) de.
+ **Appliquer le balisage** : implémentez le balisage obligatoire pour toutes les ressources liées au gestionnaire d'adresses IP. Pour plus d'informations, consultez la section *Stratégie de balisage* dans la section [Informations supplémentaires](#multi-region-ipam-architecture-additional).

## Épopées
<a name="multi-region-ipam-architecture-epics"></a>

### Configurer un compte d'administrateur délégué pour le gestionnaire d'adresses IP
<a name="set-up-a-delegated-administrator-account-for-ip-address-manager"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Activez AWS Organizations les fonctionnalités. | Assurez-vous que AWS Organizations toutes les fonctionnalités sont activées. Pour obtenir des instructions, consultez la section [Activation de toutes les fonctionnalités pour une organisation AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html) dans la AWS Organizations documentation. | Administrateur AWS | 
| Activez le partage des ressources dans AWS RAM. | À l'aide de AWS CLI, entrez la commande suivante pour activer le partage AWS RAM des ressources pour votre organisation :<pre>aws ram enable-sharing-with-aws-organization</pre>Pour plus d'informations, voir [Activer le partage des ressources au AWS Organizations sein](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs) de la AWS RAM documentation. | Administrateur AWS | 
| Désignez un administrateur pour le gestionnaire d'adresses IP. | À partir du compte de gestion de l'organisation, à l' AWS CLI aide de la commande, entrez la commande suivante, où se `123456789012` trouve l'ID du compte qui administrera le gestionnaire d'adresses IP :<pre>aws ec2 enable-ipam-organization-admin-account \<br />    --delegated-admin-account-id 123456789012</pre>Généralement, un compte réseau ou hub réseau est utilisé en tant qu'administrateur délégué pour IP Address Manager.Pour plus d'informations, consultez la section [Intégrer l'IPAM aux comptes d'une AWS organisation](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html) dans la documentation du gestionnaire d'adresses IP. | Administrateur AWS | 

### Déployer l'infrastructure
<a name="deploy-the-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Définissez l'architecture du réseau. | Définissez et documentez l'architecture de votre réseau, y compris les plages CIDR pour les régions, les unités commerciales et les environnements. Pour plus d'informations, consultez la section [Planifier le provisionnement des adresses IP](https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html) dans la documentation du gestionnaire d'adresses IP. | Ingénieur réseau | 
| Pour cloner le référentiel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | DevOps ingénieur | 
| Configurez les variables. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | Ingénieur réseau, Terraform | 
| Déployez les ressources du gestionnaire d'adresses IP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | Terraform | 
| Validez le déploiement. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | AWS général, ingénieur réseau | 

### Création VPCs et configuration de la surveillance
<a name="create-vpcs-and-set-up-monitoring"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un VPC. | Suivez les étapes décrites dans [Créer un VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) dans la documentation Amazon VPC. Lorsque vous avez atteint l'étape consistant à choisir une plage d'adresses CIDR pour le VPC, allouez la plage suivante disponible à partir de l'un de vos pools régionaux, d'unités commerciales ou d'environnements. | AWS général, administrateur réseau, ingénieur réseau | 
| Validez l'allocation de plage CIDR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | AWS général, administrateur réseau, ingénieur réseau | 
| Surveillez le gestionnaire d'adresses IP. | Configurez la surveillance et les alarmes liées à l'allocation des ressources du gestionnaire d'adresses IP. Pour plus d'informations et d'instructions, consultez les sections [Surveillance de l'IPAM avec Amazon CloudWatch](https://docs.aws.amazon.com/vpc/latest/ipam/cloudwatch-ipam.html) et [Surveillance de l'utilisation du CIDR par ressource](https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html) dans la documentation du gestionnaire d'adresses IP. | AWS général | 
| Imposez l'utilisation du gestionnaire d'adresses IP. | Créez une politique de contrôle des services (SCP) AWS Organizations qui oblige les membres de votre organisation à utiliser le gestionnaire d'adresses IP lorsqu'ils créent un VPC. Pour obtenir des instructions, consultez la section [Appliquer l'utilisation d'IPAM pour la création de VPC](https://docs.aws.amazon.com/vpc/latest/ipam/scp-ipam.html) dans la SCPs documentation du gestionnaire d'adresses IP. | AWS général, administrateur AWS | 

## Résolution des problèmes
<a name="multi-region-ipam-architecture-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Terraform échoue avec une ressource de gestionnaire d'adresses IP introuvable | Assurez-vous que le compte administrateur du gestionnaire d'adresses IP est correctement délégué et que votre AWS fournisseur est authentifié auprès de ce compte. | 
| L'allocation de la plage CIDR échoue | Vérifiez que la plage d'adresses CIDR demandée correspond à la plage disponible du pool du gestionnaire d'adresses IP et qu'elle ne chevauche pas les allocations existantes. | 
| AWS RAM problèmes de partage | Vérifiez que le partage des ressources est activé pour votre AWS organisation. Vérifiez que le principal correct, l'Amazon Resource Name (ARN) de l'organisation, est utilisé dans le AWS RAM partage. | 
| Erreurs de validation de la hiérarchie du pool | Assurez-vous que les plages CIDR du pool enfant sont correctement contenues dans les plages CIDR du pool parent et qu'elles ne se chevauchent pas avec les pools frères. | 
| La limite de quota du gestionnaire d'adresses IP est dépassée | Demandez une augmentation du quota pour les pools du gestionnaire d'adresses IP. Pour plus d’informations, consultez [Demande d’augmentation de quota](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html) dans le *Guide de l’utilisateur Service Quotas*. | 

## Ressources connexes
<a name="multi-region-ipam-architecture-resources"></a>

**Service AWS documentation**
+ [Documentation du gestionnaire d'adresses IP Amazon VPC](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html)
+ [AWS Resource Access Manager documentation](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html)
+ [AWS Organizations documentation](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)

**AWS articles de blog**
+ [Gestion des pools d'adresses IP entre VPCs les régions à l'aide d'Amazon VPC IP Address Manager](https://aws.amazon.com/blogs/networking-and-content-delivery/managing-ip-pools-across-vpcs-and-regions-using-amazon-vpc-ip-address-manager/)
+ [Gestion et audit des adresses réseau à grande échelle avec Amazon VPC IP Address Manager](https://aws.amazon.com/blogs/aws/network-address-management-and-auditing-at-scale-with-amazon-vpc-ip-address-manager/)

**Vidéos et tutoriels**
+ [AWS re:INVENT 2022 : Bonnes pratiques pour la conception d'Amazon VPC et l'IPAM (0) NET31](https://www.youtube.com/watch?v=XrEHsy_8RYs)
+ [AWS re:INVENT 2022 : Conception avancée de VPC et nouvelles fonctionnalités (01) NET4](https://www.youtube.com/watch?v=tbXTVpwx87o)

## Informations supplémentaires
<a name="multi-region-ipam-architecture-additional"></a>

**Intégration avec AFT**

Vous pouvez intégrer cette solution à AWS Control Tower Account Factory for Terraform (AFT) pour vous assurer que les comptes nouvellement provisionnés reçoivent automatiquement les configurations réseau appropriées. En déployant cette solution IPAM dans votre compte de hub réseau, les nouveaux comptes créés via AFT peuvent référencer les pools de gestionnaires d'adresses IP partagés lors de leur création VPCs.

L'exemple de code suivant illustre l'intégration d'AFT dans la personnalisation d'un compte à l'aide de AWS Systems Manager Parameter Store :

```
# Get the IP Address Manager pool ID from Parameter Store
data "aws_ssm_parameter" "dev_ipam_pool_id" {
  name = "/org/network/ipam/finance/dev/pool-id"
}

# Create a VPC using the IP Address Manager pool
resource "aws_vpc" "this" {
  ipv4_ipam_pool_id   = data.aws_ssm_parameter.dev_ipam_pool_id.value
  ipv4_netmask_length = 24
  
  tags = {
    Name = "aft-account-vpc"
  }
}
```

**Stratégie de balisage**

La solution met en œuvre une stratégie de balisage complète pour faciliter la gestion des ressources. L'exemple de code suivant montre comment il est utilisé :

```
# Example tag configuration
module "tags" {
  source = "./modules/tags"
  
  # Required tags
  product_name  = "enterprise-network"
  feature_name  = "ipam"
  org_id        = "finance"
  business_unit = "network-operations"
  owner         = "network-team"
  environment   = "prod"
  repo          = "https://github.com/myorg/ipam-terraform"
  branch        = "main"
  cost_center   = "123456"
  dr_tier       = "tier1"
  
  # Optional tags
  optional_tags = {
    "project"    = "network-modernization"
    "stack_role" = "infrastructure"
  }
}
```

Ces balises sont automatiquement appliquées à toutes les ressources du gestionnaire d'adresses IP. Cela facilite la cohérence de la gouvernance, de la répartition des coûts et de la gestion des ressources.

# Personnalisez les CloudWatch alertes Amazon pour AWS Network Firewall
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall"></a>

*Jason Owens, Amazon Web Services*

## Résumé
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-summary"></a>

Le modèle vous permet de personnaliser les CloudWatch alertes Amazon générées par AWS Network Firewall. Vous pouvez utiliser des règles prédéfinies ou créer des règles personnalisées qui déterminent le message, les métadonnées et la gravité des alertes. Vous pouvez ensuite agir en fonction de ces alertes ou automatiser les réponses d'autres services Amazon, tels qu'Amazon EventBridge.

Dans ce modèle, vous générez des règles de pare-feu compatibles avec Suricata. [Suricata](https://suricata.io/) est un moteur de détection de menaces open source. Vous créez d'abord des règles simples, puis vous les testez pour confirmer que les CloudWatch alertes sont générées et enregistrées. Une fois que vous avez testé les règles avec succès, vous les modifiez pour définir des messages, des métadonnées et des niveaux de sévérité personnalisés, puis vous effectuez un nouveau test pour confirmer les mises à jour.

## Conditions préalables et limitations
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ AWS Command Line Interface (AWS CLI) installé et configuré sur votre poste de travail Linux, macOS ou Windows. Pour plus d'informations, consultez [Installation ou mise à jour de la version la plus récente de l' AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ AWS Network Firewall installé et configuré pour utiliser CloudWatch les journaux. Pour plus d'informations, consultez la section [Enregistrement du trafic réseau depuis AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-logging.html).
+ Une instance Amazon Elastic Compute Cloud (Amazon EC2) dans un sous-réseau privé d'un cloud privé virtuel (VPC) protégé par Network Firewall.

**Versions du produit**
+ Pour la version 1 de AWS CLI, utilisez 1.18.180 ou version ultérieure. Pour la version 2 de AWS CLI, utilisez la version 2.1.2 ou ultérieure.
+ Le fichier classification.config de Suricata version 5.0.2. Pour obtenir une copie de ce fichier de configuration, consultez la section [Informations supplémentaires](#customize-amazon-cloudwatch-alerts-for-aws-network-firewall-additional).

## Architecture
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-architecture"></a>

![\[Une demande d' EC2 instance génère une alerte dans Network Firewall, qui transmet l'alerte à CloudWatch\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/da6087a9-e942-4cfe-85e3-3b08de6f3ba5/images/778d85cd-bc87-4ed0-a161-d35eb5daa694.png)


Le schéma d'architecture montre le flux de travail suivant :

1. [Une EC2 instance Amazon située dans un sous-réseau privé envoie une demande à l'aide de [curl](https://curl.se/) ou de Wget.](https://www.gnu.org/software/wget/)

1. Network Firewall traite le trafic et génère une alerte.

1. Network Firewall envoie les alertes enregistrées à CloudWatch Logs.

## Outils
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-tools"></a>

**Services AWS**
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) vous CloudWatch aide à surveiller les indicateurs de vos AWS ressources et des applications que vous utilisez AWS en temps réel.
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) vous aide à centraliser les journaux de tous vos systèmes et applications, Services AWS afin que vous puissiez les surveiller et les archiver en toute sécurité.
+ [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 Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html)est un pare-feu réseau géré et dynamique ainsi qu'un service de détection et de prévention des intrusions pour les clouds privés virtuels (VPCs) dans le AWS Cloud. 

**Autres outils**
+ [curl](https://curl.se/) est un outil de ligne de commande et une bibliothèque open source.
+ [GNU Wget](https://www.gnu.org/software/wget/) est un outil de ligne de commande gratuit.

## Épopées
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-epics"></a>

### Création des règles de pare-feu et du groupe de règles
<a name="create-the-firewall-rules-and-rule-group"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Création de règles. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrateur système AWS, administrateur réseau | 
| Créez le groupe de règles. | Dans le AWS CLI, entrez la commande suivante. Cela crée le groupe de règles.<pre>❯ aws network-firewall create-rule-group \<br />        --rule-group-name custom --type STATEFUL \<br />        --capacity 10 --rules file://custom.rules \<br />        --tags Key=environment,Value=development</pre>Voici un exemple de sortie. Prenez note du`RuleGroupArn`, dont vous aurez besoin à une étape ultérieure.<pre>{<br />    "UpdateToken": "4f998d72-973c-490a-bed2-fc3460547e23",<br />    "RuleGroupResponse": {<br />        "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",<br />        "RuleGroupName": "custom",<br />        "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",<br />        "Type": "STATEFUL",<br />        "Capacity": 10,<br />        "RuleGroupStatus": "ACTIVE",<br />        "Tags": [<br />            {<br />                "Key": "environment",<br />                "Value": "development"<br />            }<br />        ]<br />    }</pre> | Administrateur système AWS | 

### Mettre à jour la politique de pare-feu
<a name="update-the-firewall-policy"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Obtenez l'ARN de la politique de pare-feu. | Dans le AWS CLI, entrez la commande suivante. Cela renvoie le nom de ressource Amazon (ARN) de la politique de pare-feu. Enregistrez l'ARN pour une utilisation ultérieure dans ce modèle.<pre>❯ aws network-firewall describe-firewall \<br />    --firewall-name aws-network-firewall-anfw \<br />    --query 'Firewall.FirewallPolicyArn'</pre>Voici un exemple d'ARN renvoyé par cette commande.<pre>"arn:aws:network-firewall:us-east-2:1234567890:firewall-policy/firewall-policy-anfw"</pre> | Administrateur système AWS | 
| Mettez à jour la politique de pare-feu. | Dans un éditeur de texte, copiez-collez le code suivant. `<RuleGroupArn>`Remplacez-le par la valeur que vous avez enregistrée dans l'épopée précédente. Enregistrez le fichier sous le nom `firewall-policy-anfw.json`.<pre>{<br />    "StatelessDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatelessFragmentDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatefulRuleGroupReferences": [<br />        {<br />            "ResourceArn": "<RuleGroupArn>"<br />        }<br />    ]<br />}</pre>Entrez la commande suivante dans le AWS CLI. Cette commande nécessite un [jeton de mise](https://docs.aws.amazon.com/cli/latest/reference/network-firewall/update-firewall-policy.html) à jour pour ajouter les nouvelles règles. Le jeton est utilisé pour confirmer que la politique n'a pas changé depuis que vous l'avez récupérée pour la dernière fois.<pre>UPDATETOKEN=(`aws network-firewall describe-firewall-policy \<br />              --firewall-policy-name firewall-policy-anfw \<br />              --output text --query UpdateToken`)<br /> <br /> aws network-firewall update-firewall-policy \<br /> --update-token $UPDATETOKEN \<br /> --firewall-policy-name firewall-policy-anfw \<br /> --firewall-policy file://firewall-policy-anfw.json</pre> | Administrateur système AWS | 
| Confirmez les mises à jour de la politique. | (Facultatif) Si vous souhaitez confirmer que les règles ont été ajoutées et consulter le format de la politique, entrez la commande suivante dans le AWS CLI.<pre>❯ aws network-firewall describe-firewall-policy \<br />  --firewall-policy-name firewall-policy-anfw \<br />  --query FirewallPolicy</pre>Voici un exemple de sortie.<pre>{<br />    "StatelessDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatelessFragmentDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatefulRuleGroupReferences": [<br />        {<br />            "ResourceArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom"<br />        }<br />    ]<br />}</pre> | Administrateur système AWS | 

### Fonctionnalité d'alerte de test
<a name="test-alert-functionality"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Générez des alertes pour les tests. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrateur système AWS | 
| Vérifiez que les alertes sont enregistrées. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrateur système AWS | 

### Mettre à jour les règles et le groupe de règles du pare-feu
<a name="update-the-firewall-rules-and-rule-group"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Mettez à jour les règles du pare-feu. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrateur système AWS | 
| Mettez à jour le groupe de règles. | Dans le AWS CLI, exécutez les commandes suivantes. Utilisez l'ARN de votre politique de pare-feu. Ces commandes obtiennent un jeton de mise à jour et mettent à jour le groupe de règles en fonction des modifications apportées aux règles.<pre>❯ UPDATETOKEN=(`aws network-firewall \<br />                describe-rule-group \<br />--rule-group-arn arn:aws:network-firewall:us-east-2:123457890:stateful-rulegroup/custom \<br />--output text --query UpdateToken`)</pre><pre> ❯ aws network-firewall update-rule-group \<br />  --rule-group-arn arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom \<br />--rules file://custom.rules \<br />--update-token $UPDATETOKEN</pre>Voici un exemple de sortie.<pre>{<br />    "UpdateToken": "7536939f-6a1d-414c-96d1-bb28110996ed",<br />    "RuleGroupResponse": {<br />        "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",<br />        "RuleGroupName": "custom",<br />        "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",<br />        "Type": "STATEFUL",<br />        "Capacity": 10,<br />        "RuleGroupStatus": "ACTIVE",<br />        "Tags": [<br />            {<br />                "Key": "environment",<br />                "Value": "development"<br />            }<br />        ]<br />    }<br />}</pre> | Administrateur système AWS | 

### Testez la fonctionnalité d'alerte mise à jour
<a name="test-the-updated-alert-functionality"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Générez une alerte à des fins de test. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrateur système AWS | 
| Validez l'alerte modifiée. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrateur système AWS | 

## Ressources connexes
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-resources"></a>

**Références**
+ [Envoyer des alertes depuis AWS Network Firewall une chaîne Slack (directives](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/send-alerts-from-aws-network-firewall-to-a-slack-channel.html)AWS prescriptives)
+ [Renforcer la prévention des menaces AWS grâce à Suricata](https://aws.amazon.com/blogs/opensource/scaling-threat-prevention-on-aws-with-suricata/) (AWS article de blog)
+ [Modèles de déploiement pour AWS Network Firewall](https://aws.amazon.com/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/) (article de AWS blog)
+ [Méta-clés Suricata (documentation Suricata](https://suricata.readthedocs.io/en/suricata-6.0.1/rules/meta.html))

**Tutoriels et vidéos**
+ [AWS Network Firewall atelier](https://networkfirewall.workshop.aws/)

## Informations supplémentaires
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-additional"></a>

Voici le fichier de configuration de classification de Suricata 5.0.2. Ces classifications sont utilisées lors de la création des règles de pare-feu.

```
# config classification:shortname,short description,priority
 
config classification: not-suspicious,Not Suspicious Traffic,3
config classification: unknown,Unknown Traffic,3
config classification: bad-unknown,Potentially Bad Traffic, 2
config classification: attempted-recon,Attempted Information Leak,2
config classification: successful-recon-limited,Information Leak,2
config classification: successful-recon-largescale,Large Scale Information Leak,2
config classification: attempted-dos,Attempted Denial of Service,2
config classification: successful-dos,Denial of Service,2
config classification: attempted-user,Attempted User Privilege Gain,1
config classification: unsuccessful-user,Unsuccessful User Privilege Gain,1
config classification: successful-user,Successful User Privilege Gain,1
config classification: attempted-admin,Attempted Administrator Privilege Gain,1
config classification: successful-admin,Successful Administrator Privilege Gain,1
 
# NEW CLASSIFICATIONS
config classification: rpc-portmap-decode,Decode of an RPC Query,2
config classification: shellcode-detect,Executable code was detected,1
config classification: string-detect,A suspicious string was detected,3
config classification: suspicious-filename-detect,A suspicious filename was detected,2
config classification: suspicious-login,An attempted login using a suspicious username was detected,2
config classification: system-call-detect,A system call was detected,2
config classification: tcp-connection,A TCP connection was detected,4
config classification: trojan-activity,A Network Trojan was detected, 1
config classification: unusual-client-port-connection,A client was using an unusual port,2
config classification: network-scan,Detection of a Network Scan,3
config classification: denial-of-service,Detection of a Denial of Service Attack,2
config classification: non-standard-protocol,Detection of a non-standard protocol or event,2
config classification: protocol-command-decode,Generic Protocol Command Decode,3
config classification: web-application-activity,access to a potentially vulnerable web application,2
config classification: web-application-attack,Web Application Attack,1
config classification: misc-activity,Misc activity,3
config classification: misc-attack,Misc Attack,2
config classification: icmp-event,Generic ICMP event,3
config classification: inappropriate-content,Inappropriate Content was Detected,1
config classification: policy-violation,Potential Corporate Privacy Violation,1
config classification: default-login-attempt,Attempt to login by a default username and password,2
 
# Update
config classification: targeted-activity,Targeted Malicious Activity was Detected,1
config classification: exploit-kit,Exploit Kit Activity Detected,1
config classification: external-ip-check,Device Retrieving External IP Address Detected,2
config classification: domain-c2,Domain Observed Used for C2 Detected,1
config classification: pup-activity,Possibly Unwanted Program Detected,2
config classification: credential-theft,Successful Credential Theft Detected,1
config classification: social-engineering,Possible Social Engineering Attempted,2
config classification: coin-mining,Crypto Currency Mining Activity Detected,2
config classification: command-and-control,Malware Command and Control Activity Detected,1
```

# Déployez des ressources dans une AWS Wavelength zone à l'aide de Terraform
<a name="deploy-resources-wavelength-zone-using-terraform"></a>

*Zahoor Chaudhrey et Luca Iannario, Amazon Web Services*

## Résumé
<a name="deploy-resources-wavelength-zone-using-terraform-summary"></a>

[AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)vous aide à créer une infrastructure optimisée pour les applications MEC (Multi-Access Edge Computing). Les *zones de longueur d'onde* sont des déploiements d' AWS infrastructures qui intègrent des services de AWS calcul et de stockage dans les réseaux 5G des fournisseurs de services de communication (CSP). Le trafic des applications provenant des appareils 5G atteint les serveurs d'applications fonctionnant dans les zones de Wavelength sans quitter le réseau de télécommunications. Les éléments suivants facilitent la connectivité réseau via Wavelength :
+ **Clouds privés virtuels (VPCs)** : ils VPCs Compte AWS peuvent être étendus pour couvrir plusieurs zones de disponibilité, y compris les zones Wavelength. Les instances Amazon Elastic Compute Cloud (Amazon EC2) et les services associés apparaissent dans le cadre de votre VPC régional. VPCs sont créés et gérés dans [Amazon Virtual Private Cloud (Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)).
+ **Passerelle porteuse** : une passerelle porteuse permet la connectivité entre le sous-réseau de la Wavelength Zone et le réseau du CSP, Internet ou Région AWS via le réseau du CSP. La passerelle du transporteur a deux objectifs. Il autorise le trafic entrant depuis un réseau CSP situé à un emplacement spécifique, et le trafic sortant vers le réseau de télécommunications et Internet.

Ce modèle et le code Terraform associé vous aident à lancer des ressources, telles que des EC2 instances Amazon, des volumes Amazon Elastic Block Store (Amazon EBS), des sous-réseaux et une passerelle de support VPCs, dans une zone Wavelength.

## Conditions préalables et limitations
<a name="deploy-resources-wavelength-zone-using-terraform-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Un environnement de développement intégré (IDE)
+ [Optez](https://docs.aws.amazon.com/wavelength/latest/developerguide/get-started-wavelength.html#enable-zone-group) pour la zone de longueur d'onde cible
+ AWS Command Line Interface (AWS CLI), [installé](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) et [configuré](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Terraform version 1.8.4 ou ultérieure, [installée](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) (documentation Terraform)
+ Terraform AWS Provider version 5.32.1 ou ultérieure, [configurée](https://hashicorp.github.io/terraform-provider-aws/) (documentation Terraform)
+ Git, [installé](https://github.com/git-guides/install-git) (GitHub)
+ [Autorisations](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) pour créer des ressources Amazon VPC, Wavelength et Amazon EC2 

**Limites**

Tous ne sont pas Régions AWS compatibles avec Wavelength Zones. Pour plus d'informations, consultez [Available Wavelength Zones](https://docs.aws.amazon.com/wavelength/latest/developerguide/available-wavelength-zones.html) dans la documentation Wavelength.

## Architecture
<a name="deploy-resources-wavelength-zone-using-terraform-architecture"></a>

Le schéma suivant montre comment créer un sous-réseau et des AWS ressources dans une Wavelength Zone. VPCs qui contiennent un sous-réseau dans une zone Wavelength peuvent se connecter à une passerelle porteuse. Une passerelle d'opérateur vous permet de vous connecter aux ressources suivantes :
+ Appareils 4G/LTE et 5G sur le réseau de l'opérateur de télécommunications.
+ Accès sans fil fixe pour certains partenaires de Wavelength Zone. Pour plus d'informations, consultez la section [Accès multiple AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/multi-access.html).
+ Trafic sortant vers les ressources Internet publiques.

![\[Une passerelle d'opérateur connecte les ressources AWS de la Wavelength Zone au réseau CSP.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/8c507de1-208c-4563-bb58-52388ab2fa6d/images/a4cc0699-0cbc-4f15-ab14-3ae569ced7f4.png)


## Outils
<a name="deploy-resources-wavelength-zone-using-terraform-tools"></a>

**Services AWS**
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d' AWS.
+ [AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)étend AWS Cloud l'infrastructure aux réseaux 5G des fournisseurs de télécommunications. Cela vous permet de créer des applications qui fournissent des latences extrêmement faibles aux appareils mobiles et aux utilisateurs finaux.

**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 sur site et dans le cloud.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [Creating AWS Wavelength Infrastructure using Terraform](https://github.com/aws-samples/terraform-wavelength-infrastructure). Le code Terraform déploie l'infrastructure et les ressources suivantes :
+ Un VPC
+ Une zone de longueur d'onde
+ Un sous-réseau public dans la Wavelength Zone
+ Une passerelle porteuse dans la Wavelength Zone
+ Une EC2 instance Amazon dans la Wavelength Zone

## Bonnes pratiques
<a name="deploy-resources-wavelength-zone-using-terraform-best-practices"></a>
+ Avant le déploiement, vérifiez que vous utilisez les dernières versions de Terraform et du. AWS CLI
+ Utilisez un pipeline d'intégration et de livraison continues (CI/CD) pour déployer IaC. Pour plus d'informations, consultez [Bonnes pratiques pour la gestion des fichiers Terraform State dans AWS CI/CD](https://aws.amazon.com/blogs/devops/best-practices-for-managing-terraform-state-files-in-aws-ci-cd-pipeline/) Pipeline on Blogs. AWS 

## Épopées
<a name="deploy-resources-wavelength-zone-using-terraform-epics"></a>

### Fournir l'infrastructure
<a name="provision-the-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Entrez la commande suivante pour cloner le référentiel [Creating AWS Wavelength Infrastructure using Terraform](https://github.com/aws-samples/terraform-wavelength-infrastructure) dans votre environnement.`git clone git@github.com:aws-samples/terraform-wavelength-infrastructure.git` | DevOps ingénieur | 
| Mettez à jour les variables. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps ingénieur, Terraform | 
| Initialisez la configuration. | Entrez la commande suivante pour initialiser le répertoire de travail.<pre>terraform init</pre> | DevOps ingénieur, Terraform | 
| Prévisualisez le plan Terraform. | Entrez la commande suivante pour comparer l'état cible à l'état actuel de votre AWS environnement. Cette commande génère un aperçu des ressources qui seront configurées.<pre>terraform plan</pre> | DevOps ingénieur, Terraform | 
| Vérifiez et déployez. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps ingénieur, Terraform | 

### Valider et nettoyer
<a name="validate-and-clean-up"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez le déploiement de l'infrastructure. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | AWS DevOps, DevOps ingénieur | 
| (Facultatif) Nettoyez l'infrastructure. | Si vous devez supprimer toutes les ressources fournies par Terraform, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps ingénieur, Terraform | 

## Résolution des problèmes
<a name="deploy-resources-wavelength-zone-using-terraform-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Connectivité aux EC2 instances Amazon dans le Région AWS. | Consultez [Résoudre les problèmes de connexion à votre instance Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html) ou [Résoudre les problèmes de connexion à votre instance Windows](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/troubleshooting-windows-instances.html). | 
| Connectivité aux EC2 instances Amazon dans la Wavelength Zone. | Consultez [Résoudre les problèmes de connectivité SSH ou RDP à mes EC2 instances lancées dans une zone Wavelength](https://repost.aws/knowledge-center/ec2-wavelength-zone-connection-errors). | 
| Capacité dans la zone de longueur d'onde. | Voir [Quotas et considérations relatives aux zones de longueur d'onde](https://docs.aws.amazon.com/wavelength/latest/developerguide/wavelength-quotas.html). | 
| Connectivité mobile ou opérateur entre le réseau de l'opérateur et le Région AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | 

## Ressources connexes
<a name="deploy-resources-wavelength-zone-using-terraform-resources"></a>
+ [Qu'est-ce que c'est AWS Wavelength ?](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)
+ [Comment AWS Wavelength fonctionne](https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html)
+ [Résilience dans AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/disaster-recovery-resiliency.html)

# Migrer des enregistrements DNS en masse vers une zone hébergée privée Amazon Route 53
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone"></a>

*Ram Kandaswamy, Amazon Web Services*

## Résumé
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-summary"></a>

Les ingénieurs réseau et les administrateurs cloud ont besoin d'un moyen simple et efficace d'ajouter des enregistrements DNS (Domain Name System) aux zones hébergées privées sur Amazon Route 53. L'utilisation d'une approche manuelle pour copier les entrées d'une feuille de calcul Microsoft Excel vers les emplacements appropriés de la console Route 53 est fastidieuse et source d'erreurs. Ce modèle décrit une approche automatisée qui réduit le temps et les efforts nécessaires pour ajouter plusieurs enregistrements. Il fournit également un ensemble d'étapes répétables pour la création de plusieurs zones hébergées.

Ce modèle utilise Amazon Simple Storage Service (Amazon S3) pour stocker les enregistrements. Pour travailler efficacement avec les données, le modèle utilise le format JSON en raison de sa simplicité et de sa capacité à prendre en charge un dictionnaire Python (type de `dict` données).

**Note**  
Si vous pouvez générer un fichier de zone à partir de votre système, pensez plutôt à utiliser la [fonctionnalité d'importation Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html).

## Conditions préalables et limitations
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-prereqs"></a>

**Conditions préalables**
+ Feuille de calcul Excel contenant des enregistrements de zones hébergées privées
+ Connaissance des différents types d'enregistrements DNS tels que l'enregistrement A, l'enregistrement NAPTR (Name Authority Pointer) et l'enregistrement SRV (voir Types d'[enregistrements DNS pris en charge](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html))
+ Connaissance du langage Python et de ses bibliothèques

**Limites**
+ Le modèle ne fournit pas une couverture étendue pour tous les scénarios d'utilisation. Par exemple, l'appel [change\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) n'utilise pas toutes les propriétés disponibles de l'API.
+ Dans la feuille de calcul Excel, la valeur de chaque ligne est supposée être unique. Plusieurs valeurs pour chaque nom de domaine complet (FQDN) devraient apparaître dans la même ligne. Si ce n'est pas le cas, vous devez modifier le code fourni dans ce modèle pour effectuer la concaténation nécessaire.
+ Le modèle utilise le SDK AWS pour Python (Boto3) pour appeler directement le service Route 53. Vous pouvez améliorer le code pour utiliser un CloudFormation wrapper AWS pour les `update_stack` commandes `create_stack` and, et utiliser les valeurs JSON pour renseigner les ressources du modèle.

## Architecture
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-architecture"></a>

**Pile technologique**
+ Route 53 zones hébergées privées pour acheminer le trafic
+ Amazon S3 pour le stockage du fichier JSON de sortie

![\[Flux de travail pour la migration d'enregistrements DNS en masse vers une zone hébergée privée Route 53.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9/images/2ada844b-4147-4f9f-8883-d22605aa42d8.png)


Le flux de travail comprend les étapes suivantes, comme illustré dans le schéma précédent et décrit dans la section *Epics* :

1. Téléchargez une feuille de calcul Excel contenant les informations du jeu d'enregistrements dans un compartiment S3.

1. Créez et exécutez un script Python qui convertit les données Excel au format JSON.

1. Lisez les enregistrements du compartiment S3 et nettoyez les données.

1. Créez des ensembles de records dans votre zone hébergée privée.

## Outils
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-tools"></a>
+ [Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) — Amazon Route 53 est un service Web DNS hautement disponible et évolutif qui gère l'enregistrement des domaines, le routage DNS et la vérification de l'état de santé.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) — Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets. Vous pouvez utiliser Amazon S3 pour stocker et récupérer n'importe quelle quantité de données, n'importe quand et depuis n'importe quel emplacement sur le Web.

## Épopées
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-epics"></a>

### Préparer les données pour l'automatisation
<a name="prepare-data-for-automation"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un fichier Excel pour vos dossiers. | Utilisez les enregistrements que vous avez exportés depuis votre système actuel pour créer une feuille de calcul Excel contenant les colonnes requises pour un enregistrement, telles que le nom de domaine complet (FQDN), le type d'enregistrement, le temps de vie (TTL) et la valeur. Pour les enregistrements NAPTR et SRV, la valeur est une combinaison de plusieurs propriétés. Utilisez donc la `concat` méthode d'Excel pour combiner ces propriétés.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | Ingénieur de données, compétences Excel | 
| Vérifiez l'environnement de travail. | Dans votre IDE, créez un fichier Python pour convertir la feuille de calcul d'entrée Excel au format JSON. (Au lieu d'un IDE, vous pouvez également utiliser un SageMaker bloc-notes Amazon pour travailler avec du code Python.)Vérifiez que la version de Python que vous utilisez est la version 3.7 ou ultérieure.<pre> python3 --version</pre>Installez le package **pandas**.<pre> pip3 install pandas --user</pre> | AWS général | 
| Convertissez les données de la feuille de calcul Excel en JSON. | Créez un fichier Python contenant le code suivant pour convertir Excel en JSON.<pre>import pandas as pd<br />data=pd.read_excel('./Book1.xls')<br />data.to_json(path_or_buf='my.json',orient='records')</pre>où `Book1` est le nom de la feuille de calcul Excel et `my.json` le nom du fichier JSON de sortie. | Ingénieur de données, compétences en Python | 
| Téléchargez le fichier JSON dans un compartiment S3. | Chargez le fichier `my.json` dans un compartiment S3. Pour plus d'informations, consultez [la section Création d'un compartiment](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) dans la documentation Amazon S3. | Développeur d’applications | 
| FqdnName | RecordType | Value | TTL | 
| something.exemple.org | A | 1.1.1.1 | 900 | 

### Insérer des enregistrements
<a name="insert-records"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une zone hébergée privée. | Utilisez l'[API create\$1hosted\$1zone et l'](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone)exemple de code Python suivant pour créer une zone hébergée privée. Remplacez les paramètres `hostedZoneName``vpcRegion`, et `vpcId` par vos propres valeurs.<pre>import boto3<br />import random<br />hostedZoneName ="xxx"<br />vpcRegion = "us-east-1"<br />vpcId="vpc-xxxx"<br />route53_client = boto3.client('route53')<br />response = route53_client.create_hosted_zone(<br />        Name= hostedZoneName,<br />        VPC={<br />            'VPCRegion: vpcRegion,<br />            'VPCId': vpcId<br />        },<br />        CallerReference=str(random.random()*100000),<br />        HostedZoneConfig={<br />            'Comment': "private hosted zone created by automation",<br />            'PrivateZone': True<br />        }<br />    )<br /> print(response)</pre>Vous pouvez également utiliser un outil d'infrastructure en tant que code (IaC) tel qu'AWS CloudFormation pour remplacer ces étapes par un modèle qui crée une pile dotée des ressources et propriétés appropriées. | Architecte cloud, administrateur réseau, compétences en Python | 
| Récupérez les détails sous forme de dictionnaire depuis Amazon S3. | Utilisez le code suivant pour lire le contenu du compartiment S3 et obtenir les valeurs JSON sous forme de dictionnaire Python. <pre>fileobj = s3_client.get_object(<br />        Bucket=bucket_name,<br />        Key='my.json'<br />        )<br />    filedata = fileobj['Body'].read()<br />    contents = filedata.decode('utf-8')<br />    json_content=json.loads(contents)<br />    print(json_content)</pre>où `json_content` contient le dictionnaire Python. | Développeur d'applications, compétences en Python | 
| Nettoyez les valeurs de données pour les espaces et les caractères Unicode. | Par mesure de sécurité afin de garantir l'exactitude des données, utilisez le code suivant pour effectuer une opération de découpage sur les valeurs saisies. `json_content` Ce code supprime les espaces au début et à la fin de chaque chaîne. Il utilise également la `replace` méthode pour supprimer les espaces durs (non cassants) (les `\xa0` caractères).<pre>for item in json_content:<br />    fqn_name = unicodedata.normalize("NFKD",item["FqdnName"].replace("u'", "'").replace('\xa0', '').strip())<br />    rec_type = item["RecordType"].replace('\xa0', '').strip()<br />    res_rec = {<br />                 'Value': item["Value"].replace('\xa0', '').strip()<br />                }</pre> | Développeur d'applications, compétences en Python | 
| Insérez des enregistrements. | Utilisez le code suivant dans le cadre de la `for` boucle précédente.<pre>change_response = route53_client.change_resource_record_sets(<br />            HostedZoneId="xxxxxxxx",<br />            ChangeBatch={<br />                'Comment': 'Created by automation',<br />                'Changes': [<br />                    {<br />                        'Action': 'UPSERT',<br />                        'ResourceRecordSet': {<br />                            'Name': fqn_name,<br />                            'Type': rec_type,<br />                            'TTL': item["TTL"],<br />                            'ResourceRecords': res_rec<br />                        }<br />                    }<br />                ]<br />            }<br />    )</pre>Où se `xxxxxxx` trouve l'identifiant de la zone hébergée dès la première étape de cette épopée. | Développeur d'applications, compétences en Python | 

## Ressources connexes
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-resources"></a>

**Références**
+ [Création d'enregistrements en important un fichier de zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) (documentation Amazon Route 53)
+ méthode [create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) (documentation Boto3)
+ [méthode change\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) (documentation Boto3)

**Tutoriels et vidéos**
+ [Le didacticiel Python](https://docs.python.org/3/tutorial/) (documentation Python)
+ [Conception du DNS à l'aide d'Amazon Route 53](https://www.youtube.com/watch?v=2y_RBjDkRgY) (YouTube vidéo, *AWS Online Tech Talks*)

# Modifiez les en-têtes HTTP lors de la migration de F5 vers un Application Load Balancer sur AWS
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws"></a>

*Sachin Trivedi, Amazon Web Services*

## Résumé
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-summary"></a>

Lorsque vous migrez une application qui utilise un équilibreur de charge F5 vers Amazon Web Services (AWS) et que vous souhaitez utiliser un équilibreur de charge d'application sur AWS, la migration des règles F5 pour les modifications d'en-tête est un problème courant. Un Application Load Balancer ne prend pas en charge les modifications d'en-têtes, mais vous pouvez utiliser Amazon CloudFront comme réseau de diffusion de contenu (CDN) et Lambda @Edge pour modifier les en-têtes.

Ce modèle décrit les intégrations requises et fournit un exemple de code pour la modification des en-têtes à l'aide d'AWS CloudFront et Lambda @Edge.

## Conditions préalables et limitations
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-prereqs"></a>

**Conditions préalables**
+ Application locale qui utilise un équilibreur de charge F5 avec une configuration qui remplace la valeur d'en-tête HTTP en utilisant. `if, else` Pour plus d'informations sur cette configuration, consultez [HTTP : :header](https://clouddocs.f5.com/api/irules/HTTP__header.html) dans la documentation du produit F5. 

**Limites**
+ Ce modèle s'applique à la personnalisation de l'en-tête de l'équilibreur de charge F5. Pour les autres équilibreurs de charge tiers, consultez la documentation de l'équilibreur de charge pour obtenir des informations d'assistance.
+ Les fonctions Lambda que vous utilisez pour Lambda @Edge doivent se trouver dans la région USA Est (Virginie du Nord).

## Architecture
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-architecture"></a>

Le schéma suivant montre l'architecture d'AWS, y compris le flux d'intégration entre le CDN et les autres composants AWS.

![\[Architecture pour la modification des en-têtes à l'aide d'Amazon CloudFront et Lambda @Edge\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/00abbe3c-2453-4291-9b24-b488dced4868/images/4ee9a19e-6da2-4c5a-a8bc-19d3918a166e.png)


## Outils
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-tools"></a>

**Services AWS**
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) ─ Un Application Load Balancer est un service d'équilibrage de charge entièrement géré par AWS qui fonctionne au niveau de la septième couche du modèle d'interconnexion des systèmes ouverts (OSI). Il équilibre le trafic entre plusieurs cibles et prend en charge les demandes de routage avancées basées sur les en-têtes et les méthodes HTTP, les chaînes de requête et le routage basé sur l'hôte ou le chemin.
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) — Amazon CloudFront est un service Web qui accélère la distribution de votre contenu Web statique et dynamique, tel que les fichiers .html, .css, .js et les fichiers image, à vos utilisateurs. CloudFront diffuse votre contenu via un réseau mondial de centres de données appelés emplacements périphériques pour réduire la latence et améliorer les performances.
+ [Lambda @Edge ─](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html) Lambda @Edge est une extension d'AWS Lambda qui vous permet d'exécuter des fonctions pour personnaliser le contenu diffusé. CloudFront Vous pouvez créer des fonctions dans la région USA Est (Virginie du Nord), puis associer la fonction à une CloudFront distribution pour répliquer automatiquement votre code dans le monde entier, sans provisionner ni gérer de serveurs. Cela réduit le temps de latence et améliore l'expérience utilisateur.

**Code**

L'exemple de code suivant fournit un modèle pour modifier les en-têtes de CloudFront réponse. Suivez les instructions de la section *Epics* pour déployer le code.

```
exports.handler = async (event, context) => {
    const response = event.Records[0].cf.response;
    const headers = response.headers;


    const headerNameSrc = 'content-security-policy';
    const headerNameValue = '*.xyz.com';


    if (headers[headerNameSrc.toLowerCase()]) {
        headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
        }];
        console.log(`Response header "${headerNameSrc}" was set to ` +
                    `"${headers[headerNameSrc.toLowerCase()][0].value}"`);
    }
    else {
            headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
            }];
    }
    return response;
};
```

## Épopées
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-epics"></a>

### Création d'une distribution CDN
<a name="create-a-cdn-distribution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une distribution CloudFront Web.  | Au cours de cette étape, vous créez une CloudFront distribution indiquant d' CloudFront où vous souhaitez que le contenu soit diffusé, ainsi que les détails sur le suivi et la gestion de la diffusion du contenu.Pour créer une distribution à l'aide de la console, connectez-vous à l'AWS Management Console, ouvrez la [CloudFront console](https://console.aws.amazon.com/cloudfront/v3/home), puis suivez les étapes décrites dans la [CloudFront documentation](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html). | Administrateur du cloud | 

### Création et déploiement de la fonction Lambda @Edge
<a name="create-and-deploy-the-lambda-edge-function"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez et déployez une fonction Lambda @Edge. | Vous pouvez créer une fonction Lambda @Edge en utilisant un plan pour modifier CloudFront les en-têtes de réponse. (D'autres BluePrints sont disponibles pour différents cas d'utilisation ; pour plus d'informations, consultez les [exemples de fonctions Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) dans CloudFront la documentation.) Pour créer une fonction Lambda @Edge :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.html) | Administrateur AWS | 
| Déployez la fonction Lambda @Edge. | Suivez les instructions de l'[étape 4](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html#lambda-edge-how-it-works-tutorial-add-trigger) du *didacticiel : Création d'une fonction Lambda @Edge simple dans la* CloudFront documentation Amazon pour configurer le CloudFront déclencheur et déployer la fonction. | Administrateur AWS | 

## Ressources connexes
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-resources"></a>

**CloudFront documentation**
+ [Comportement des demandes et des réponses pour les origines personnalisées](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html) 
+ [Utilisation des distributions](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html) 
+ [Exemples de fonctions Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) 
+ [Personnalisation à la périphérie avec Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html)
+ [Tutoriel : Création d'une fonction Lambda @Edge simple](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html)

# Créez un rapport sur les résultats de l'analyseur d'accès réseau pour l'accès Internet entrant en plusieurs Comptes AWS
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts"></a>

*Mike Virgilio, Amazon Web Services*

## Résumé
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-summary"></a>

L'accès Internet entrant involontaire aux AWS ressources peut présenter des risques pour le périmètre de données d'une entreprise. [Network Access Analyzer](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html) est une fonctionnalité d'Amazon Virtual Private Cloud (Amazon VPC) qui vous aide à identifier les accès réseau non intentionnels à vos ressources sur Amazon Web Services ().AWS Vous pouvez utiliser Network Access Analyzer pour définir vos exigences en matière d'accès au réseau et pour identifier les chemins réseau potentiels qui ne répondent pas à vos exigences. Vous pouvez utiliser Network Access Analyzer pour effectuer les opérations suivantes :

1. Identifiez les AWS ressources accessibles sur Internet via des passerelles Internet.

1. Vérifiez que vos clouds privés virtuels (VPCs) sont correctement segmentés, par exemple en isolant les environnements de production et de développement et en séparant les charges de travail transactionnelles.

Network Access Analyzer analyse les conditions d' end-to-endaccessibilité du réseau et ne se limite pas à un seul composant. Pour déterminer si une ressource est accessible à Internet, Network Access Analyzer évalue la passerelle Internet, les tables de routage VPC, les listes de contrôle d'accès réseau (ACLs), les adresses IP publiques sur les interfaces réseau élastiques et les groupes de sécurité. Si l'un de ces composants empêche l'accès à Internet, Network Access Analyzer ne génère aucun résultat. Par exemple, si une instance Amazon Elastic Compute Cloud (Amazon EC2) possède un groupe de sécurité ouvert qui autorise le trafic en provenance `0/0` mais que l'instance se trouve dans un sous-réseau privé qui n'est pas routable depuis une passerelle Internet, Network Access Analyzer ne générera aucun résultat. Cela permet d'obtenir des résultats très fidèles afin que vous puissiez identifier les ressources réellement accessibles depuis Internet.

Lorsque vous exécutez Network Access Analyzer, vous utilisez les [étendues d'accès réseau pour définir vos exigences](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html#concepts) en matière d'accès au réseau. Cette solution identifie les chemins réseau entre une passerelle Internet et une interface réseau élastique. Dans ce modèle, vous déployez la solution de manière centralisée Compte AWS au sein de votre organisation, gérée par AWS Organizations, et elle analyse tous les comptes de l'organisation Région AWS, quel que soit leur emplacement.

Cette solution a été conçue avec les éléments suivants à l'esprit :
+ Les AWS CloudFormation modèles réduisent l'effort requis pour déployer les AWS ressources selon ce modèle.
+ Vous pouvez ajuster les paramètres des CloudFormation modèles et du script **naa-script.sh** au moment du déploiement afin de les personnaliser en fonction de votre environnement.
+ Les scripts Bash provisionnent et analysent automatiquement les étendues d'accès réseau pour plusieurs comptes, en parallèle.
+ Un script Python traite les résultats, extrait les données, puis consolide les résultats. Vous pouvez choisir de consulter le rapport consolidé des résultats de l'analyseur d'accès réseau au format CSV ou au AWS Security Hub CSPM format. Un exemple de rapport CSV est disponible dans la section [Informations supplémentaires](#create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-additional) de ce modèle.
+ Vous pouvez corriger les résultats ou les exclure des analyses futures en les ajoutant au fichier **naa-exclusions.csv**.

## Conditions préalables et limitations
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-prereqs"></a>

**Conditions préalables**
+ Et Compte AWS pour héberger des services et outils de sécurité, gérés en tant que compte membre d'une organisation dans AWS Organizations. Dans ce modèle, ce compte est appelé compte de sécurité.
+ Dans le compte de sécurité, vous devez disposer d'un sous-réseau privé avec accès Internet sortant. Pour obtenir des instructions, consultez la section [Créer un sous-réseau](https://docs.aws.amazon.com/vpc/latest/userguide/create-subnets.html) dans la documentation Amazon VPC. Vous pouvez établir un accès à Internet à l'aide d'une [passerelle NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) ou d'un point de [terminaison VPC d'interface](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html).
+ Accès au compte AWS Organizations de gestion ou à un compte doté d'autorisations d'administrateur déléguées pour CloudFormation. Pour obtenir des instructions, voir [Enregistrer un administrateur délégué](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) dans la CloudFormation documentation.
+ Activez un accès fiable entre AWS Organizations et CloudFormation. Pour obtenir des instructions, consultez la section [Activer l'accès sécurisé avec AWS Organizations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) dans la CloudFormation documentation.
+ Si vous téléchargez les résultats vers Security Hub CSPM, Security Hub CSPM doit être activé sur le compte et sur l'endroit où Région AWS l'instance Amazon est mise en service. EC2 Pour plus d’informations, consultez [Configuration AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-settingup.html).

**Limites**
+ Les chemins réseau entre comptes ne sont actuellement pas analysés en raison des limites de la fonctionnalité Network Access Analyzer.
+ La cible Comptes AWS doit être gérée en tant qu'organisation dans AWS Organizations. **Si vous ne l'utilisez pas AWS Organizations, vous pouvez mettre à jour le CloudFormation modèle **naa-execrole.yaml** et le script naa-script.sh pour votre environnement.** Au lieu de cela, vous fournissez une liste Compte AWS IDs des régions dans lesquelles vous souhaitez exécuter le script.
+ Le CloudFormation modèle est conçu pour déployer l' EC2 instance Amazon dans un sous-réseau privé doté d'un accès Internet sortant. L' AWS Systems Manager agent (agent SSM) a besoin d'un accès sortant pour atteindre le point de terminaison du service Systems Manager, et vous avez besoin d'un accès sortant pour cloner le référentiel de code et installer les dépendances. Si vous souhaitez utiliser un sous-réseau public, vous devez modifier le modèle **naa-resources.yaml** pour associer une [adresse IP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) élastique à l'instance Amazon. EC2 

## Architecture
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-architecture"></a>

**Architecture cible**

*Option 1 : accéder aux résultats dans un compartiment Amazon S3*

![\[Schéma d'architecture permettant d'accéder au rapport des résultats de l'analyseur d'accès réseau dans un compartiment Amazon S3\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/d0b08437-e5b0-47a1-abdd-040c67b5da8f.png)


Le schéma montre le processus suivant :

1. Si vous exécutez la solution manuellement, l'utilisateur s'authentifie auprès de l' EC2 instance Amazon à l'aide du gestionnaire de session, puis exécute le script **naa-script.sh**. Ce script shell exécute les étapes 2 à 7.

   Si vous exécutez automatiquement la solution, le script **naa-script.sh** démarre automatiquement selon le calendrier que vous avez défini dans l'expression cron. Ce script shell exécute les étapes 2 à 7. Pour plus d'informations, voir *Automatisation et mise à l'échelle* à la fin de cette section.

1. L' EC2 instance Amazon télécharge le dernier fichier **naa-exception.csv** depuis le compartiment Amazon S3. Ce fichier est utilisé ultérieurement dans le processus lorsque le script Python traite les exclusions.

1. L' EC2 instance Amazon assume le rôle `NAAEC2Role` Gestion des identités et des accès AWS (IAM), qui accorde les autorisations d'accès au compartiment Amazon S3 et d'assumer les rôles `NAAExecRole` IAM dans les autres comptes de l'organisation.

1. L' EC2 instance Amazon assume le rôle `NAAExecRole` IAM dans le compte de gestion de l'organisation et génère une liste des comptes de l'organisation.

1. L' EC2 instance Amazon assume le rôle `NAAExecRole` IAM dans les comptes membres de l'organisation (appelés comptes de *charge* de travail dans le schéma d'architecture) et effectue une évaluation de la sécurité de chaque compte. Les résultats sont stockés sous forme de fichiers JSON sur l' EC2 instance Amazon.

1. L' EC2 instance Amazon utilise un script Python pour traiter les fichiers JSON, extraire les champs de données et créer un rapport CSV.

1. L' EC2 instance Amazon télécharge le fichier CSV dans le compartiment Amazon S3.

1. Une EventBridge règle Amazon détecte le téléchargement du fichier et utilise une rubrique Amazon SNS pour envoyer un e-mail informant l'utilisateur que le rapport est complet.

1. L'utilisateur télécharge le fichier CSV depuis le compartiment Amazon S3. L'utilisateur importe les résultats dans le modèle Excel et les examine.

*Option 2 : Accédez aux résultats dans AWS Security Hub CSPM*

![\[Schéma d'architecture permettant d'accéder aux résultats de l'analyseur d'accès au réseau via AWS Security Hub\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/9cb4f059-dfb6-4a33-9f8d-159fe5df0d64.png)


Le schéma montre le processus suivant :

1. Si vous exécutez la solution manuellement, l'utilisateur s'authentifie auprès de l' EC2 instance Amazon à l'aide du gestionnaire de session, puis exécute le script **naa-script.sh**. Ce script shell exécute les étapes 2 à 7.

   Si vous exécutez automatiquement la solution, le script **naa-script.sh** démarre automatiquement selon le calendrier que vous avez défini dans l'expression cron. Ce script shell exécute les étapes 2 à 7. Pour plus d'informations, voir *Automatisation et mise à l'échelle* à la fin de cette section.

1. L' EC2 instance Amazon télécharge le dernier fichier **naa-exception.csv** depuis le compartiment Amazon S3. Ce fichier est utilisé ultérieurement dans le processus lorsque le script Python traite les exclusions.

1. L' EC2 instance Amazon assume le rôle `NAAEC2Role` IAM, qui accorde les autorisations d'accès au compartiment Amazon S3 et d'assumer les rôles `NAAExecRole` IAM dans les autres comptes de l'organisation.

1. L' EC2 instance Amazon assume le rôle `NAAExecRole` IAM dans le compte de gestion de l'organisation et génère une liste des comptes de l'organisation.

1. L' EC2 instance Amazon assume le rôle `NAAExecRole` IAM dans les comptes membres de l'organisation (appelés comptes de *charge* de travail dans le schéma d'architecture) et effectue une évaluation de la sécurité de chaque compte. Les résultats sont stockés sous forme de fichiers JSON sur l' EC2 instance Amazon.

1. L' EC2 instance Amazon utilise un script Python pour traiter les fichiers JSON et extraire les champs de données à importer dans Security Hub CSPM.

1. L' EC2 instance Amazon importe les résultats de l'analyseur d'accès réseau dans Security Hub CSPM.

1. Une EventBridge règle Amazon détecte l'importation et utilise une rubrique Amazon SNS pour envoyer un e-mail informant l'utilisateur que le processus est terminé.

1. L'utilisateur consulte les résultats dans Security Hub CSPM.

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

Vous pouvez planifier cette solution pour exécuter le script **naa-script.sh** automatiquement selon un calendrier personnalisé. Pour définir un calendrier personnalisé, modifiez le paramètre dans le **modèle naa-resources.yaml** CloudFormation . `CronScheduleExpression` Par exemple, la valeur par défaut de `0 0 * * 0` exécute la solution tous les dimanches à minuit. Une valeur de `0 0 * 1-12 0` exécuterait la solution à minuit le premier dimanche de chaque mois. Pour plus d'informations sur l'utilisation des expressions cron, consultez les [expressions Cron et rate](https://docs.aws.amazon.com/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html) dans la documentation de Systems Manager.

Si vous souhaitez ajuster le calendrier une fois la `NAA-Resources` pile déployée, vous pouvez modifier manuellement le calendrier cron dans`/etc/cron.d/naa-schedule`.

## Outils
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-tools"></a>

**Services AWS**
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) fournit une capacité de calcul évolutive dans le AWS Cloud. Vous pouvez lancer autant de serveurs virtuels que vous le souhaitez et les augmenter ou les diminuer rapidement.
+ [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, des AWS Lambda fonctions, des points de terminaison d'invocation HTTP utilisant des destinations d'API ou des bus d'événements dans d'autres. Comptes AWS
+ [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 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.
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)fournit une vue complète de votre état de sécurité dans AWS. Il vous permet également de vérifier que votre AWS environnement est conforme aux normes et aux meilleures pratiques du secteur de la sécurité.
+ [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.
+ [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 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. Ce modèle utilise le Gestionnaire de session, une fonctionnalité de Systems Manager.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel d'analyse [multi-comptes de GitHub Network Access Analyzer](https://github.com/aws-samples/network-access-analyzer-multi-account-analysis). Le référentiel de code contient les fichiers suivants :
+ **naa-script.sh** — Ce script bash est utilisé pour démarrer une analyse de plusieurs fichiers par Network Access Analyzer Comptes AWS, en parallèle. Comme défini dans le CloudFormation modèle **naa-resources.yaml**, ce script est automatiquement déployé dans le dossier `/usr/local/naa` de l'instance Amazon. EC2 
+ **naa-resources.yaml** — Vous utilisez ce CloudFormation modèle pour créer une pile dans le compte de sécurité de l'organisation. Ce modèle déploie toutes les ressources requises pour ce compte afin de prendre en charge la solution. Cette pile doit être déployée avant le modèle **naa-execrole.yaml**.
**Note**  
Si cette pile est supprimée et redéployée, vous devez reconstruire l'ensemble de `NAAExecRole` piles afin de rétablir les dépendances entre comptes entre les rôles IAM.
+ **naa-execrole.yaml** — Vous utilisez ce CloudFormation modèle pour créer un stack set qui déploie le rôle `NAAExecRole` IAM dans tous les comptes de l'organisation, y compris le compte de gestion.
+ **naa-processfindings.py** — Le script **naa-script.sh** appelle automatiquement ce script Python pour traiter les sorties JSON de Network Access Analyzer, exclure toute ressource dont le fonctionnement a été vérifié dans le fichier **naa-exclusions.csv**, puis générer un fichier CSV contenant les résultats consolidés ou importer les résultats dans Security Hub CSPM.

## Épopées
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-epics"></a>

### Préparation au déploiement
<a name="prepare-for-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le référentiel de code. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Passez en revue les modèles. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Créez les CloudFormation piles
<a name="create-the-cfnshort-stacks"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Fournir des ressources dans le compte de sécurité. | À l'aide du modèle **naa-resources.yaml**, vous créez une CloudFormation pile qui déploie toutes les ressources requises dans le compte de sécurité. Pour obtenir des instructions, consultez [la section Création d'une pile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) dans la CloudFormation documentation. Notez les points suivants lors du déploiement de ce modèle :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Fournissez le rôle IAM dans les comptes des membres. | Dans le compte AWS Organizations de gestion ou dans un compte doté d'autorisations d'administrateur déléguées pour CloudFormation, utilisez le modèle **naa-execrole.yaml** pour créer un stack set. CloudFormation Le stack set déploie le rôle `NAAExecRole` IAM dans tous les comptes membres de l'organisation. Pour obtenir des instructions, consultez la section [Créer un ensemble de piles avec des autorisations gérées par les services](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started-create.html#stacksets-orgs-associate-stackset-with-org) dans la CloudFormation documentation. Notez les points suivants lors du déploiement de ce modèle :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Attribuez le rôle IAM dans le compte de gestion. | À l'aide du modèle **naa-execrole.yaml**, vous créez une CloudFormation pile qui déploie le rôle `NAAExecRole` IAM dans le compte de gestion de l'organisation. Le stack set que vous avez créé précédemment ne déploie pas le rôle IAM dans le compte de gestion. Pour obtenir des instructions, consultez [la section Création d'une pile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) dans la CloudFormation documentation. Notez les points suivants lors du déploiement de ce modèle :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Effectuez l'analyse
<a name="perform-the-analysis"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Personnalisez le script shell. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Analysez les comptes cibles. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Option 1 — Récupérez les résultats depuis le compartiment Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Option 2 — Vérifiez les résultats dans Security Hub CSPM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Corriger et exclure les résultats
<a name="remediate-and-exclude-findings"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Corriger les résultats. | Corrigez tous les résultats auxquels vous souhaitez remédier. Pour plus d'informations et pour connaître les meilleures pratiques relatives à la création d'un périmètre autour de vos AWS identités, de vos ressources et de vos réseaux, consultez la section [Création d'un périmètre de données sur AWS](https://docs.aws.amazon.com/whitepapers/latest/building-a-data-perimeter-on-aws/building-a-data-perimeter-on-aws.html) (AWS livre blanc). | AWS DevOps | 
| Excluez les ressources dont les chemins réseau ont été vérifiés. | Si Network Access Analyzer génère des résultats pour des ressources qui devraient être accessibles depuis Internet, vous pouvez ajouter ces ressources à une liste d'exclusion. La prochaine fois que Network Access Analyzer s'exécutera, il ne générera aucun résultat pour cette ressource.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### (Facultatif) Mettez à jour le script naa-script.sh
<a name="optional-update-the-naa-script-sh-script"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Mettez à jour le script naa-script.sh. | Si vous souhaitez mettre à jour le script **naa-script.sh** vers la dernière version du dépôt, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### (Facultatif) Nettoyer
<a name="optional-clean-up"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez toutes les ressources déployées. | Vous pouvez laisser les ressources déployées dans les comptes.Si vous souhaitez déprovisionner toutes 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-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

## Résolution des problèmes
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Impossible de se connecter à l' EC2 instance Amazon à l'aide du gestionnaire de session. | L'agent SSM doit être capable de communiquer avec le point de terminaison Systems Manager. Procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | 
| Lorsque vous déployez le stack set, la CloudFormation console vous invite à`Enable trusted access with AWS Organizations to use service-managed permissions`. | Cela indique que l'accès sécurisé n'a pas été activé entre AWS Organizations et CloudFormation. Un accès sécurisé est requis pour déployer le stack set géré par les services. Cliquez sur le bouton pour activer l'accès sécurisé. Pour plus d'informations, consultez la section [Activer l'accès sécurisé](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) dans la CloudFormation documentation. | 

## Ressources connexes
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-resources"></a>
+ [Nouveau — Analyseur d'accès réseau Amazon VPC (article de blog](https://aws.amazon.com/blogs/aws/new-amazon-vpc-network-access-analyzer/))AWS 
+ [AWS Re:inForce 2022 - Validez les contrôles d'accès réseau efficaces le AWS (NIS202) (vidéo)](https://youtu.be/aN2P2zeQek0)
+ [Démo - Analyse du chemin des données d'entrée Internet à l'échelle de l'organisation à l'aide de l'analyseur d'accès réseau](https://youtu.be/1IFNZWy4iy0) (vidéo)

## Informations supplémentaires
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-additional"></a>

**Exemple de sortie de console**

L'exemple suivant montre le résultat de la génération de la liste des comptes cibles et de l'analyse des comptes cibles.

```
[root@ip-10-10-43-82 naa]# ./naa-script.sh
download: s3://naa-<account ID>-us-east-1/naa-exclusions.csv to ./naa-exclusions.csv

AWS Management Account: <Management account ID>

AWS Accounts being processed...
<Account ID 1> <Account ID 2> <Account ID 3>

Assessing AWS Account: <Account ID 1>, using Role: NAAExecRole
Assessing AWS Account: <Account ID 2>, using Role: NAAExecRole
Assessing AWS Account: <Account ID 3>, using Role: NAAExecRole
Processing account: <Account ID 1> / Region: us-east-1
Account: <Account ID 1> / Region: us-east-1 – Detecting Network Analyzer scope...
Processing account: <Account ID 2> / Region: us-east-1
Account: <Account ID 2> / Region: us-east-1 – Detecting Network Analyzer scope...
Processing account: <Account ID 3> / Region: us-east-1
Account: <Account ID 3> / Region: us-east-1 – Detecting Network Analyzer scope...
Account: <Account ID 1> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 1> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
Account: <Account ID 2> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 2> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
Account: <Account ID 3> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 3> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
```

**Exemples de rapports CSV**

Les images suivantes sont des exemples de sortie CSV.

![\[Exemple 1 du rapport CSV généré par cette solution.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/55e02e61-054e-4da6-aaae-c9a8b6f4f272.png)


![\[Exemple 2 du rapport CSV généré par cette solution.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/95f980ad-92c1-4392-92d4-9c742755aab2.png)


# Configuration de la résolution DNS pour les réseaux hybrides dans un environnement multi-comptes AWS
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment"></a>

*Anvesh Koganti, Amazon Web Services*

## Résumé
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-summary"></a>

Ce modèle fournit une solution complète pour configurer la résolution DNS dans les environnements de réseau hybrides qui incluent plusieurs comptes Amazon Web Services (AWS). Il permet une résolution DNS bidirectionnelle entre les réseaux locaux et l' AWS environnement via Amazon Route 53 Resolver les points de terminaison. Le modèle présente deux solutions pour permettre la résolution DNS dans une [architecture centralisée multi-comptes](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/scaling-dns-management-across-multiple-accounts-and-vpcs.html#multi-account-centralized) :
+ *La configuration de base* n'utilise pas les profils Route 53. Il permet d'optimiser les coûts pour les petits et moyens déploiements peu complexes.
+ *La configuration améliorée* utilise les profils Route 53 pour simplifier les opérations. C'est la meilleure solution pour les déploiements DNS plus importants ou plus complexes.

**Note**  
Consultez la section *Limitations* pour connaître les limites de service et les quotas avant la mise en œuvre. Tenez compte de facteurs tels que les frais généraux de gestion, les coûts, la complexité opérationnelle et l'expertise de l'équipe lorsque vous prenez votre décision.

## Conditions préalables et limitations
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-prereqs"></a>

**Conditions préalables**
+ Un environnement AWS multi-comptes avec Amazon Virtual Private Cloud (Amazon VPC) déployé sur des comptes de services partagés et de charge de travail (de préférence configuré [via AWS Control Tower en AWS suivant les meilleures pratiques en](https://docs.aws.amazon.com/controltower/latest/userguide/aws-multi-account-landing-zone.html) matière de structure de compte).
+ Connectivité hybride existante (AWS Direct Connect ou AWS Site-to-Site VPN) entre votre réseau sur site et l' AWS environnement.
+ Amazon VPC peering AWS Transit Gateway, ou AWS Cloud WAN pour la connectivité réseau de couche 3 entre les deux. VPCs (Cette connectivité est requise pour le trafic des applications. Elle n'est pas requise pour que la résolution DNS fonctionne. La résolution DNS fonctionne indépendamment de la connectivité réseau entre les VPCs.)
+ Serveurs DNS exécutés dans l'environnement sur site.

**Limites**
+ Les points de terminaison, les règles et les profils du résolveur Route 53 sont des constructions régionales qui peuvent nécessiter une réplication multiple Régions AWS pour les organisations internationales.
+ Pour une liste complète des quotas de service pour Route 53 Resolver, les zones hébergées privées et les profils, consultez la section [Quotas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html) dans la documentation Route 53.

## Architecture
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture"></a>

**Pile technologique cible**
+ Points de terminaison sortants et entrants de Route 53
+ Règles du résolveur Route 53 pour le transfert conditionnel
+ AWS Resource Access Manager (AWS RAM)
+ Zone hébergée privée Route 53

**Architecture cible**

**Points de terminaison sortants et entrants**

Le schéma suivant montre le flux de résolution DNS entre AWS et sur site. Il s'agit de la configuration de connectivité pour les résolutions sortantes où le domaine est hébergé sur site. Voici un aperçu général du processus impliqué dans sa mise en place. Pour plus de détails, consultez la section [Epics](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics).

1. Déployez les points de terminaison du résolveur Route 53 sortants dans le VPC Shared Services.

1. Créez des règles Route 53 Resolver (règles de transfert) dans le compte Shared Services pour les domaines hébergés sur site.

1. Partagez et associez les règles VPCs à d'autres comptes hébergeant des ressources qui ont besoin de résoudre des domaines hébergés sur site. Cela peut être fait de différentes manières en fonction de votre cas d'utilisation, comme décrit plus loin dans cette section.

![\[Points de terminaison entrants et sortants d'un flux de résolution DNS AWS vers un serveur local.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/d69d4cad-5e2c-4481-9370-2708e8a4f8c1.png)


Après avoir configuré la connectivité, les étapes nécessaires à la résolution des problèmes sortants sont les suivantes :

1. L'instance Amazon Elastic Compute Cloud (Amazon EC2) envoie une demande de résolution DNS `db.onprem.example.com` au résolveur Route 53 du VPC à l'adresse VPC\$12.

1. Route 53 Resolver vérifie les règles du résolveur et transmet la demande au serveur DNS local en IPs utilisant le point de terminaison sortant.

1. Le point de terminaison sortant transmet la demande au DNS local. IPs Le trafic passe par la connectivité réseau hybride établie entre le VPC Shared Services et le centre de données sur site.

1. Le serveur DNS local répond au point de terminaison sortant, qui transmet ensuite la réponse au résolveur Route 53 du VPC. Le résolveur renvoie la réponse à l' EC2 instance.

Le schéma suivant montre le flux de résolution DNS entre l'environnement sur site et. AWS Il s'agit de la configuration de connectivité pour les résolutions entrantes sur AWS lesquelles le domaine est hébergé. Voici un aperçu général du processus impliqué dans sa mise en place. Pour plus de détails, consultez la section [Epics](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics).

1. Déployez les points de terminaison du résolveur entrants dans le VPC Shared Services.

1. Créez des zones hébergées privées dans le compte Shared Services (approche centralisée).

1. Associez les zones hébergées privées au VPC Shared Services. Partagez et associez ces zones à des comptes multiples VPCs pour la résolution VPC-to-VPC DNS. Cela peut être fait de différentes manières en fonction de votre cas d'utilisation, comme décrit plus loin dans cette section.

![\[Points de terminaison entrants et sortants dans un flux de résolution DNS sur site vers AWS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/a6f5348c-2041-453e-8939-2b4ee0b7ebd8.png)


Après avoir configuré la connectivité, les étapes impliquées dans la résolution entrante sont les suivantes :

1. La ressource locale envoie une demande de résolution DNS `ec2.prod.aws.example.com` au serveur DNS local.

1. Le serveur DNS local transmet la demande au point de terminaison du résolveur entrant dans le VPC Shared Services via la connexion réseau hybride.

1. Le point de terminaison du résolveur entrant recherche la demande dans la zone hébergée privée associée à l'aide du résolveur VPC Route 53 et obtient l'adresse IP appropriée.

1. Ces adresses IP sont renvoyées au serveur DNS local, qui renvoie la réponse à la ressource locale.

Cette configuration permet aux ressources locales de résoudre les noms de domaine AWS privés en acheminant les requêtes via les points de terminaison entrants vers la zone hébergée privée appropriée. Dans cette architecture, les zones hébergées privées sont centralisées dans un VPC Shared Services, ce qui permet à une seule équipe de gérer le DNS de manière centralisée. Ces zones peuvent être associées à de nombreuses zones VPCs pour répondre au cas d'utilisation de la résolution VPC-to-VPC DNS. Vous pouvez également déléguer la propriété et la gestion du domaine DNS à chacun d'entre eux Compte AWS. Dans ce cas, chaque compte gère ses propres zones hébergées privées et associe chaque zone au VPC Shared Services central pour une résolution unifiée avec l'environnement sur site. Cette approche décentralisée n'entre pas dans le cadre de ce modèle. Pour plus d'informations, consultez la section [Étendre la gestion du DNS sur plusieurs comptes et VPCs](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/scaling-dns-management-across-multiple-accounts-and-vpcs.html) dans le livre *blanc sur les options DNS du cloud hybride pour Amazon VPC*.

Lorsque vous établissez les flux de résolution DNS fondamentaux à l'aide des points de terminaison du résolveur, vous devez déterminer comment gérer le partage et l'association des règles du résolveur et des zones hébergées privées dans votre environnement. Comptes AWS Vous pouvez aborder cette question de deux manières : par le biais d'un partage autogéré en utilisant AWS RAM pour partager les règles du résolveur et les associations directes de zones hébergées privées, comme indiqué dans la section *Configuration de base*, ou via les profils Route 53, comme indiqué dans la section *Configuration améliorée*. Le choix dépend des préférences de gestion du DNS et des exigences opérationnelles de votre organisation. Les diagrammes d'architecture suivants illustrent un environnement évolutif qui inclut plusieurs comptes VPCs différents, ce qui représente un déploiement d'entreprise typique.

**Configuration de base**

Dans la configuration de base, la mise en œuvre de la résolution DNS hybride dans un AWS environnement multi-comptes consiste AWS RAM à partager les règles de transfert du résolveur et les associations de zones hébergées privées afin de gérer les requêtes DNS entre les sites locaux et les ressources. AWS Cette méthode utilise des points de terminaison Route 53 Resolver centralisés dans un VPC Shared Services connecté à votre réseau local pour gérer efficacement la résolution DNS entrante et sortante.
+ Pour la résolution sortante, les règles de transfert du résolveur sont créées dans le compte Shared Services, puis partagées avec d'autres utilisateurs à l'aide Comptes AWS de. AWS RAM Ce partage est limité aux comptes d'une même région. Les comptes cibles peuvent ensuite associer ces règles à leurs propres règles VPCs et activer les ressources qu'ils contiennent VPCs pour résoudre les noms de domaine locaux.
+ Pour la résolution entrante, des zones hébergées privées sont créées dans le compte Shared Services et associées au VPC Shared Services. Ces zones peuvent ensuite être associées VPCs à d'autres comptes à l'aide de l'API Route 53 ou du AWS Command Line Interface (AWS CLI). AWS SDKs Les ressources associées VPCs peuvent ensuite résoudre les enregistrements DNS définis dans les zones hébergées privées, ce qui crée une vue DNS unifiée de votre AWS environnement.

Le schéma suivant montre les flux de résolution DNS dans cette configuration de base.

![\[Utilisation d'une configuration de base pour la résolution DNS hybride dans un environnement AWS multi-comptes.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/258e4bcd-e9c6-43b5-bab8-856ca22206b9.png)


Cette configuration fonctionne bien lorsque vous travaillez avec une infrastructure DNS à une échelle limitée. Cependant, cela peut devenir difficile à gérer au fur et à mesure que votre environnement se développe. La charge opérationnelle liée à la gestion de la manière dont les règles des zones hébergées privées et du résolveur sont partagées et associées VPCs individuellement augmente considérablement avec l'échelle. En outre, les quotas de service tels que la limite d'association de 300 VPC par zone hébergée privée peuvent devenir des facteurs contraignants dans les déploiements à grande échelle. La configuration améliorée permet de relever ces défis.

**Configuration améliorée**

Les profils Route 53 offrent une solution rationalisée pour gérer la résolution DNS dans les réseaux hybrides sur plusieurs réseaux Comptes AWS. Au lieu de gérer les zones hébergées privées et les règles du résolveur individuellement, vous pouvez regrouper les configurations DNS dans un seul conteneur qui peut être facilement partagé et appliqué à plusieurs VPCs comptes dans une région. Cette configuration maintient l'architecture centralisée du point de terminaison Resolver dans un VPC Shared Services tout en simplifiant considérablement la gestion des configurations DNS.

Le schéma suivant montre les flux de résolution DNS dans une configuration améliorée.

![\[Utilisation d'une configuration avancée avec les profils Route 53 pour la résolution DNS hybride dans un environnement AWS multi-comptes.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/55b9681d-ddb4-4a55-b4ec-fc9afa9870fa.png)


Les profils Route 53 vous permettent de regrouper les associations de zones hébergées privées, les règles de transfert du résolveur et les règles de pare-feu DNS dans une seule unité partageable. Vous pouvez créer des profils dans le compte Shared Services et les partager avec les comptes des membres en utilisant AWS RAM. Lorsqu'un profil est partagé et appliqué à Target VPCs, toutes les associations et configurations nécessaires sont automatiquement gérées par le service. Cela réduit considérablement les frais opérationnels liés à la gestion du DNS et offre une excellente évolutivité pour les environnements en pleine croissance.

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

Utilisez des outils d'infrastructure en tant que code (IaC) tels que CloudFormation Terraform pour provisionner et gérer automatiquement les points de terminaison, les règles, les zones hébergées privées et les profils du résolveur Route 53. Intégrez la configuration DNS à des pipelines d'intégration continue et de livraison continue (CI/CD) pour garantir la cohérence, la répétabilité et des mises à jour rapides.

## Outils
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-tools"></a>

**Services AWS**
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) vous permet de partager vos ressources en toute sécurité afin Comptes AWS de réduire les frais opérationnels et de garantir visibilité et auditabilité.
+ [Amazon Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html)répond de manière récursive aux requêtes DNS provenant AWS des ressources et est disponible par défaut dans tous les VPCs domaines. Vous pouvez créer des points de terminaison Resolver et des règles de transfert conditionnel pour résoudre les espaces de noms DNS entre votre centre de données sur site et votre. VPCs
+ La [zone hébergée privée Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) est un conteneur qui contient des informations sur la manière dont vous souhaitez que Route 53 réponde aux requêtes DNS pour un domaine et ses sous-domaines.
+ [Les profils Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/profiles.html) vous permettent d'appliquer et de gérer de manière simplifiée des configurations Route 53 liées au DNS dans de nombreuses VPCs configurations différentes Comptes AWS .

## Bonnes pratiques
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-best-practices"></a>

Cette section fournit certaines des meilleures pratiques pour optimiser Route 53 Resolver. Elles représentent un sous-ensemble des meilleures pratiques de Route 53. Pour obtenir une liste complète, consultez la section [Meilleures pratiques pour Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices.html).

**Évitez les configurations en boucle avec les points de terminaison du résolveur**
+ Concevez votre architecture DNS de manière à empêcher le routage récursif en planifiant soigneusement les associations VPC. Lorsqu'un VPC héberge un point de terminaison entrant, évitez de l'associer à des règles de résolution susceptibles de créer des références circulaires.
+ Utilisez-le de AWS RAM manière stratégique lorsque vous partagez des ressources DNS entre des comptes afin de maintenir des chemins de routage propres.

Pour plus d'informations, consultez la section [Éviter les configurations de boucle avec les points de terminaison du résolveur](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoints.html) dans la documentation Route 53.

**Points de terminaison Scale Resolver**
+ Pour les environnements qui nécessitent un nombre élevé de requêtes par seconde (QPS), sachez qu'il existe une limite de 10 000 QPS par ENI dans un point de terminaison. Il est ENIs possible d'en ajouter d'autres à un point de terminaison pour dimensionner le DNS QPS.
+ Amazon CloudWatch fournit `InboundQueryVolume` et fournit `OutboundQueryVolume` des statistiques (voir la [CloudWatch documentation](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/monitoring-resolver-with-cloudwatch.html)). Nous vous recommandons de configurer des règles de surveillance qui vous alertent si le seuil dépasse une certaine valeur (par exemple, 80 % de 10 000 QPS).
+ Configurez des règles de groupe de sécurité dynamiques pour les points de terminaison du résolveur afin d'éviter que les limites de suivi des connexions n'entraînent une limitation des requêtes DNS en cas de trafic élevé. Pour en savoir plus sur le fonctionnement du suivi des connexions dans les groupes de sécurité, consultez la section [Suivi des connexions des groupes de EC2 sécurité Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html) dans la EC2 documentation Amazon.

Pour plus d'informations, consultez la section [Resolver Endpoint Scaling](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoint-scaling.html) dans la documentation de Route 53.

**Offrez une haute disponibilité aux points de terminaison Resolver**
+ Créez des points de terminaison entrants avec des adresses IP dans au moins deux zones de disponibilité à des fins de redondance.
+ Fournissez des interfaces réseau supplémentaires pour garantir la disponibilité pendant la maintenance ou les pics de trafic.

Pour plus d'informations, consultez la section [Haute disponibilité pour les points de terminaison du résolveur](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoint-high-availability.html) dans la documentation Route 53.

## Épopées
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics"></a>

### Déployer les points de terminaison Route 53 Resolver
<a name="deploy-r53r-endpoints"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez un point de terminaison entrant. | Route 53 Resolver utilise le point de terminaison entrant pour recevoir les requêtes DNS des résolveurs DNS locaux. Pour obtenir des instructions, consultez la section [Transférer des requêtes DNS entrantes vers votre VPCs ](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-forwarding-inbound-queries.html) adresse dans la documentation de Route 53. Notez l'adresse IP du point de terminaison entrant. | Administrateur AWS, administrateur du cloud | 
| Déployez un point de terminaison sortant. | Route 53 Resolver utilise le point de terminaison sortant pour envoyer des requêtes DNS aux résolveurs DNS locaux. Pour obtenir des instructions, consultez la section [Transfert de requêtes DNS sortantes vers votre réseau](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-forwarding-outbound-queries.html) dans la documentation Route 53. Notez l'ID du point de terminaison de sortie. | Administrateur AWS, administrateur du cloud | 

### Configurer et partager les zones hébergées privées Route 53
<a name="configure-and-share-r53-private-hosted-zones"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une zone hébergée privée pour un domaine hébergé sur AWS. | Cette zone contient les enregistrements DNS pour les ressources d'un domaine AWS hébergé (par exemple,`prod.aws.example.com`) qui doivent être résolues à partir de l'environnement sur site. Pour obtenir des instructions, consultez [la section Création d'une zone hébergée privée](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) dans la documentation de Route 53.Lorsque vous créez une zone hébergée privée, vous devez associer un VPC à la zone hébergée appartenant au même compte. Sélectionnez le VPC Shared Services à cette fin. | Administrateur AWS, administrateur du cloud | 
| Configuration de base : associez la zone hébergée privée VPCs à d'autres comptes. | Si vous utilisez une configuration de base (voir la section [Architecture](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture)) :Pour permettre aux ressources du compte membre de VPCs résoudre les enregistrements DNS dans cette zone hébergée privée, vous devez VPCs associer votre compte à la zone hébergée. Vous devez autoriser l'association, puis la créer par programmation. Pour obtenir des instructions, consultez la section [Association d'un Amazon VPC et d'une zone hébergée privée que vous avez créée avec une méthode différente Comptes AWS](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-associate-vpcs-different-accounts.html) dans la documentation de Route 53. | Administrateur AWS, administrateur du cloud | 
| Configuration améliorée : configurez et partagez les profils Route 53. | Si vous utilisez une configuration améliorée (voir la section [Architecture](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture)) :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.html)En fonction de la structure de votre organisation et des exigences en matière de DNS, vous devrez peut-être créer et gérer plusieurs profils pour différents comptes ou charges de travail. | Administrateur AWS, administrateur du cloud | 

### Configurer et partager les règles de transfert du résolveur Route 53
<a name="configure-and-share-r53r-forwarding-rules"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une règle de transfert pour un domaine hébergé sur site. | Cette règle indiquera à Route 53 Resolver de transférer toutes les requêtes DNS pour les domaines locaux (tels que`onprem.example.com`) aux résolveurs DNS locaux. Pour créer cette règle, vous avez besoin des adresses IP des résolveurs DNS locaux et de l'ID du point de terminaison sortant. Pour obtenir des instructions, consultez [la section Création de règles de transfert](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-creating-rules.html) dans la documentation Route 53. | Administrateur AWS, administrateur du cloud | 
| Configuration de base : partagez et associez la règle de transfert à celle que vous VPCs avez dans d'autres comptes. | Si vous utilisez la configuration de base :Pour que la règle de transfert entre en vigueur, vous devez la partager et l'associer VPCs à vos autres comptes. Route 53 Resolver prend ensuite la règle en considération lorsqu'il résout un domaine. Pour obtenir des instructions, consultez les [sections Partage des règles du résolveur avec d'autres utilisateurs Comptes AWS et utilisation de règles partagées](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-sharing.html) et [Association de règles de transfert à un VPC](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-associating-rules.html) dans la documentation de Route 53. | Administrateur AWS, administrateur du cloud | 
| Configuration améliorée : configurez et partagez les profils Route 53. | Si vous utilisez la configuration améliorée :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.html)En fonction de la structure de votre organisation et des exigences en matière de DNS, vous devrez peut-être créer et gérer plusieurs profils pour différents comptes ou charges de travail. | Administrateur AWS, administrateur du cloud | 

### Configurer des résolveurs DNS locaux pour l'intégration AWS
<a name="configure-on-premises-dns-resolvers-for-aws-integration"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
|  Configurez le transfert conditionnel dans les résolveurs DNS locaux. | Pour que les requêtes DNS soient envoyées AWS depuis l'environnement local à des fins de résolution, vous devez configurer le transfert conditionnel dans les résolveurs DNS locaux pour qu'il pointe vers l'adresse IP du point de terminaison entrant. Cela indique aux résolveurs DNS de transférer toutes les requêtes DNS pour le domaine AWS hébergé (par exemple, pour`prod.aws.example.com`) à l'adresse IP du point de terminaison entrant pour résolution par Route 53 Resolver.  | Administrateur réseau | 

### Vérifier la résolution end-to-end DNS dans un environnement hybride
<a name="verify-end-to-end-dns-resolution-in-a-hybrid-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez la résolution DNS depuis AWS l'environnement sur site. | À partir d'une instance d'un VPC à laquelle la règle de transfert est associée, effectuez une requête DNS pour un domaine hébergé sur site (par exemple, pour). `db.onprem.example.com` | Administrateur réseau | 
| Testez la résolution DNS depuis l'environnement sur site vers AWS. | À partir d'un serveur local, effectuez une résolution DNS pour un domaine AWS hébergé (par exemple, pour`ec2.prod.aws.example.com`). | Administrateur réseau | 

## Ressources connexes
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-resources"></a>
+ [Options DNS dans le cloud hybride pour Amazon VPC (livre blanc](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/hybrid-cloud-dns-options-for-vpc.html))AWS 
+ [Utilisation de zones hébergées privées](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) (documentation Route 53)
+ [Commencer à utiliser Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-getting-started.html) (documentation Route 53)
+ [Simplifiez la gestion du DNS dans un environnement multi-comptes avec Route 53 Resolver](https://aws.amazon.com/blogs/security/simplify-dns-management-in-a-multiaccount-environment-with-route-53-resolver/) (AWS article de blog)
+ [Unifiez la gestion du DNS à l'aide de profils Amazon Route 53 avec plusieurs VPCs et Comptes AWS](https://aws.amazon.com/blogs/aws/unify-dns-management-using-amazon-route-53-profiles-with-multiple-vpcs-and-aws-accounts/) (article de AWS blog)
+ [Migration de votre environnement DNS multi-comptes vers les profils Amazon Route 53](https://aws.amazon.com/blogs/networking-and-content-delivery/migrating-your-multi-account-dns-environment-to-amazon-route-53-profiles/) (AWS article de blog)
+ [Utilisation des profils Amazon Route 53 pour des AWS environnements multi-comptes évolutifs](https://aws.amazon.com/blogs/networking-and-content-delivery/using-amazon-route-53-profiles-for-scalable-multi-account-aws-environments/) (article de AWS blog)

 

# Vérifiez que les équilibreurs de charge ELB nécessitent une terminaison TLS
<a name="verify-that-elb-load-balancers-require-tls-termination"></a>

*Priyanka Chaudhary, Amazon Web Services*

## Résumé
<a name="verify-that-elb-load-balancers-require-tls-termination-summary"></a>

Sur le cloud Amazon Web Services (AWS), Elastic Load Balancing (ELB) distribue automatiquement le trafic applicatif entrant sur plusieurs cibles, telles que les instances Amazon Elastic Compute Cloud (Amazon EC2), les conteneurs, les adresses IP et les fonctions AWS Lambda. Les équilibreurs de charge utilisent des écouteurs pour définir les ports et les protocoles utilisés par l'équilibreur de charge pour accepter le trafic provenant des utilisateurs. Les équilibreurs de charge d'application prennent les décisions de routage au niveau de la couche application et utilisent les HTTP/HTTPS protocoles. Les équilibreurs de charge classiques prennent les décisions de routage soit au niveau de la couche transport, en utilisant les protocoles TCP ou SSL (Secure Sockets Layer), soit au niveau de la couche application, en utilisant HTTP/HTTPS.

Ce modèle fournit un contrôle de sécurité qui examine plusieurs types d'événements pour les équilibreurs de charge d'application et les équilibreurs de charge classiques. Lorsque la fonction est invoquée, AWS Lambda inspecte l'événement et s'assure que l'équilibreur de charge est conforme.

La fonction lance un événement Amazon CloudWatch Events sur les appels d'API suivants : [CreateLoadBalancer[CreateLoadBalancerListeners](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancerListeners.html)](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancer.html), [DeleteLoadBalancerListeners](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_DeleteLoadBalancerListeners.html), [CreateLoadBalancerPolicy](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancerPolicy.html), [SetLoadBalancerPoliciesOfListener](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_SetLoadBalancerPoliciesOfListener.html), [CreateListener[DeleteListener](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DeleteListener.html)](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateListener.html), et [ModifyListener](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_ModifyListener.html). Lorsque l'événement détecte l'un d'entre eux APIs, il appelle AWS Lambda, qui exécute un script Python. Le script Python évalue si l'écouteur contient un certificat SSL et si la politique appliquée utilise le protocole TLS (Transport Layer Security). S'il est déterminé que la politique SSL est autre chose que TLS, la fonction envoie une notification Amazon Simple Notification Service (Amazon SNS) à l'utilisateur avec les informations pertinentes. 

## Conditions préalables et limitations
<a name="verify-that-elb-load-balancers-require-tls-termination-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif

**Limites**
+ Ce contrôle de sécurité ne vérifie pas les équilibreurs de charge existants, à moins qu'une mise à jour ne soit apportée aux écouteurs des équilibreurs de charge.
+ Ce contrôle de sécurité est régional. Vous devez le déployer dans chaque région AWS que vous souhaitez surveiller.

## Architecture
<a name="verify-that-elb-load-balancers-require-tls-termination-architecture"></a>

**Architecture cible**

![\[S'assurer que les équilibreurs de charge nécessitent une terminaison TLS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/da99cda2-ac34-4791-a2bd-d37264d8d3d9/images/af92b3c8-32bb-45eb-a2a8-d8276fb3e824.png)


**Automatisation et mise à l'échelle**
+ Si vous utilisez [AWS Organizations](https://aws.amazon.com/organizations/), vous pouvez utiliser [AWS Cloudformation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) pour déployer ce modèle sur plusieurs comptes que vous souhaitez surveiller.

## Outils
<a name="verify-that-elb-load-balancers-require-tls-termination-tools"></a>

**Services AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — AWS vous CloudFormation aide à modéliser et à configurer vos ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie. Vous pouvez utiliser un modèle pour décrire vos ressources et leurs dépendances, puis les lancer et les configurer ensemble sous forme de pile, au lieu de gérer les ressources individuellement.
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) — Amazon CloudWatch Events fournit un flux quasi en temps réel d'événements système décrivant les modifications apportées aux ressources AWS.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) — AWS Lambda est un service de calcul qui prend en charge l'exécution de code sans provisionner ni gérer de serveurs.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) — Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets hautement évolutif qui peut être utilisé pour un large éventail de solutions de stockage, notamment les sites Web, les applications mobiles, les sauvegardes et les lacs de données.
+ [Amazon SNS —](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) Amazon Simple Notification Service (Amazon SNS) coordonne et gère la distribution ou l'envoi de messages entre les éditeurs et les clients, y compris les serveurs Web et les adresses e-mail. Les abonnés reçoivent tous les messages publiés dans les rubriques auxquelles ils sont abonnés, et tous les abonnés à une rubrique reçoivent les mêmes messages.

**Code**

Ce modèle inclut les pièces jointes suivantes :
+ `ELBRequirestlstermination.zip`— Le code Lambda pour le contrôle de sécurité.
+ `ELBRequirestlstermination.yml`— Le CloudFormation modèle qui définit l'événement et la fonction Lambda.

## Épopées
<a name="verify-that-elb-load-balancers-require-tls-termination-epics"></a>

### Configuration du compartiment S3
<a name="set-up-the-s3-bucket"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Définissez le compartiment S3. | Sur la [console Amazon S3](https://console.aws.amazon.com/s3/), choisissez ou créez un compartiment S3 pour héberger le fichier .zip de code Lambda. Ce compartiment S3 doit se trouver dans la même région AWS que l'équilibreur de charge que vous souhaitez évaluer. Le nom d'un compartiment S3 est unique au monde et l'espace de noms est partagé par tous les comptes AWS. Le nom du compartiment S3 ne peut pas inclure de barres obliques en tête. | Architecte du cloud | 
| Téléchargez le code Lambda. | Téléchargez le code Lambda (`ELBRequirestlstermination.zip`fichier) fourni dans la section *Pièces jointes* dans le compartiment S3. | Architecte du cloud | 

### Déployer le CloudFormation modèle
<a name="deploy-the-cloudformation-template"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Lancez le CloudFormation modèle AWS. | Ouvrez la [ CloudFormation console AWS](https://console.aws.amazon.com/cloudformation/) dans la même région AWS que votre compartiment S3 et déployez le modèle joint`ELBRequirestlstermination.yml`. Pour plus d'informations sur le déploiement de CloudFormation modèles AWS, consultez la section [Création d'une pile sur la CloudFormation console AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) dans la CloudFormation documentation. | Architecte du cloud | 
| Complétez les paramètres du modèle. | Lorsque vous lancez le modèle, les informations suivantes vous sont demandées :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/verify-that-elb-load-balancers-require-tls-termination.html) | Architecte du cloud | 

### Confirmer l'abonnement.
<a name="confirm-the-subscription"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Confirmez votre abonnement. | Lorsque le CloudFormation modèle est déployé avec succès, il envoie un e-mail d'abonnement à l'adresse e-mail que vous avez fournie. Vous devez confirmer cet abonnement par e-mail pour commencer à recevoir des notifications de violation. | Architecte du cloud | 

## Ressources connexes
<a name="verify-that-elb-load-balancers-require-tls-termination-resources"></a>
+ [Création d'une pile sur la CloudFormation console AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) ( CloudFormation documentation AWS)
+ [Qu'est-ce qu'AWS Lambda ?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) (documentation AWS Lambda)
+ [Qu'est-ce qu'un équilibreur de charge Classic Load Balancer ?](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html) (documentation de l'ELB)
+ [Qu’est-ce qu’un équilibreur de charge Application Load Balancer ?](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) (documentation de l'ELB)

## Pièces jointes
<a name="attachments-da99cda2-ac34-4791-a2bd-d37264d8d3d9"></a>

[Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip](samples/p-attach/da99cda2-ac34-4791-a2bd-d37264d8d3d9/attachments/attachment.zip)

# Consultez les journaux et les statistiques d'AWS Network Firewall à l'aide de Splunk
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk"></a>

*Ivo Pinto, Amazon Web Services*

## Résumé
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-summary"></a>

De nombreuses organisations utilisent [Splunk Enterprise](https://www.splunk.com/en_us/products/splunk-enterprise.html) comme outil centralisé d'agrégation et de visualisation pour les journaux et les métriques provenant de différentes sources. Ce modèle vous permet de configurer Splunk pour récupérer les journaux et les métriques d'[AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html) depuis [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) à l'aide du module complémentaire Splunk pour AWS. 

Pour ce faire, vous créez un rôle AWS Identity and Access Management (IAM) en lecture seule. Le module complémentaire Splunk pour AWS utilise ce rôle pour accéder CloudWatch. Vous configurez le module complémentaire Splunk pour AWS afin de récupérer les métriques et les journaux. CloudWatch Enfin, vous créez des visualisations dans Splunk à partir des données de journal et des métriques récupérées.

## Conditions préalables et limitations
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-prereqs"></a>

**Conditions préalables**
+ Un [compte Splunk](https://www.splunk.com/)
+ Une instance Splunk Enterprise, version 8.2.2 ou ultérieure 
+ Un compte AWS actif
+ Network Firewall, [configuré](https://docs.aws.amazon.com/network-firewall/latest/developerguide/getting-started.html) et [configuré pour](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-cw-logs.html) envoyer des CloudWatch journaux à Logs

**Limites**
+ Splunk Enterprise doit être déployé sous la forme d'un cluster d'instances Amazon Elastic Compute Cloud (Amazon EC2) dans le cloud AWS.
+ La collecte de données à l'aide d'un rôle IAM découvert automatiquement pour Amazon EC2 n'est pas prise en charge dans les régions AWS Chine.

## Architecture
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-architecture"></a>

![\[Architecture de journalisation de Splunk et d'AWS Network Firewall\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/c6ce254a-841f-4bed-8f9f-b35e99f22e56/images/3dd420e9-70af-4a42-b24d-c54872c55e0b.png)


Le diagramme illustre les éléments suivants :

1. Network Firewall publie les journaux dans CloudWatch Logs.

1. Splunk Enterprise extrait les métriques et les journaux à partir de. CloudWatch

Pour renseigner des exemples de métriques et de journaux dans cette architecture, une charge de travail génère du trafic qui passe par le point de terminaison Network Firewall pour accéder à Internet. Ceci est réalisé grâce à l'utilisation de [tables de routage](https://docs.aws.amazon.com/network-firewall/latest/developerguide/vpc-config.html#vpc-config-route-tables). Bien que ce modèle utilise une seule instance Amazon EC2 comme charge de travail, il peut s'appliquer à n'importe quelle architecture tant que Network Firewall est configuré pour envoyer des journaux à CloudWatch Logs.

Cette architecture utilise également une instance Splunk Enterprise dans un autre cloud privé virtuel (VPC). Cependant, l'instance Splunk peut se trouver dans un autre emplacement, par exemple dans le même VPC que la charge de travail, à condition qu'elle puisse atteindre le. CloudWatch APIs

## Outils
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-tools"></a>

**Services AWS**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) vous aide à centraliser les journaux de tous vos systèmes, applications et services AWS afin que vous puissiez les surveiller et les archiver en toute sécurité.
+ [Amazon Elastic Compute Cloud (Amazon EC2](https://docs.aws.amazon.com/ec2/)) fournit une capacité de calcul évolutive dans le cloud AWS. Vous pouvez lancer autant de serveurs virtuels que vous le souhaitez et les augmenter ou les diminuer rapidement.
+ [AWS Network Firewall est un pare-feu réseau](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html) dynamique et géré, ainsi qu'un service de détection et de prévention des intrusions VPCs destiné au cloud AWS.

**Autres outils**
+ [Splunk](https://www.splunk.com/) vous aide à surveiller, à visualiser et à analyser les données des journaux.

## Épopées
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-epics"></a>

### Créer un rôle IAM
<a name="create-an-iam-role"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez la politique IAM. | Suivez les instructions de la section [Création de politiques à l'aide de l'éditeur JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor) pour créer la politique IAM qui accorde un accès en lecture seule aux données et aux métriques CloudWatch des journaux. CloudWatch Collez le politique suivante dans l’éditeur JSON.<pre>{<br />    "Statement": [<br />        {<br />            "Action": [<br />                "cloudwatch:List*",<br />                "cloudwatch:Get*",<br />                "network-firewall:List*",<br />                "logs:Describe*",<br />                "logs:Get*",<br />                "logs:List*",<br />                "logs:StartQuery",<br />                "logs:StopQuery",<br />                "logs:TestMetricFilter",<br />                "logs:FilterLogEvents",<br />                "network-firewall:Describe*"<br />            ],<br />            "Effect": "Allow",<br />            "Resource": "*"<br />        }<br />    ],<br />    "Version": "2012-10-17"<br />}</pre> | Administrateur AWS | 
| Créez un nouveau rôle IAM. | Suivez les instructions de la [section Création d'un rôle pour déléguer des autorisations à un service AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) afin de créer le rôle IAM auquel le module complémentaire Splunk pour AWS utilise pour accéder. CloudWatch Pour **les politiques d'autorisations**, choisissez la politique que vous avez créée précédemment. | Administrateur AWS | 
| Attribuez le rôle IAM aux instances EC2 du cluster Splunk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrateur AWS | 

### Installation du module complémentaire Splunk pour AWS
<a name="install-the-splunk-add-on-for-aws"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez le module complémentaire . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrateur Splunk | 
| Configurez les informations d'identification AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Pour plus d'informations, consultez la section [Trouver un rôle IAM au sein de votre instance de plateforme Splunk](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Find_an_IAM_role_within_your_Splunk_platform_instance) dans la documentation Splunk. | Administrateur Splunk | 

### Configurez l'accès Splunk à CloudWatch
<a name="configure-splunk-access-to-cloudwatch"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez la récupération des journaux de Network Firewall à partir de CloudWatch Logs. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Par défaut, Splunk récupère les données du journal toutes les 10 minutes. Il s'agit d'un paramètre configurable dans **les paramètres avancés**. Pour plus d'informations, consultez [Configurer une entrée de CloudWatch logs à l'aide de Splunk Web](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Configure_a_CloudWatch_Logs_input_using_Splunk_Web) dans la documentation Splunk. | Administrateur Splunk | 
| Configurez la récupération des métriques de Network Firewall à partir de CloudWatch. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Par défaut, Splunk récupère les données métriques toutes les 5 minutes. Il s'agit d'un paramètre configurable dans **les paramètres avancés**. Pour plus d'informations, consultez [Configurer une CloudWatch entrée à l'aide de Splunk Web](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Configure_a_CloudWatch_input_using_Splunk_Web) dans la documentation Splunk. | Administrateur Splunk | 

### Créez des visualisations Splunk à l'aide de requêtes
<a name="create-splunk-visualizations-by-using-queries"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Consultez les principales adresses IP sources. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrateur Splunk | 
| Afficher les statistiques des paquets. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrateur Splunk | 
| Consultez les ports sources les plus utilisés. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrateur Splunk | 

## Ressources connexes
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-resources"></a>

**Documentation AWS**
+ [Création d'un rôle pour déléguer des autorisations à un service AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) (documentation IAM)
+ [Création de politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-start) (documentation IAM)
+ [Journalisation et surveillance dans AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-monitoring.html) (documentation Network Firewall)
+ [Configurations des tables de routage pour AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/route-tables.html) (documentation Network Firewall)

**Articles de blog AWS**
+ [Modèles de déploiement d'AWS Network Firewall](https://aws.amazon.com/pt/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/)

**AWS Marketplace**
+ [Image de machine Amazon (AMI) de Splunk Enterprise](https://aws.amazon.com/marketplace/pp/prodview-l6oos72bsyaks)

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

**Topics**
+ [Accédez à un hôte bastion à l'aide du gestionnaire de session et d'Amazon EC2 Instance Connect](access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.md)
+ [Accédez à des applications de conteneur en privé sur Amazon ECS à l'aide d'AWS Fargate, d' PrivateLinkAWS et d'un Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.md)
+ [Accédez à des applications de conteneur en privé sur Amazon ECS à l'aide d'AWS PrivateLink et d'un Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Centralisation de la résolution DNS à l'aide AWS Managed Microsoft AD et sur site de Microsoft Active Directory](centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.md)
+ [Créez un portail pour les micro-frontends en utilisant AWS Amplify Angular et Module Federation](create-amplify-micro-frontend-portal.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 des contrôles d'accès basés sur des attributs de détection pour les sous-réseaux publics en utilisant AWS Config](deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.md)
+ [Déployez des contrôles d'accès préventifs basés sur les attributs pour les sous-réseaux publics](deploy-preventative-attribute-based-access-controls-for-public-subnets.md)
+ [Activer les connexions chiffrées pour les instances de base de données PostgreSQL dans Amazon RDS](enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.md)
+ [Étendez votre accès VRFs à AWS en utilisant AWS Transit Gateway Connect](extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.md)
+ [Migrez une charge de travail F5 BIG-IP vers F5 BIG-IP VE sur le AWS Cloud](migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud.md)
+ [Migrer les contrôleurs d'entrée NGINX lors de l'activation du mode automatique Amazon EKS](migrate-nginx-ingress-controller-eks-auto-mode.md)
+ [Préservez l'espace IP routable dans les conceptions VPC multi-comptes pour les sous-réseaux autres que les charges de travail](preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets.md)
+ [Empêchez l'accès à Internet au niveau du compte en utilisant une politique de contrôle des services](prevent-internet-access-at-the-account-level-by-using-a-service-control-policy.md)
+ [Envoyer des alertes depuis AWS Network Firewall vers un canal Slack](send-alerts-from-aws-network-firewall-to-a-slack-channel.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)
+ [Configurer la reprise après sinistre pour Oracle JD Edwards EnterpriseOne avec AWS Elastic Disaster Recovery](set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.md)
+ [Utilisez les requêtes BMC Discovery pour extraire les données de migration afin de planifier la migration](use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning.md)
+ [Utilisez Network Firewall pour capturer les noms de domaine DNS à partir de l'indication du nom du serveur pour le trafic sortant](use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.md)

# Diffusion de contenu
<a name="contentdelivery-pattern-list"></a>

**Topics**
+ [Envoyez AWS WAF des logs à Splunk à l'aide AWS Firewall Manager d'Amazon Data Firehose](send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.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)
+ [Plus de modèles](contentdelivery-more-patterns-pattern-list.md)

# Envoyez AWS WAF des logs à Splunk à l'aide AWS Firewall Manager d'Amazon Data Firehose
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose"></a>

*Michael Friedenthal, Aman Kaur Gandhi et JJ Johnson, Amazon Web Services*

## Résumé
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-summary"></a>

Historiquement, il existait deux méthodes pour transférer des données dans Splunk : une architecture push ou pull. Une *architecture d'extraction* garantit les données de livraison grâce à de nouvelles tentatives, mais elle nécessite des ressources dédiées dans Splunk pour interroger les données. Les architectures d'extraction ne fonctionnent généralement pas en temps réel en raison du sondage. Une *architecture push* présente généralement une latence plus faible, est plus évolutive et réduit la complexité opérationnelle et les coûts. Cependant, il ne garantit pas la livraison et nécessite généralement des agents.

L'intégration de Splunk à Amazon Data Firehose fournit des données de streaming en temps réel à Splunk via un collecteur d'événements HTTP (HEC). Cette intégration offre les avantages des architectures push et pull : elle garantit la livraison des données par le biais de nouvelles tentatives, se fait en temps quasi réel et présente une faible latence et une faible complexité. Le HEC envoie rapidement et efficacement des données via HTTP ou HTTPS directement à Splunk. HECs sont basés sur des jetons, ce qui élimine le besoin de coder en dur les informations d'identification dans une application ou dans les fichiers de support.

Dans une AWS Firewall Manager politique, vous pouvez configurer la journalisation de l'ensemble du trafic ACL AWS WAF Web de tous vos comptes, puis utiliser un flux de diffusion Firehose pour envoyer ces données de journal à Splunk à des fins de surveillance, de visualisation et d'analyse. Cette solution offre les avantages suivants :
+ Gestion et journalisation centralisées du trafic ACL AWS WAF Web sur tous vos comptes
+ Intégration de Splunk avec un seul Compte AWS
+ Capacité de mise à l’échelle
+ Livraison en temps quasi réel des données du journal
+ Optimisation des coûts grâce à l'utilisation d'une solution sans serveur, afin que vous n'ayez pas à payer pour les ressources inutilisées.

## Conditions préalables et limitations
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS qui fait partie d'une organisation dans AWS Organizations.
+ Vous devez disposer des autorisations suivantes pour activer la journalisation avec Firehose :
  + `iam:CreateServiceLinkedRole`
  + `firehose:ListDeliveryStreams`
  + `wafv2:PutLoggingConfiguration`
+ AWS WAF et son site Web ACLs doit être configuré. Pour obtenir des instructions, voir [Commencer avec AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started.html).
+ AWS Firewall Manager doit être configuré. Pour obtenir des instructions, reportez-vous à la section [AWS Firewall Manager Conditions préalables](https://docs.aws.amazon.com/waf/latest/developerguide/fms-prereq.html).
+ Les politiques de sécurité de Firewall Manager pour AWS WAF doivent être configurées. Pour obtenir des instructions, voir [Commencer à utiliser AWS Firewall ManagerAWS WAF les politiques](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html).
+ Splunk doit être configuré avec un point de terminaison HTTP public accessible par Firehose.

**Limites**
+ Ils Comptes AWS doivent être gérés dans une seule organisation en AWS Organizations.
+ L'ACL Web doit se trouver dans la même région que le flux de diffusion. Si vous capturez des logs pour Amazon CloudFront, créez le flux de diffusion Firehose dans la région USA Est (Virginie du Nord),. `us-east-1`
+ Le module complémentaire Splunk pour Firehose est disponible pour les déploiements payants de Splunk Cloud, les déploiements distribués de Splunk Enterprise et les déploiements Splunk Enterprise en instance unique. Ce module complémentaire n'est pas pris en charge pour les déploiements d'essai gratuits de Splunk Cloud.

## Architecture
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-architecture"></a>

**Pile technologique cible**
+ Firewall Manager
+ Firehose
+ Amazon Simple Storage Service (Amazon S3)
+ AWS WAF
+ Splunk

**Architecture cible**

L'image suivante montre comment utiliser Firewall Manager pour enregistrer toutes les AWS WAF données de manière centralisée et les envoyer à Splunk via Firehose.

![\[Schéma d'architecture illustrant l'envoi des données du journal AWS WAF à Splunk via Amazon Data Firehose\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/3dfeaae0-985a-42b8-91c4-ece081f0b51b/images/669169b1-caa4-419b-9988-19806ded54eb.png)


1. Le AWS WAF Web ACLs envoie les données du journal du pare-feu à Firewall Manager.

1. Firewall Manager envoie les données du journal à Firehose.

1. Le flux de diffusion Firehose transmet les données du journal à Splunk et à un compartiment S3. Le compartiment S3 fait office de sauvegarde en cas d'erreur dans le flux de diffusion Firehose.

**Automatisation et évolutivité**

Cette solution est conçue pour évoluer et s'adapter à tous les AWS WAF sites ALCs Web de l'organisation. Vous pouvez configurer tous les sites Web ACLs pour utiliser la même instance Firehose. Toutefois, si vous souhaitez configurer et utiliser plusieurs instances de Firehose, vous le pouvez.

## Outils
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-tools"></a>

**Services AWS**
+ [AWS Firewall Manager](https://docs.aws.amazon.com/waf/latest/developerguide/fms-chapter.html)est un service de gestion de la sécurité qui vous permet de configurer et de gérer de manière centralisée les règles de pare-feu pour l'ensemble de vos comptes et applications dans AWS Organizations.
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) vous permet de diffuser des [données de streaming](https://aws.amazon.com/streaming-data/) en temps réel vers d'autres Services AWS points de terminaison HTTP personnalisés et vers des points de terminaison HTTP appartenant à des fournisseurs de services tiers pris en charge, tels que Splunk.
+ [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 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**
+ [Splunk](https://docs.splunk.com/Documentation) vous aide à surveiller, visualiser et analyser les données des journaux.

## Épopées
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-epics"></a>

### Configurer Splunk
<a name="configure-splunk"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez l'application Splunk pour AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html) | Administrateur de sécurité, administrateur Splunk | 
| Installez le module complémentaire pour AWS WAF. | Répétez les instructions précédentes pour installer le **module complémentaire AWS Web Application Firewall** pour Splunk. | Administrateur de sécurité, administrateur Splunk | 
| Installez et configurez le module complémentaire Splunk pour Firehose. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html) | Administrateur de sécurité, administrateur Splunk | 

### Création du flux de diffusion Firehose
<a name="create-the-akf-delivery-stream"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Accordez à Firehose l'accès à une destination Splunk. | Configurez la politique d'accès qui permet à Firehose d'accéder à une destination Splunk et de sauvegarder les données du journal dans un compartiment S3. Pour plus d'informations, consultez [Accorder à Firehose l'accès à une destination Splunk](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-splunk). | Administrateur de sécurité | 
| Créez un flux de diffusion Firehose. | Dans le compte ACLs pour lequel vous gérez le Web AWS WAF, créez un flux de diffusion dans Firehose. Vous devez disposer d'un rôle IAM lorsque vous créez un flux de diffusion. Firehose assume ce rôle IAM et accède au compartiment S3 spécifié. Pour obtenir des instructions, consultez [la section Création d'un flux de diffusion](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html). Notez ce qui suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html)Répétez ce processus pour chaque jeton que vous avez configuré dans le collecteur d'événements HTTP. | Administrateur de sécurité | 
| Testez le flux de diffusion. | Testez le flux de diffusion pour vérifier qu'il est correctement configuré. Pour obtenir des instructions, consultez la section [Tester en utilisant Splunk comme destination](https://docs.aws.amazon.com/firehose/latest/dev/test-drive-firehose.html#test-drive-destination-splunk) dans la documentation de Firehose. | Administrateur de sécurité | 

### Configurer Firewall Manager pour enregistrer les données
<a name="configure-firewall-manager-to-log-data"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez les politiques de Firewall Manager. | Les politiques de Firewall Manager doivent être configurées pour activer la journalisation et pour transférer les journaux vers le flux de diffusion Firehose approprié. Pour plus d'informations et d'instructions, voir [Configuration de la journalisation pour une AWS WAF politique](https://docs.aws.amazon.com/waf/latest/developerguide/waf-policies.html#waf-policies-logging-config). | Administrateur de sécurité | 

## Ressources connexes
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-resources"></a>

**AWS resources**
+ [Journalisation du trafic ACL Web](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html) (AWS WAF documentation)
+ [Configuration de la journalisation pour une AWS WAF politique](https://docs.aws.amazon.com/waf/latest/developerguide/waf-policies.html#waf-policies-logging-config) (AWS WAF documentation)
+ [Tutoriel : Envoyer des journaux de flux VPC à Splunk à l'aide d'Amazon Data Firehose (documentation Firehose](https://docs.aws.amazon.com/firehose/latest/dev/vpc-splunk-tutorial.html))
+ [Comment transférer les journaux de flux VPC vers Splunk à l'aide d'Amazon Data Firehose ?](https://aws.amazon.com/premiumsupport/knowledge-center/push-flow-logs-splunk-firehose/) (Centre de AWS connaissances)
+ [Boostez l'ingestion de données dans Splunk à l'aide d'Amazon Data Firehose](https://aws.amazon.com/blogs/big-data/power-data-ingestion-into-splunk-using-amazon-kinesis-data-firehose/)AWS (article de blog)

**Documentation Splunk**
+ [Module complémentaire Splunk pour Amazon Data Firehose](https://docs.splunk.com/Documentation/AddOns/released/Firehose/About)

# Diffusez du contenu statique dans un compartiment Amazon S3 via un VPC à l'aide d'Amazon CloudFront
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront"></a>

*Ángel Emmanuel Hernández Cebrian, Amazon Web Services*

## Résumé
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-summary"></a>

Lorsque vous diffusez du contenu statique hébergé sur Amazon Web Services (AWS), l'approche recommandée consiste à utiliser un bucket Amazon Simple Storage Service (S3) comme origine et à utiliser CloudFront Amazon pour distribuer le contenu. Cette solution présente deux avantages principaux : la commodité de la mise en cache du contenu statique à des emplacements périphériques et la possibilité de définir des [listes de contrôle d'accès Web](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl.html) (Web ACLs) pour la CloudFront distribution, ce qui vous permet de sécuriser les demandes relatives au contenu avec un minimum de configuration et de frais administratifs.

Cependant, il existe une limite architecturale commune à l'approche standard recommandée. Dans certains environnements, vous souhaitez déployer des dispositifs de pare-feu virtuels dans un cloud privé virtuel (VPC) pour inspecter l'ensemble du contenu, y compris le contenu statique. L'approche standard n'achemine pas le trafic via le VPC à des fins d'inspection. Ce modèle fournit une solution architecturale alternative. Vous utilisez toujours une CloudFront distribution pour diffuser du contenu statique dans un compartiment S3, mais le trafic est acheminé via le VPC à l'aide d'un Application Load Balancer. Une fonction AWS Lambda récupère et renvoie ensuite le contenu du compartiment S3.

## Conditions préalables et limitations
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ Contenu de site Web statique hébergé dans un compartiment S3.

**Limites**
+ Les ressources de ce modèle doivent se trouver dans une seule région AWS, mais elles peuvent être mises en service dans différents comptes AWS.
+ Les limites s'appliquent à la taille maximale des demandes et des réponses que la fonction Lambda peut recevoir et envoyer, respectivement. Pour plus d'informations, consultez la section *Limits des* [fonctions Lambda en tant que cibles](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html) (documentation Elastic Load Balancing).
+ Il est important de trouver un bon équilibre entre performances, évolutivité, sécurité et rentabilité lors de l'utilisation de cette approche. Malgré la grande évolutivité de Lambda, si le nombre d'appels Lambda simultanés dépasse le quota maximum, certaines demandes sont limitées. Pour plus d'informations, consultez la section Quotas Lambda (documentation Lambda). Vous devez également tenir compte de la tarification lorsque vous utilisez Lambda. Pour minimiser les appels Lambda, assurez-vous de définir correctement le cache pour la distribution. CloudFront Pour plus d'informations, consultez [Optimisation de la mise en cache et de la disponibilité](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html) (CloudFront documentation).

## Architecture
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-architecture"></a>

**Pile technologique cible**
+ CloudFront
+ Amazon Virtual Private Cloud (Amazon VPC)
+ Application Load Balancer
+ Lambda
+ Amazon S3

**Architecture cible**

L'image suivante montre l'architecture suggérée lorsque vous devez l'utiliser pour diffuser du contenu statique CloudFront à partir d'un compartiment S3 via un VPC.

![\[Flux de trafic via les équilibreurs de charge d'application du VPC vers la fonction Lambda.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e0dd6928-4fe0-47ab-954f-9de5563349d8/images/b42c7dd9-4a72-4998-bf88-195c8f90ed3e.png)


1. Le client demande l'URL de CloudFront distribution pour obtenir un fichier de site Web spécifique dans le compartiment S3.

1. CloudFront envoie la demande à AWS WAF. AWS WAF filtre la demande en utilisant le Web ACLs appliqué à la CloudFront distribution. S'il est déterminé que la demande est valide, le flux continue. S'il est déterminé que la demande n'est pas valide, le client reçoit une erreur 403.

1. CloudFront vérifie son cache interne. S'il existe une clé valide correspondant à la demande entrante, la valeur associée est renvoyée au client sous forme de réponse. Dans le cas contraire, le flux continue.

1. CloudFront transmet la demande à l'URL de l'Application Load Balancer spécifié.

1. L'Application Load Balancer possède un écouteur associé à un groupe cible basé sur une fonction Lambda. L'Application Load Balancer invoque la fonction Lambda.

1. La fonction Lambda se connecte au compartiment S3, effectue une `GetObject` opération sur celui-ci et renvoie le contenu sous forme de réponse.

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

Pour automatiser le déploiement de contenu statique à l'aide de cette approche, créez des CI/CD pipelines pour mettre à jour les compartiments Amazon S3 hébergeant des sites Web.

La fonction Lambda s'adapte automatiquement pour gérer les demandes simultanées, dans les limites des quotas et des limites du service. Pour plus d'informations, consultez la section [Dimensionnement des fonctions Lambda](https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html) et [quotas Lambda (documentation Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)). Pour les autres services et fonctionnalités AWS, tels que CloudFront l'Application Load Balancer, AWS les adapte automatiquement.

## Outils
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-tools"></a>
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) accélère la diffusion de votre contenu Web en le diffusant via un réseau mondial de centres de données, ce qui réduit le temps de latence et améliore les performances.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) répartit le trafic applicatif ou réseau entrant sur plusieurs cibles. Dans ce modèle, vous utilisez un [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) provisionné via Elastic Load Balancing pour diriger le trafic vers la fonction Lambda.
+ [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 Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer des ressources AWS dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous exploiteriez dans votre propre centre de données, avec les avantages liés à l'utilisation de l'infrastructure évolutive d'AWS.

## Épopées
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-epics"></a>

### CloudFront À utiliser pour diffuser du contenu statique depuis Amazon S3 via un VPC
<a name="use-cloudfront-to-serve-static-content-from-amazon-s3-through-a-vpc"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un VPC. | Créez un VPC pour héberger les ressources déployées selon ce modèle, telles que l'Application Load Balancer et la fonction Lambda.  Pour obtenir des instructions, consultez [Create a VPC (documentation](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC) Amazon VPC). | Architecte du cloud | 
| Créez une ACL Web AWS WAF. | Créez une ACL Web AWS WAF. Plus tard dans ce modèle, vous appliquerez cette ACL Web à la CloudFront distribution. Pour obtenir des instructions, consultez [la section Création d'une ACL Web](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-creating.html) (documentation AWS WAF). | Architecte du cloud | 
| Créez la fonction Lambda. | Créez la fonction Lambda qui diffuse le contenu statique hébergé dans le compartiment S3 sous forme de site Web. Utilisez le code fourni dans la section [Informations supplémentaires](#serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-additional) de ce modèle. Personnalisez le code pour identifier votre compartiment S3 cible. | AWS général | 
| Téléchargez la fonction Lambda. | Entrez la commande suivante pour télécharger le code de fonction Lambda dans une archive de fichiers .zip dans Lambda.<pre>aws lambda update-function-code \<br />--function-name  \ <br />--zip-file fileb://lambda-alb-s3-website.zip</pre> | AWS général | 
| Créez un Application Load Balancer. | Créez un Application Load Balancer connecté à Internet qui pointe vers la fonction Lambda. Pour obtenir des instructions, consultez la section [Création d'un groupe cible pour la fonction Lambda](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html#register-lambda-function) (documentation Elastic Load Balancing). Pour une configuration à haute disponibilité, créez l'Application Load Balancer et associez-le à des sous-réseaux privés dans différentes zones de disponibilité. | Architecte du cloud | 
| Créez une CloudFront distribution. | Créez une CloudFront distribution qui pointe vers l'Application Load Balancer que vous avez créé.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.html) | Architecte du cloud | 

## Ressources connexes
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-resources"></a>

**Documentation AWS**
+ [Optimisation de la mise en cache et de la disponibilité](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html) (CloudFront documentation)
+ Les [fonctions Lambda en tant que cibles (documentation](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html) Elastic Load Balancing)
+ [Quotas Lambda (documentation](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) Lambda)

**Sites Web des services AWS**
+ [Application Load Balancer](https://aws.amazon.com/es/elasticloadbalancing/application-load-balancer/)
+ [Lambda](https://aws.amazon.com/en/lambda/)
+ [CloudFront](https://aws.amazon.com/en/cloudfront/)
+ [Amazon S3](https://aws.amazon.com/en/s3/)
+ [AWS WAF](https://aws.amazon.com/en/waf/)
+ [Amazon VPC](https://aws.amazon.com/en/vpc/)

## Informations supplémentaires
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-additional"></a>

**Code**

L'exemple de fonction Lambda suivant est écrit dans Node.js. Cette fonction Lambda agit comme un serveur Web qui exécute une `GetObject` opération sur un compartiment S3 contenant les ressources du site Web. 

```
/**

 * This is an AWS Lambda function created for demonstration purposes.

 * It retrieves static assets from a defined Amazon S3 bucket.

 * To make the content available through a URL, use an Application Load Balancer with a Lambda integration.
 * 
 * Set the S3_BUCKET environment variable in the Lambda function definition.
 */

var AWS = require('aws-sdk');

exports.handler = function(event, context, callback) {

    var bucket = process.env.S3_BUCKET;    
    var key = event.path.replace('/', '');
    
    if (key == '') {
        key = 'index.html';
    }

    // Fetch from S3
    var s3 = new AWS.S3();
    return s3.getObject({Bucket: bucket, Key: key},
       function(err, data) {

            if (err) {
                return err;
            }

            var isBase64Encoded = false;
            var encoding = 'utf8';
            
            if (data.ContentType.indexOf('image/') > -1) {
                isBase64Encoded = true;
                encoding = 'base64'
            }
    
            var resp = {
                statusCode: 200,
                headers: {
                    'Content-Type': data.ContentType,
                },
                body: new Buffer(data.Body).toString(encoding),
                isBase64Encoded: isBase64Encoded
            };

            callback(null, resp);
        }
    );
};
```

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

**Topics**
+ [Consultez une CloudFront distribution Amazon pour la journalisation des accès, les versions HTTPS et TLS](check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version.md)
+ [Déployez une application basée sur GRPC sur un cluster Amazon EKS et accédez-y à l'aide d'un Application Load Balancer](deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.md)
+ [Déployez des contrôles d'accès préventifs basés sur les attributs pour les sous-réseaux publics](deploy-preventative-attribute-based-access-controls-for-public-subnets.md)
+ [Déployez des ressources dans une AWS Wavelength zone à l'aide de Terraform](deploy-resources-wavelength-zone-using-terraform.md)
+ [Déployez les automatisations de sécurité pour la AWS WAF solution à l'aide de Terraform](deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.md)
+ [Configuration d'un routeur cellulaire sans serveur pour une architecture cellulaire](serverless-cell-router-architecture.md)
+ [Utilisez Amazon Q Developer comme assistant de codage pour augmenter votre productivité](use-q-developer-as-coding-assistant-to-increase-productivity.md)
+ [Consultez les journaux et les statistiques d'AWS Network Firewall à l'aide de Splunk](view-aws-network-firewall-logs-and-metrics-by-using-splunk.md)