

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.

# Implemente código en varias regiones de AWS mediante AWS CodePipeline CodeCommit, AWS y AWS CodeBuild
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild"></a>

*Anand Krishna Varanasi, Amazon Web Services*

## Resumen
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-summary"></a>

Este patrón demuestra cómo crear una infraestructura o arquitectura en varias regiones de Amazon Web Services (AWS) mediante AWS CloudFormation. Incluye integración continua (CI) e implementación continua (CD) en varias regiones de AWS para lograr implementaciones más rápidas.** **Por ejemplo, se probaron los pasos de este patrón para crear un CodePipeline trabajo de AWS para implementarlo en tres regiones de AWS. Puede cambiar el número de regiones en función del caso de uso.

## Requisitos previos y limitaciones
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ 
  + Un CodeBuild puesto en *Amazon S3 FullAccess* y en *CloudWatchFullAccess*las políticas. Estas políticas permiten CodeBuild ver eventos de AWS a CodeCommit través de Amazon CloudWatch y utilizar Amazon Simple Storage Service (Amazon S3) como almacén de artefactos.
  + Un CloudFormation rol de AWS con las siguientes políticas, que permiten a AWS CloudFormation, en la fase final de creación, crear o actualizar las funciones de AWS Lambda, enviar o ver CloudWatch los registros de Amazon y crear y actualizar conjuntos de cambios. 
    + *AWSLambdaFullAccess*
    + *AWSCodeDeployFullAccess*
    + *CloudWatchFullAccess*
    + *AWSCloudFormationFullAccess*
    + *AWSCodePipelineFullAccess*
**nota**  
Dos funciones de AWS Identity and Access Management (IAM) para AWS CodeBuild y AWS CloudFormation con las políticas adecuadas CodeBuild para realizar las tareas de CI consistentes en probar, agrupar, empaquetar los artefactos e implementarlos en varias regiones de AWS en paralelo.  Compruebe las políticas creadas por CodePipeline para comprobar que CodeBuild AWS cuenta con los CloudFormation permisos adecuados en las fases de CI y CD.

## Arquitectura
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-architecture"></a>

![Un CodePipeline trabajo de AWS que se implementa en tres regiones de AWS.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/d44c393c-7243-4d4e-8b84-88a8503af98f/images/5c27fc35-5e62-4292-8b18-a7bc7faf2631.png)


La arquitectura y el flujo de trabajo de varias regiones de este patrón comprenden los siguientes pasos.

1. Envía el código a un CodeCommit repositorio.

1. Al recibir cualquier actualización o confirmación de código, CodeCommit invoca un CloudWatch evento que, a su vez, inicia un CodePipeline trabajo.

1. CodePipeline activa el CI gestionado por. CodeBuild Se realizan las siguientes tareas.
   + Prueba de las CloudFormation plantillas de AWS (opcional)
   + Empaquetado de las CloudFormation plantillas de AWS para cada región incluidas en la implementación. Por ejemplo, este patrón se implementa en paralelo en tres regiones de AWS, por lo que CodeBuild empaqueta las CloudFormation plantillas de AWS en tres grupos de S3, uno en cada región especificada. Los depósitos de S3 se utilizan únicamente CodeBuild como repositorios de artefactos.

1. CodeBuild empaqueta los artefactos como entrada para la siguiente fase de implementación, que se ejecuta en paralelo en las tres regiones de AWS. Si especifica un número diferente de regiones, CodePipeline se desplegará en esas regiones.

## Tools (Herramientas)
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-tools"></a>

**Herramientas**
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html): CodePipeline es un servicio de entrega continua que puede utilizar para modelar, visualizar y automatizar los pasos necesarios para publicar los cambios de software de forma continua.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html): CodeBuild es un servicio de compilación totalmente gestionado que compila el código fuente, ejecuta pruebas unitarias y produce artefactos listos para su implementación.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html): CodeCommit es un servicio de control de versiones hospedado por Amazon Web Services que puede utilizar para almacenar y gestionar activos (como código fuente y archivos binarios) en la nube de forma privada.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): AWS CloudFormation es un servicio que le ayuda a modelar y configurar sus recursos de Amazon Web Services para que pueda dedicar menos tiempo a gestionar esos recursos y más a centrarse en las aplicaciones que se ejecutan en AWS.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html): AWS Identity and Access Management (IAM) es un servicio web que le ayuda a controlar de forma segura el acceso a los recursos de AWS.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html): Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento para Internet. Está diseñado para facilitar a los desarrolladores recursos de computación escalables basados en Web.

**Código**

El siguiente código de ejemplo es para el archivo `BuildSpec.yaml` (fase de compilación).

```
---
artifacts:
discard-paths: true
files:
- packaged-first-region.yaml
- packaged-second-region.yaml
- packaged-third-region.yaml
phases:
build:
commands:
- echo "********BUILD PHASE - CF PACKAGING**********"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_FIRST_REGION --output-template-file packaged-first-region.yaml --region $FIRST_REGION"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_SECOND_REGION --output-template-file packaged-second-region.yaml --region $SECOND_REGION"
- "aws cloudformation package --template-file sam-template-anand.yaml --s3-bucket $S3_THIRD_REGION --output-template-file packaged-third-region.yaml --region $THIRD_REGION"
install:
commands:
- echo "********BUILD PHASE - PYTHON SETUP**********"
runtime-versions:
python: 3.8
post_build:
commands:
- echo "********BUILD PHASE - PACKAGING COMPLETION**********"
pre_build:
commands:
- echo "********BUILD PHASE - DEPENDENCY SETUP**********"
- "npm install --silent --no-progress"
- echo "********BUILD PHASE - DEPENDENCY SETUP DONE**********"
version: 0.2
```

## Epics
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-epics"></a>

### Prepare el código y el CodeCommit repositorio
<a name="prepare-the-code-and-the-codecommit-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Seleccione la región de AWS principal para la implementación. | Inicie sesión en su cuenta de AWS y elija la región principal para la implementación. El CodeCommit repositorio estará en la región principal. | DevOps | 
| Cree el CodeCommit repositorio. | Cree el CodeCommit repositorio e introduzca el código necesario en él. Por lo general, el código incluye las plantillas de AWS CloudFormation o AWS SAM, el código Lambda, si lo hubiera, y los CodeBuild `buildspec.yaml` archivos como entrada a AWS. CodePipeline | DevOps | 
| Inserte el código en el CodeCommit repositorio. | En la sección de *adjuntos*, descargue el código de este ejemplo y, a continuación, inserte el código necesario en él. Por lo general, el código puede incluir plantillas de AWS CloudFormation o AWS SAM, código Lambda y los CodeBuild `buildspec.yaml` archivos como entrada a la canalización. | DevOps | 

### Fase de origen: Crear la canalización
<a name="source-phase-create-the-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree el CodePipeline trabajo. | En la CodePipeline consola, selecciona **Crear canalización**. | DevOps | 
| Asigne un nombre al CodePipeline trabajo y elija la configuración del rol de servicio. | Introduzca un nombre para el trabajo y mantenga la configuración de rol de servicio predeterminada para CodePipeline crear el rol con las políticas necesarias adjuntas. | DevOps | 
| Especifique la ubicación del almacén de artefactos. | En **Configuración avanzada**, mantenga la opción predeterminada para CodePipeline crear un bucket de S3 que se utilizará como almacenamiento de artefactos de código. Si en su lugar utiliza un bucket de S3 existente, el bucket debe estar en la región principal que especificó en la primera épica. | DevOps | 
| Especifique la clave de cifrado. | Elimine la opción predeterminada, **clave administrada de AWS predeterminada** o utilice la clave administrada por el cliente de AWS Key Management Service (AWS KMS). | DevOps | 
| Especifique el proveedor de origen. | En **Proveedor de código fuente**, elija **AWS CodeCommit**. | DevOps | 
| Especifique el repositorio. | Elige el CodeCommit repositorio que creaste en la primera epopeya. Si ha colocado el código en una ramificación, elija la rama. | DevOps | 
| Especifique cómo se detectan los cambios en el código. | Mantenga el valor predeterminado, **Amazon CloudWatch Events**, como activador del cambio CodeCommit para iniciar el CodePipeline trabajo. | DevOps | 

### Fase de creación: configure la canalización
<a name="build-phase-configure-the-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Especifique el proveedor de compilación. | Para el proveedor de compilación, elija **AWS CodeBuild**. | DevOps | 
| Especifique la Región de AWS. | Elija la región principal que especificó en la primera épica. | DevOps | 

### Fase de compilación: cree y configure el proyecto
<a name="build-phase-create-and-configure-the-project"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación del proyecto | Elija **Crear proyecto** e especifique un nombre para el proyecto. | DevOps | 
| Especifique la imagen del entorno. | Para esta demostración del patrón, utilice la imagen CodeBuild gestionada por defecto. También tiene la opción de utilizar una imagen de Docker personalizada si tiene una. | DevOps | 
| Especifique el sistema operativo. | Elija Amazon Linux 2 o Ubuntu.Se acerca el fin de la compatibilidad de Amazon Linux 2. Para obtener más información, consulte [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/). | DevOps | 
| Especifique el rol de servicio. | Elija el rol para el que creó CodeBuild antes de empezar a crear el CodePipeline trabajo. (Consulte la sección *Requisitos previos*.) | DevOps | 
| Establezca opciones adicionales. | Para **Tiempo de espera** y el **Tiempo de espera en cola**, mantenga los valores predeterminados. En el caso del certificado, mantenga la configuración predeterminada a menos que desee utilizar un certificado personalizado. | DevOps | 
| Crear las variables de entorno. | Para cada región de AWS en la que desee realizar la implementación, cree variables de entorno proporcionando el nombre del bucket de S3 y el nombre de la región (por ejemplo, us-east-1). | DevOps | 
| Proporcione el nombre del archivo buildspec, si no es buildspec.yml. | Mantenga este campo en blanco si el nombre del archivo es el predeterminado, `buildspec.yaml`. Si ha cambiado el nombre del archivo buildspec, introdúzcalo aquí. Asegúrese de que coincide con el nombre del archivo que está en el CodeCommit repositorio. | DevOps | 
| Especifique el registro. | Para ver los registros de Amazon CloudWatch Events, mantenga la configuración predeterminada. O bien, puede definir cualquier nombre de grupo o registrador específico. | DevOps | 

### Omitir la fase de implementación
<a name="skip-the-deploy-phase"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Omita la fase de implementación y complete la creación de la canalización. | Al configurar la canalización, CodePipeline permite crear solo una etapa en la fase de implementación. Para realizar la implementación en varias regiones de AWS, omita esta fase. Una vez creada la canalización, puede añadir varias etapas de la fase de implementación. | DevOps | 

### Fase de implementación: configure la canalización para la implementación en la primera región
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-first-region"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Agregue una etapa a la fase de implementación. | Edite la canalización y elija **Agregar etapa** en la fase de implementación. Esta primera etapa es para la región principal. | DevOps | 
| Proporcione un nombre de acción para la etapa. | Introduzca un nombre único que refleje la primera etapa (principal) y la región. Por ejemplo, introduzca **primary\_<region>\_deploy**. | DevOps | 
| Especifique el proveedor de acciones. | En **Action provider**, elija AWS CloudFormation. | DevOps | 
| Configure la región para la primera etapa. | Elija la primera región (principal), la misma región en CodePipeline la CodeBuild que están configuradas. Esta es la región principal en la que desea implementar la pila. | DevOps | 
| Especifique el artefacto de entrada. | Elija **BuildArtifact**. Este es el resultado de la fase de construcción. | DevOps | 
| Especifique la acción que se va a realizar. | Para **Modo acción**, elija **Crear o actualizar una pila**. | DevOps | 
| Introduzca un nombre para la CloudFormation pila. |  | DevOps | 
| Especifique la plantilla para la primera región. | Seleccione el nombre del paquete específico de la región que empaquetó CodeBuild y descargó en el depósito de S3 de la primera región (principal). | DevOps | 
| Especifique las capacidades. | Las capacidades son necesarias si la plantilla de pila incluye recursos de IAM o si se crea una pila directamente a partir de una plantilla que contiene macros. Para este patrón, utilice CAPABILITY\_IAM, CAPABILITY\_NAMED\_IAM y CAPABILITY\_AUTO\_EXPAND. | DevOps | 

### Fase de despliegue: configure la canalización para la implementación en la segunda región
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-second-region"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Añada la segunda etapa a la fase de despliegue. | Para añadir una etapa para la segunda región, edite la canalización y elija **Añadir etapa** en la fase de despliegue. Importante: el proceso de creación de la segunda región es el mismo que el de la primera región, excepto por los siguientes valores. | DevOps | 
| Proporcione un nombre de acción para la segunda etapa. | Introduzca un nombre único que refleje la segunda etapa y la segunda región. | DevOps | 
| Configure la región para la segunda etapa. | Elija la segunda región en la que desea implementar la pila. | DevOps | 
| Especifique la plantilla para la segunda región. | Seleccione el nombre del paquete específico de la región que empaquetó CodeBuild y descargó en el depósito de S3 de la segunda región. | DevOps | 

### Fase de implementación: configure la canalización para la implementación en la tercera región
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-third-region"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Añada la tercera etapa a la fase de implementación. | Para añadir una etapa para la tercera región, edite la canalización y elija **Añadir etapa** en la fase de implementación. Importante: el proceso de creación de la segunda región es el mismo que el de las dos regiones anteriores, excepto por los siguientes valores. | DevOps | 
| Proporcione un nombre de acción para la tercera etapa. | Introduzca un nombre único que refleje la tercera etapa y la tercera región. | DevOps | 
| Configure la región para la tercera etapa. | Elija la tercera región en la que desea implementar la pila. | DevOps | 
| Especifique la plantilla para la tercera región. | Seleccione el nombre del paquete específico de la región que empaquetó CodeBuild y descargó en el depósito de S3 de la tercera región. | DevOps | 

### Eliminar la implementación
<a name="clean-up-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Eliminación de los recursos de AWS. | Para limpiar la implementación, elimine las CloudFormation pilas de cada región. A continuación CodeCommit, elimine los CodePipeline recursos CodeBuild, y de la región principal. | DevOps | 

## Recursos relacionados
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-resources"></a>
+ [¿Qué es AWS CodePipeline?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [Modelo de aplicación sin servidor de AWS](https://aws.amazon.com/serverless/sam/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)
+ [Referencia de estructura de CloudFormation arquitectura de AWS para AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-CloudFormation.html)

## Conexiones
<a name="attachments-d44c393c-7243-4d4e-8b84-88a8503af98f"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/d44c393c-7243-4d4e-8b84-88a8503af98f/attachments/attachment.zip)