

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Gerencie blue/green implantações de microsserviços em várias contas e regiões usando os serviços de código da AWS e as chaves multirregionais do 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 e Anand Krishna Varanasi, Amazon Web Services*

## Resumo
<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>

Esse padrão descreve como implantar um aplicativo global de microsserviços de uma conta central da AWS para várias contas de carga de trabalho e regiões de acordo com uma estratégia de blue/green implantação. O padrão suporta o seguinte:
+ O software é desenvolvido em uma conta central, enquanto as workloads e os aplicativos estão espalhados por várias contas e regiões da AWS.
+ Uma única chave multirregional do AWS Key Management System (AWS KMS) é usada para criptografia e descriptografia para abranger a recuperação de desastres.
+ A chave KMS é específica da região e precisa ser mantida ou criada em três regiões diferentes para artefatos do pipeline. Uma chave multirregional do KMS ajuda a manter a mesma ID de chave em todas as regiões.
+ O modelo de ramificação do fluxo de trabalho do Git é implementado com duas ramificações (desenvolvimento e principal) e o código é mesclado usando pull requests (). PRs A função do AWS Lambda que é implantada a partir dessa pilha cria um PR da ramificação de desenvolvimento para a ramificação principal. A fusão de relações públicas com a filial principal inicia um CodePipeline pipeline da AWS, que orquestra o fluxo de integração contínua e entrega contínua (CI/CD) e implanta as pilhas em todas as contas.

Esse padrão fornece um exemplo de configuração de infraestrutura como código (IaC) por meio de CloudFormation pilhas da AWS para demonstrar esse caso de uso. A blue/green implantação de microsserviços é implementada usando a AWS CodeDeploy.

## Pré-requisitos e limitaçõ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-prereqs"></a>

**Pré-requisitos **
+ Quatro contas ativas da AWS:
  + Uma conta de ferramentas para gerenciar o pipeline de código e manter o CodeCommit repositório da AWS.
  + Três contas de workload (teste) para implantar a workload de microsserviços.
+ Esse padrão usa as seguintes regiões. Se quiser usar outras regiões, você deve fazer as modificações apropriadas nas pilhas multirregionais da AWS CodeDeploy e do AWS KMS.
  + Conta de ferramentas (AWS CodeCommit): `ap-south-1`
  + Conta de workload (teste) 1: `ap-south-1`
  + Conta de workload (teste) 2: `eu-central-1`
  + Conta de workload (teste) 3: `us-east-1`
+ Três buckets do Amazon Simple Storage Service (Amazon S3) para as regiões de implantação em cada conta de workload. (Eles são chamados `S3BUCKETNAMETESTACCOUNT1`, `S3BUCKETNAMETESTACCOUNT2 ` e `S3BUCKETNAMETESTACCOUNT3 ` posteriormente, nesse padrão.)

  Por exemplo, você pode criar esses buckets em contas e regiões específicas com nomes de bucket exclusivos da seguinte forma (substitua *xxxx* por um número aleatório):

  ```
  ##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
  ```

**Limitações**

O padrão usa a AWS CodeBuild e outros arquivos de configuração para implantar um microsserviço de amostra. Se você tiver um tipo de workload diferente (por exemplo, tecnologia sem servidor), deverá atualizar todas as configurações relevantes.

## Arquitetura
<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>

**Pilha de tecnologias de destino**
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodeBuild
+ AWS CodeDeploy
+ AWS CodePipeline

**Arquitetura de destino**

![\[Arquitetura de destino para implantação de microsserviços em várias contas e regiões\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a144c977-6823-4b08-a215-fae779b3ce7c/images/eedfabdb-f266-4190-b271-5caf7ac9b47b.png)


**Automação e escala**

A configuração é automatizada usando modelos de CloudFormation pilha da AWS (IaC). Ele pode ser facilmente escalado para vários ambientes e contas.

## Ferramentas
<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>

**Serviços da AWS**
+  CloudFormationA [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) ajuda você a configurar recursos da AWS, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas as contas e regiões da AWS.
+  CodeBuildA [AWS](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de criação totalmente gerenciado que ajuda você a compilar o código-fonte, executar testes unitários e produzir artefatos prontos para implantação.
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.
+ A [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) automatiza implantações no Amazon Elastic Compute Cloud (Amazon EC2) ou em instâncias locais, funções do AWS Lambda ou serviços Amazon Elastic Container Service (Amazon ECS).
+  CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software e automatizar as etapas necessárias para liberar alterações de software continuamente.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ O [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) é um serviço de gerenciamento de contêineres escalável e rápido que facilita a execução, a interrupção e o gerenciamento de contêineres em um cluster.
+ O [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ajuda você a criar e controlar chaves criptográficas para proteger seus dados.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

**Ferramentas adicionais**
+ [O Git](https://git-scm.com/docs) é um sistema de controle de versão distribuído e de código aberto que funciona com o repositório da AWS. CodeCommit 
+ O [Docker](https://www.docker.com/) é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres. Esse padrão usa o Docker para compilar e testar imagens de contêiner localmente.
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) e [cfn-nag](https://github.com/stelligent/cfn_nag) são ferramentas de código aberto que ajudam você a analisar as CloudFormation pilhas em busca de erros e problemas de segurança.

**Repositório de código**

O código desse padrão está disponível no repositório de [ Blue/Green implantações GitHub globais em várias regiões e contas](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline).

## Épicos
<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>

### Definição de variáveis de ambiente
<a name="set-up-environment-variables"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exporte variáveis de ambiente para implantação CloudFormation de pilha. | Defina as variáveis de ambiente que serão usadas como entrada para as CloudFormation pilhas posteriormente nesse padrão.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/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 e implemente as CloudFormation pilhas para a infraestrutura
<a name="package-and-deploy-the-cloudformation-stacks-for-the-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Clone o [repositório de amostra](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline) em um novo repositório em seu local de trabalho:<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 | 
| Empacote os recursos do Cloudformation. | Nesta etapa, você empacota os artefatos locais aos quais os CloudFormation modelos fazem referência para criar os recursos de infraestrutura necessários para serviços como Amazon Virtual Private Cloud (Amazon VPC) e Application Load Balancer.Os modelos estão disponíveis na pasta `Infra` do repositório de código.<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 | 
| Valide os modelos de pacote. | Valide os modelos de pacote:<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 | 
| Implante os arquivos do pacote nas contas de workload, | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/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 | 

### Envie uma imagem de amostra e escale o Amazon ECS
<a name="push-a-sample-image-and-scale-amazon-ecs"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Envia uma imagem de amostra para o repositório do Amazon ECR. | Envia uma imagem de amostra (NGINX) para o repositório do Amazon Elastic Container Registry (Amazon ECR) chamado `web` (conforme definido nos parâmetros). Você pode personalizar a imagem conforme necessário.Para fazer login e definir as credenciais para enviar uma imagem para o Amazon ECR, siga as instruções na [documentação do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html).Os comandos são:<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 | 
| Escale o Amazon ECS e verifique o acesso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/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 | 

### Configurar serviços e recursos de código
<a name="set-up-code-services-and-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um CodeCommit repositório na conta de ferramentas. | Crie um CodeCommit repositório na conta de ferramentas usando o `codecommit.yaml` modelo, que está na `code` pasta do GitHub repositório. Você deve criar este repositório somente na única região em que planeja desenvolver o código.<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 | 
| Crie um bucket do S3 para gerenciar artefatos gerados pelo. CodePipeline | Crie um bucket do S3 para gerenciar artefatos gerados CodePipeline usando o `pre-reqs-bucket.yaml` modelo, que está na `code` pasta do GitHub repositório. As pilhas devem ser implantadas em todas as três contas e regiões de workload (teste) e ferramentas.<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 | 
| Configure uma chave KMS multirregional. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/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 | 
| Configure o CodeBuild projeto na conta de ferramentas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/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 | 
| Configure CodeDeploy em contas de carga de trabalho. | Use o `codedeploy.yaml` modelo na `code` pasta do GitHub repositório para configurar CodeDeploy em todas as três contas de carga de trabalho. A saída de `mainInfraStack` inclui os Amazon Resource Names (ARNs) do cluster Amazon ECS e o ouvinte do Application Load Balancer.Os valores das pilhas de infraestrutura já foram exportados e, portanto, são importados pelos modelos de CodeDeploy pilha.<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 | 

### Configurar CodePipeline na conta de ferramentas
<a name="set-up-codepipeline-in-the-tools-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um pipeline de código na conta de ferramentas. | Na conta de ferramentas, execute o comando:<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 | 
| Forneça acesso CodePipeline e CodeBuild funções na política de chaves do AWS KMS e na política de bucket do S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/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 | 

### Ligue e teste o pipeline
<a name="call-and-test-the-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Envie as alterações para o CodeCommit repositório. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/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) |  | 

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe todos os recursos implantados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/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) |  | 

## Solução de problemas
<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>


| Problema | Solução | 
| --- | --- | 
| As alterações que você confirmou no repositório não estão sendo implantadas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/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) | 

## Recursos relacionados
<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>
+ [Enviando uma imagem do Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentação do Amazon ECR)
+ [Conecte-se a um CodeCommit repositório da AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) ( CodeCommit documentação da AWS)
+ [Solução de problemas da](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html) AWS CodeBuild ( CodeBuild documentação da AWS)