

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Gestione blue/green las implementaciones de microservicios en varias cuentas y regiones mediante los servicios de código de AWS y las claves multirregionales de 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 y Anand Krishna Varanasi, Amazon Web Services*

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

Este patrón describe cómo implementar una aplicación de microservicios global desde una cuenta central de AWS a varias cuentas de carga de trabajo y regiones de acuerdo con una estrategia de blue/green implementación. El patrón es compatible con lo siguiente:
+ El software se desarrolla en una cuenta central, mientras que las cargas de trabajo y las aplicaciones se distribuyen en varias cuentas y regiones de AWS.
+ Se utiliza una única clave multirregional del Sistema de administración de claves de AWS (AWS KMS) para el cifrado y el descifrado a fin de permitir la recuperación de desastres.
+ La clave KMS es específica de cada región y debe mantenerse o crearse en tres regiones diferentes para los artefactos del proyecto. Una clave KMS multirregional facilita poder conservar el mismo ID de clave en todas las regiones.
+ El modelo de ramificación del flujo de trabajo de Git se implementa con dos ramas (de desarrollo y principal) y el código se fusiona mediante solicitudes de extracción (PRs). La función de AWS Lambda que se implementa desde esta pila crea una PR desde la rama de desarrollo hacia la rama principal. La fusión de PR con la rama principal inicia una CodePipeline canalización de AWS, que organiza el flujo de integración y entrega continuas (CI/CD) y despliega las pilas en todas las cuentas.

Este patrón proporciona un ejemplo de configuración de infraestructura como código (IaC) mediante CloudFormation pilas de AWS para demostrar este caso de uso. La blue/green implementación de microservicios se implementa mediante AWS CodeDeploy.

## Requisitos previos y limitaciones
<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>

**Requisitos previos **
+ Cuatro cuentas de AWS activas:
  + Una cuenta de herramientas para administrar la canalización de código y mantener el CodeCommit repositorio de AWS.
  + Tres cuentas de carga de trabajo (de prueba) para implementar la carga de trabajo de los microservicios.
+ Este patrón utiliza las siguientes regiones. Si desea utilizar otras regiones, debe realizar las modificaciones adecuadas en las pilas multirregionales de AWS CodeDeploy y AWS KMS.
  + Cuenta Tools (AWS CodeCommit): `ap-south-1`
  + Cuenta de carga de trabajo (de prueba) 1: `ap-south-1`
  + Cuenta de carga de trabajo (de prueba) 2: `eu-central-1`
  + Cuenta de carga de trabajo (de prueba) 3: `us-east-1`
+ Tres buckets de Amazon Simple Storage Service (Amazon S3) para las regiones de implementación de cada cuenta de carga de trabajo. (Se denominan `S3BUCKETNAMETESTACCOUNT1`, `S3BUCKETNAMETESTACCOUNT2 ` y `S3BUCKETNAMETESTACCOUNT3 ` más adelante en este patrón).

  A modo de ejemplo, se pueden crear estos buckets en cuentas y regiones específicas con nombres de bucket únicos de la siguiente manera (reemplazar *xxxx* por un número aleatorio):

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

**Limitaciones**

El patrón utiliza AWS CodeBuild y otros archivos de configuración para implementar un microservicio de muestra. Si tiene un tipo de carga de trabajo diferente (por ejemplo, sin servidor), debe actualizar todas las configuraciones pertinentes.

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

**Pila de tecnología de destino**
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodeBuild
+ AWS CodeDeploy
+ AWS CodePipeline

**Arquitectura de destino**

![\[Arquitectura de destino para implementar microservicios en varias cuentas y regiones\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a144c977-6823-4b08-a215-fae779b3ce7c/images/eedfabdb-f266-4190-b271-5caf7ac9b47b.png)


**Automatización y escala**

La configuración se automatiza mediante plantillas de CloudFormation pila de AWS (IaC). Se puede escalar fácilmente para varios entornos y cuentas.

## Tools (Herramientas)
<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>

**Servicios de AWS**
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación totalmente gestionado que le ayuda a compilar código fuente, ejecutar pruebas unitarias y producir artefactos listos para su implementación.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que le ayuda a almacenar y gestionar repositorios de Git de forma privada, sin necesidad de gestionar su propio sistema de control de código fuente.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) automatiza las implementaciones en Amazon Elastic Compute Cloud (Amazon EC2) o en instancias locales, funciones de AWS Lambda o servicios de Amazon Elastic Container Service (Amazon ECS).
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) le CodePipeline ayuda a modelar y configurar rápidamente las diferentes etapas de una versión de software y a automatizar los pasos necesarios para publicar cambios de software de forma continua.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) es un servicio de administración de contenedores escalable y rápido que ayuda a ejecutar, detener y administrar contenedores en un clúster.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) facilita poder crear y controlar claves criptográficas para proteger los datos.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

**Herramientas adicionales**
+ [Git](https://git-scm.com/docs) es un sistema de control de versiones distribuido y de código abierto que funciona con el CodeCommit repositorio de AWS.
+ [Docker](https://www.docker.com/) es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización del sistema operativo para entregar software en contenedores. Este patrón utiliza Docker para crear y probar imágenes de contenedores de forma local.
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) y [cfn-nag](https://github.com/stelligent/cfn_nag) son herramientas de código abierto que le ayudan a revisar CloudFormation las pilas para detectar cualquier error o problema de seguridad.

**Repositorio de código**

El código de este patrón está disponible en el repositorio de despliegues GitHub [globales Blue/Green ](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline) en varias regiones y cuentas.

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

### Configurar las variables de entorno
<a name="set-up-environment-variables"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Exporte las variables de entorno para el despliegue de la CloudFormation pila. | Defina las variables de entorno que se utilizarán como entrada en las CloudFormation pilas más adelante en este patrón.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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 las CloudFormation pilas para la infraestructura
<a name="package-and-deploy-the-cloudformation-stacks-for-the-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Clone el [repositorio de muestras](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline) en un nuevo repositorio de su lugar de trabajo:<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 | 
| Empaquete los recursos de Cloudformation. | En este paso, empaqueta los artefactos locales a los que hacen referencia las CloudFormation plantillas para crear los recursos de infraestructura necesarios para servicios como Amazon Virtual Private Cloud (Amazon VPC) y Application Load Balancer.Las plantillas están disponibles en la carpeta `Infra` del repositorio 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 las plantillas de paquetes. | Valide las plantillas de paquetes:<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 | 
| Implemente los archivos del paquete en las cuentas de carga de trabajo, | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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 | 

### Insertar una imagen de muestra y escalar Amazon ECS
<a name="push-a-sample-image-and-scale-amazon-ecs"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pase una imagen de muestra a un repositorio de Amazon ECR. | Pase una imagen de muestra (NGINX) al repositorio Amazon Elastic Container Registry (Amazon ECR) denominado `web` (tal y como se establece en los parámetros). Puede personalizar la imagen según sea necesario.Para iniciar sesión y configurar las credenciales para enviar una imagen a Amazon ECR, siga las instrucciones de la documentación de [Amazon ECR.](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)Los comandos son:<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 Amazon ECS y verifique el acceso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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 los servicios y recursos de código
<a name="set-up-code-services-and-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un CodeCommit repositorio en la cuenta de herramientas. | Cree un CodeCommit repositorio en la cuenta de herramientas mediante la `codecommit.yaml` plantilla, que se encuentra en la `code` carpeta del GitHub repositorio. Debe crear este repositorio solo en la única región en la que planea desarrollar el 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 | 
| Cree un bucket de S3 para gestionar los artefactos generados por CodePipeline. | Cree un depósito de S3 para gestionar los artefactos generados CodePipeline mediante la `pre-reqs-bucket.yaml` plantilla, que se encuentra en la `code` carpeta del GitHub repositorio. Las pilas se deben implementar en las tres regiones y cuentas de carga de trabajo (prueba) y de herramientas.<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 una clave KMS multirregional. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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 el CodeBuild proyecto en la cuenta de herramientas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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 | 
| Configúrelo CodeDeploy en cuentas de carga de trabajo. | Utilice la `codedeploy.yaml` plantilla de la `code` carpeta del GitHub repositorio para configurar las tres cuentas CodeDeploy de carga de trabajo. El resultado de `mainInfraStack` incluye los nombres de recursos de Amazon (ARNs) del clúster de Amazon ECS y el listener Application Load Balancer.Los valores de las pilas de infraestructura ya se han exportado, por lo que las plantillas de pila los CodeDeploy importan.<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 | 

### Configúrelo CodePipeline en la cuenta de herramientas
<a name="set-up-codepipeline-in-the-tools-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un proyecto de código en la cuenta de herramientas. | En la cuenta de herramientas, ejecute el 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 | 
| Proporcione acceso CodePipeline y CodeBuild funciones en la política de claves de AWS KMS y en la política de bucket de S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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 | 

### Llamar y probar el proyecto
<a name="call-and-test-the-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Envía los cambios al CodeCommit repositorio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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) |  | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie todos los recursos implementados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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) |  | 

## Resolución 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 | Solución | 
| --- | --- | 
| Los cambios realizados en el repositorio no se están implementando. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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>
+ [Insertar una imagen de Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentación de Amazon ECR)
+ [Conectarse a un CodeCommit repositorio](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) de AWS ( CodeCommit documentación de AWS)
+ [Solución de problemas de AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html) ( CodeBuild documentación de AWS)