

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.

# 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
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys"></a>

*Balaji Vedagiri, Vanitha Dontireddy, Ashish Kumar, Faisal Shahdad, Vivek Thangamuthu et Anand Krishna Varanasi, Amazon Web Services*

## Résumé
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-summary"></a>

Ce modèle décrit comment déployer une application de microservices globale à partir d'un compte AWS central vers plusieurs comptes de charge de travail et régions conformément à une stratégie de blue/green déploiement. Le modèle prend en charge les éléments suivants :
+ Les logiciels sont développés dans un compte central, tandis que les charges de travail et les applications sont réparties sur plusieurs comptes et régions AWS.
+ Une seule clé multirégionale du système de gestion des clés AWS (AWS KMS) est utilisée pour le chiffrement et le déchiffrement afin de couvrir la reprise après sinistre.
+ La clé KMS est spécifique à une région et doit être maintenue ou créée dans trois régions différentes pour les artefacts du pipeline. Une clé multirégionale KMS permet de conserver le même identifiant de clé dans toutes les régions.
+ Le modèle de branchement du flux de travail Git est implémenté avec deux branches (development et main) et le code est fusionné à l'aide de pull requests (PRs). La fonction AWS Lambda déployée à partir de cette pile crée un PR entre la branche de développement et la branche principale. La fusion des relations publiques avec la succursale principale lance un CodePipeline pipeline AWS, qui orchestre le flux d'intégration continue et de livraison continue (CI/CD) et déploie les stacks sur tous les comptes.

Ce modèle fournit un exemple de configuration d'infrastructure sous forme de code (IaC) via AWS CloudFormation Stacks pour illustrer ce cas d'utilisation. Le blue/green déploiement de microservices est mis en œuvre à l'aide d'AWS CodeDeploy.

## Conditions préalables et limitations
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-prereqs"></a>

**Conditions préalables**
+ Quatre comptes AWS actifs :
  + Un compte d'outils pour gérer le pipeline de code et maintenir le CodeCommit référentiel AWS.
  + Trois comptes de charge de travail (test) pour déployer la charge de travail des microservices.
+ Ce modèle utilise les régions suivantes. Si vous souhaitez utiliser d'autres régions, vous devez apporter les modifications appropriées aux piles multirégionales AWS CodeDeploy et AWS KMS.
  + Compte Tools (AWS CodeCommit) : `ap-south-1`
  + Compte de charge de travail (test) 1 : `ap-south-1`
  + Compte de charge de travail (test) 2 : `eu-central-1`
  + Compte de charge de travail (test) 3 : `us-east-1`
+ Trois compartiments Amazon Simple Storage Service (Amazon S3) pour les régions de déploiement de chaque compte de charge de travail. (Ils sont appelés`S3BUCKETNAMETESTACCOUNT1`, `S3BUCKETNAMETESTACCOUNT2 ` et `S3BUCKETNAMETESTACCOUNT3 ` plus tard dans ce modèle.)

  Par exemple, vous pouvez créer ces compartiments dans des comptes et des régions spécifiques avec des noms de compartiments uniques comme suit (remplacez *xxxx* par un nombre aléatoire) :

  ```
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-xxxx-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-xxxx-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-xxxx-us-east-1 --region us-east-1
  
  #Example
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-18903-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-18903-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-18903-us-east-1 --region us-east-1
  ```

**Limites**

Le modèle utilise AWS CodeBuild et d'autres fichiers de configuration pour déployer un exemple de microservice. Si vous avez un autre type de charge de travail (par exemple, sans serveur), vous devez mettre à jour toutes les configurations pertinentes.

## Architecture
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-architecture"></a>

**Pile technologique cible**
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodeBuild
+ AWS CodeDeploy
+ AWS CodePipeline

**Architecture cible**

![\[Architecture cible pour le déploiement de microservices sur plusieurs comptes et régions\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a144c977-6823-4b08-a215-fae779b3ce7c/images/eedfabdb-f266-4190-b271-5caf7ac9b47b.png)


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

La configuration est automatisée à l'aide de modèles de CloudFormation pile AWS (iAc). Il peut être facilement adapté à plusieurs environnements et comptes.

## Outils
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-tools"></a>

**Services AWS**
+ [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 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 CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) automatise les déploiements vers Amazon Elastic Compute Cloud (Amazon EC2) ou des instances sur site, les fonctions AWS Lambda ou les services Amazon Elastic Container Service (Amazon ECS).
+ [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 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 évolutif et rapide, qui facilite l'exécution, l'arrêt et la gestion de conteneurs Docker sur un cluster.
+ [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.
+ [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.

**Outils supplémentaires**
+ [Git](https://git-scm.com/docs) est un système de contrôle de version distribué open source qui fonctionne avec le CodeCommit référentiel AWS.
+ [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. Ce modèle utilise Docker pour créer et tester des images de conteneurs localement.
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) et [cfn-nag](https://github.com/stelligent/cfn_nag) sont des outils open source qui vous aident à examiner les CloudFormation piles pour détecter d'éventuelles erreurs ou problèmes de sécurité.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel [ Blue/Green des déploiements GitHub mondiaux dans plusieurs régions et comptes](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline).

## Épopées
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-epics"></a>

### Configurer les variables d’environnement
<a name="set-up-environment-variables"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exportez les variables d'environnement pour le déploiement de la CloudFormation pile. | Définissez les variables d'environnement qui seront utilisées comme entrée dans les CloudFormation piles ultérieurement dans ce modèle.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Package et déploiement des CloudFormation stacks pour l'infrastructure
<a name="package-and-deploy-the-cloudformation-stacks-for-the-infrastructure"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Clonez le [référentiel d'échantillons](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline) dans un nouveau référentiel sur votre lieu de travail :<pre>##In work location<br />git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git</pre> | AWS DevOps | 
| Package des ressources Cloudformation. | Au cours de cette étape, vous devez empaqueter les artefacts locaux CloudFormation auxquels les modèles font référence pour créer les ressources d'infrastructure requises pour des services tels qu'Amazon Virtual Private Cloud (Amazon VPC) et Application Load Balancer.Les modèles sont disponibles dans le `Infra` dossier du référentiel de code.<pre>##In TestAccount1##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT1 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT1REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT1}.template</pre><pre>##In TestAccount2##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT2 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT2REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT2}.template</pre><pre>##In TestAccount3##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT3 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT3REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Validez les modèles de package. | Validez les modèles de package :<pre>aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT1}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT2}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Déployez les fichiers du package dans les comptes de charge de travail, | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Envoyez un exemple d'image et redimensionnez Amazon ECS
<a name="push-a-sample-image-and-scale-amazon-ecs"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Transférez un exemple d'image dans le référentiel Amazon ECR. | Transférez un exemple d'image (NGINX) dans le référentiel Amazon Elastic Container Registry (Amazon ECR) `web` nommé (tel que défini dans les paramètres). Vous pouvez personnaliser l'image selon vos besoins.Pour vous connecter et définir les informations d'identification permettant de transférer une image vers Amazon ECR, suivez les instructions de la documentation [Amazon ECR.](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)Les commandes sont les suivantes :<pre>  docker pull nginx<br />  docker images<br />  docker tag <imageid> aws_account_id.dkr.ecr.region.amazonaws.com/<web>:latest<br />  docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<web>:tag </pre> | AWS DevOps | 
| Faites évoluer Amazon ECS et vérifiez l'accès. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Configurer les services et les ressources de code
<a name="set-up-code-services-and-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un CodeCommit référentiel dans le compte Tools. | Créez un CodeCommit référentiel dans le compte d'outils à l'aide du `codecommit.yaml` modèle, qui se trouve dans le `code` dossier du GitHub référentiel. Vous ne devez créer ce référentiel que dans la seule région où vous prévoyez de développer le code.<pre>aws cloudformation deploy --stack-name codecommitrepoStack --parameter-overrides  CodeCommitReponame=$CODECOMMITREPONAME \<br />ToolsAccount=$TOOLSACCOUNT --template-file codecommit.yaml  --region $TOOLSACCOUNTREGION \<br />--capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Créez un compartiment S3 pour gérer les artefacts générés par CodePipeline. | Créez un compartiment S3 pour gérer les artefacts CodePipeline générés à l'aide du `pre-reqs-bucket.yaml` modèle, qui se trouve dans le `code` dossier du GitHub référentiel. Les piles doivent être déployées dans les trois comptes de charge de travail (test) et d'outils et dans les régions.<pre>aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Configurez une clé KMS multirégionale. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Configurez le CodeBuild projet dans le compte Outils. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Configurez CodeDeploy dans les comptes de charge de travail. | Utilisez le `codedeploy.yaml` modèle figurant dans le `code` dossier du GitHub référentiel pour le configurer CodeDeploy dans les trois comptes de charge de travail. La sortie de `mainInfraStack` inclut les Amazon Resource Names (ARNs) du cluster Amazon ECS et l'écouteur Application Load Balancer.Les valeurs des piles d'infrastructure sont déjà exportées, elles sont donc importées par les modèles de CodeDeploy pile.<pre>##WorkloadAccount1##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides  ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount2##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount3##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Configuration CodePipeline dans le compte d'outils
<a name="set-up-codepipeline-in-the-tools-account"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un pipeline de code dans le compte Tools. | Dans le compte des outils, exécutez la commande :<pre>aws cloudformation deploy --stack-name ecscodepipelinestack --parameter-overrides  \<br />TestAccount1=$TESTACCOUNT1 TestAccount1Region=$TESTACCOUNT1REGION \<br />TestAccount2=$TESTACCOUNT2 TestAccount2Region=$TESTACCOUNT2REGION \<br />TestAccount3=$TESTACCOUNT3 TestAccount3Region=$TESTACCOUNT3REGION \<br />CMKARNTools=$CMKTROOLSARN CMKARN1=$CMKARN1 CMKARN2=$CMKARN2 CMKARN3=$CMKARN3 \<br />CodeCommitRepoName=$CODECOMMITREPONAME BucketStartName=$BUCKETSTARTNAME \<br />--template-file codepipeline.yaml --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Fournissez un accès CodePipeline et des CodeBuild rôles dans la politique clé d'AWS KMS et dans la politique de compartiment S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Appelez et testez le pipeline
<a name="call-and-test-the-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Transférez les modifications au CodeCommit référentiel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez toutes les ressources déployées. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

## Résolution des problèmes
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Les modifications que vous avez apportées au référentiel ne sont pas déployées. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | 

## Ressources connexes
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-resources"></a>
+ [Transférer une image Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentation Amazon ECR)
+ [Connectez-vous à un CodeCommit référentiel AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) ( CodeCommit documentation AWS)
+ [Résolution des problèmes liés à AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html) ( CodeBuild documentation AWS)