

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.

# Detecta automáticamente los cambios e inicia diferentes CodePipeline canalizaciones para un monorepo en CodeCommit
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit"></a>

*Helton Ribeiro, Petrus Batalha y Ricardo Morais, Amazon Web Services*

## Resumen
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-summary"></a>

**Aviso**: ya no AWS Cloud9 está disponible para nuevos clientes. Los clientes actuales de AWS Cloud9 pueden seguir utilizando el servicio con normalidad. [Más información](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Este patrón le ayuda a detectar automáticamente los cambios en el código fuente de una aplicación basada en monorepo AWS CodeCommit y, a continuación, a iniciar una canalización AWS CodePipeline que ejecute la integración continua y la entrega continuas (CI/CD) automation for each microservice. This approach means that each microservice in your monorepo-based application can have a dedicated CI/CDcanalización), lo que garantiza una mejor visibilidad, un intercambio más sencillo del código y una mejor colaboración, estandarización y capacidad de descubrimiento.

La solución descrita en este patrón no realiza ningún análisis de dependencia entre los microservicios del monorepo. Solo detecta los cambios en el código fuente e inicia la canalización correspondiente. CI/CD 

El patrón AWS Cloud9 se utiliza como entorno de desarrollo integrado (IDE) y AWS Cloud Development Kit (AWS CDK) para definir una infraestructura mediante dos CloudFormation pilas: `MonoRepoStack` y. `PipelinesStack` La `MonoRepoStack` pila crea la entrada monorepo AWS CodeCommit y la AWS Lambda función que inicia las canalizaciones. CI/CD La pila `PipelinesStack` define su infraestructura de canalizaciones.

**importante**  
El flujo de trabajo de este patrón es una prueba de concepto (PoC). Le recomendamos que utilice esta opción solo en un entorno de prueba. Si desea utilizar el enfoque de este patrón en un entorno de producción, consulte [las prácticas recomendadas de seguridad en IAM en la documentación AWS Identity and Access Management (IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)) y realice los cambios necesarios en sus funciones de IAM y. Servicios de AWS 

## Requisitos previos y limitaciones
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-prereqs"></a>

**Requisitos previos **
+ Una cuenta activa. AWS 
+ AWS Command Line Interface (AWS CLI), instalada y configurada. Para obtener más información, consulte [Instalación, actualización y desinstalación de AWS CLI en la](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) AWS CLI documentación.  
+ Python 3 y `pip` instalados en su equipo local. Para obtener más información, consulte la [documentación de Python](https://www.python.org/). 
+ AWS CDK instalado y configurado Para obtener más información, consulte [Introducción a AWS CDK la](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) AWS CDK documentación. 
+ Un AWS Cloud9 IDE, instalado y configurado. Para obtener más información, consulte [Configuración AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/setting-up.html) en la AWS Cloud9 documentación. 
+ El repositorio de [activadores multicanalización de GitHub AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger), clonado en su máquina local. 
+ Un directorio existente que contiene el código de la aplicación con el que desea crear e implementar. CodePipeline
+ Familiaridad y experiencia con las DevOps mejores prácticas en el Nube de AWS. Para aumentar su familiaridad DevOps, puede utilizar el patrón [Construir una arquitectura de acoplamiento flexible con microservicios utilizando DevOps prácticas y AWS Cloud9](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-loosely-coupled-architecture-with-microservices-using-devops-practices-and-aws-cloud9.html) en el AWS sitio web de orientación prescriptiva.  

## Arquitectura
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-architecture"></a>

El siguiente diagrama muestra cómo usar el AWS CDK para definir una infraestructura con dos AWS CloudFormation pilas: y. `MonoRepoStack` `PipelinesStack`

![Flujo de trabajo para usar la AWS CDK para definir una infraestructura con dos CloudFormation pilas.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/b0bb1094-b598-4b3d-ab8b-ad9b0eb45f38.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. El proceso de arranque utiliza el AWS CDK para crear las AWS CloudFormation pilas y. `MonoRepoStack` `PipelinesStack`

1. La `MonoRepoStack` pila crea el CodeCommit repositorio para la aplicación y la función `monorepo-event-handler` Lambda que se inicia después de cada confirmación.

1. La `PipelinesStack` pila crea las canalizaciones CodePipeline iniciadas por la función Lambda. Cada microservicio debe tener una canalización de infraestructura definida.

1. La canalización para `microservice-n` la inicia la función Lambda e inicia sus CI/CD etapas aisladas que se basan en el código fuente de. CodeCommit

1. La canalización para `microservice-1` la inicia la función Lambda e inicia sus CI/CD etapas aisladas que se basan en el código fuente de. CodeCommit

El siguiente diagrama muestra el despliegue de las AWS CloudFormation pilas `MonoRepoStack` y `PipelinesStack` en una cuenta.

![Implementación de las CloudFormation pilas MonoRepoStack y PipelinesStack en una cuenta de AWS.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/39e60e49-dea2-486d-8a2c-6cae438f69b4.png)


1. Un usuario cambia el código de uno de los microservicios de la aplicación.

1. El usuario envía los cambios de un repositorio local a un CodeCommit repositorio.

1. La actividad de envío inicia la función Lambda que recibe todos los envíos al repositorio. CodeCommit 

1. La función de Lambda lee un parámetro en el Almacén de parámetros, una capacidad de AWS Systems Manager, para recuperar el ID de confirmación más reciente. El parámetro tiene el formato de denominación:. `/MonoRepoTrigger/{repository}/{branch_name}/LastCommit` Si no se encuentra el parámetro, la función Lambda lee el último ID de confirmación del CodeCommit repositorio y guarda el valor devuelto en el almacén de parámetros.

1. Tras identificar el ID de confirmación y los archivos modificados, la función Lambda identifica las canalizaciones de cada directorio de microservicios e inicia la canalización requerida. CodePipeline 

## Tools (Herramientas)
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)es un marco de desarrollo de software para definir la infraestructura de nube en código y aprovisionarla mediante ella. CloudFormation
+ [Python](https://www.python.org/) es un lenguaje de programación que le permite trabajar rápidamente e integrar sistemas de manera más eficaz.

**Código**

El código fuente y las plantillas de este patrón están disponibles en el GitHub [AWS CodeCommit repositorio multipipeline triggers de monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger).

## Prácticas recomendadas
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-best-practices"></a>
+ Este ejemplo de arquitectura no incluye soluciones de supervisión para la infraestructura implementada. Si desea implementar esta solución en un entorno de producción, le recomendamos que habilite la supervisión. Para obtener más información, consulte [Supervise sus aplicaciones sin servidor con CloudWatch Application Insights](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/monitor-app-insights.html) en la AWS Serverless Application Model documentación ().AWS SAM
+ Al editar el código de muestra que proporciona este patrón, siga las [prácticas recomendadas para desarrollar e implementar la infraestructura de nube](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) de la AWS CDK documentación.
+ Al definir las canalizaciones de microservicios, revise las [prácticas recomendadas de seguridad](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) de la AWS CodePipeline documentación.
+ También puede comprobar las prácticas recomendadas en su AWS CDK código mediante la utilidad [cdk-nag](https://github.com/cdklabs/cdk-nag). Esta herramienta utiliza un conjunto de reglas, agrupadas por paquetes, para evaluar el código. Estos son los paquetes disponibles:
  + [AWS Biblioteca de soluciones](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions)
  + [Ley de Portabilidad y Responsabilidad de Seguros Médicos (HIPAA), norma de seguridad](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaa-security)
  + [Instituto Nacional de Estándares y Tecnología (NIST) 800-53, rev. 4](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-4)
  + [NIST 800-53 rev. 5](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-5)
  + [La norma de seguridad de datos del sector de pagos con tarjeta (PCI DSS), versión 3.2.1](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pci-dss-321)

## Epics
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-epics"></a>

### Configuración del entorno
<a name="set-up-the-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un entorno virtual de Python. | En su AWS Cloud9 IDE, cree un entorno virtual de Python e instale las dependencias necesarias ejecutando el siguiente comando:<br />`make install` | Desarrollador | 
| Arranca el Cuenta de AWS y Región de AWS para. AWS CDK | Inicie la región Cuenta de AWS y requerida ejecutando el siguiente comando:<br />`make bootstrap account-id=<your-AWS-account-ID> region=<required-region>` | Desarrollador | 

### Cómo añadir una nueva canalización para un microservicio
<a name="add-a-new-pipeline-for-a-microservice"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
|  Añada su código de muestra al directorio de su aplicación. | Añada el directorio que contiene el código de la aplicación de muestra al `monorepo-sample` directorio del repositorio clonado de GitHub [AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) multi-pipeline triggers. | Desarrollador | 
| Edite el archivo `monorepo-main.json`. | Añada el nombre del directorio del código de la aplicación y el nombre de la canalización al archivo `monorepo-main.json` del repositorio clonado . | Desarrollador | 
| Cree la canalización. | En el directorio `Pipelines` del repositorio , añada la canalización `class` de su aplicación. El directorio contiene dos archivos de ejemplo, `pipeline_hotsite.py` y `pipeline_demo.py`. Cada archivo tiene tres etapas: código fuente, compilación e implementación.<br />Puede copiar uno de los archivos y modificarlo según los requisitos de su aplicación.  | Desarrollador | 
| Edite el archivo `monorepo_config.py`. | En `service_map`, añada el nombre del directorio de su aplicación y la clase que creó para la canalización.<br />Por ejemplo, en el siguiente código, se muestra una definición de canalización en el directorio `Pipelines` que usa un archivo llamado `pipeline_mysample.py` con una clase `MySamplePipeline`:<pre>...<br /># Pipeline definition imports<br />from pipelines.pipeline_demo import DemoPipeline<br />from pipelines.pipeline_hotsite import HotsitePipeline<br />from pipelines.pipeline_mysample import MySamplePipeline<br /><br />### Add your pipeline configuration here<br />service_map: Dict[str, ServicePipeline]  = {<br />    # folder-name -> pipeline-class<br />    'demo': DemoPipeline(),<br />    'hotsite': HotsitePipeline(),<br />    'mysample': MySamplePipeline()<br />}</pre> | Desarrollador | 

### Despliega la pila MonoRepoStack
<a name="deploy-the-monorepostack-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Despliegue la AWS CloudFormation pila. | Ejecute el `make deploy-core` comando para implementar la AWS CloudFormation `MonoRepoStack` pila con los valores de los parámetros predeterminados en el directorio raíz del repositorio clonado.<br />Puede cambiar el nombre del repositorio si ejecuta el comando `make deploy-core monorepo-name=<repo_name>`.Puede implementar ambas canalizaciones simultáneamente mediante el comando `make deploy monorepo-name=<repo_name>`. | Desarrollador | 
| Valide el CodeCommit repositorio. | Valide si sus recursos se crearon mediante la ejecución del comando `aws codecommit get-repository --repository-name <repo_name>`. Como la CloudFormation pila crea el CodeCommit repositorio en el que se almacena el monorepo, no ejecute el `cdk destroy MonoRepoStack ` comando si ha empezado a introducir modificaciones en él. | Desarrollador | 
| Valide los resultados de la CloudFormation pila. | Valide que la CloudFormation `MonoRepoStack` pila se haya creado y configurado correctamente ejecutando el siguiente comando:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --query 'StackSummaries[?StackName == 'MonoRepoStack']'</pre> | Desarrollador | 

### Implemente la PipelinesStack pila
<a name="deploy-the-pipelinesstack-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Despliegue la CloudFormation pila. | La AWS CloudFormation `PipelinesStack` pila debe desplegarse después de `MonoRepoStack` desplegarla. La pila aumenta de tamaño cuando se añaden nuevos microservicios al código base del monorepo y se vuelve a implementar cuando se incorpora un nuevo microservicio.<br />Implemente la PipelinesStack pila ejecutando el `make deploy-pipelines` comando.También puede ejecutar el comando `make deploy monorepo-name=<repo_name>` para implementar simultáneamente ambas canalizaciones.<br />El siguiente ejemplo de resultado muestra cómo la `PipelinesStacks` implementación imprime URLs los microservicios al final de la implementación:<pre>Outputs:<br />PipelinesStack.demourl = .cloudfront.net<br />PipelinesStack.hotsiteurl = .cloudfront.net</pre> | Desarrollador | 
| Valide los resultados de la AWS CloudFormation pila. | Valide que la AWS CloudFormation `PipelinesStacks` pila se haya creado y configurado correctamente ejecutando el siguiente comando:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --query 'StackSummaries[?StackName == 'PipelinesStack']'</pre> | Desarrollador | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimina tus AWS CloudFormation pilas. | Ejecute el comando `make destroy`. | Desarrollador | 
| Elimine los buckets de S3 para sus canalizaciones. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | Desarrollador | 

## Resolución de problemas
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| He encontrado AWS CDK problemas. | Consulte [Solución de AWS CDK problemas comunes](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) en la documentación de AWS CDK. | 
| Inserté mi código de microservicio, pero la canalización de microservicios no funcionó. | **Validación de la configuración**<br />*Verifique la configuración de la rama:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />*Valide los archivos de configuración:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />**Solución de problemas en la consola**<br />*AWS CodePipeline comprueba:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />*AWS Lambda solución de problemas:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 
| Necesito volver a implementar todos mis microservicios.  | Existen dos métodos para volver a implementar todos los microservicios. Seleccione la opción que mejor se adapte a sus necesidades.<br />**Método 1: Eliminar un parámetro del almacén de parámetros**<br />Este método implica eliminar un parámetro específico del almacén de parámetros de Systems Manager que rastrea el último ID de confirmaciónq que se usó para la implementación. Al eliminar este parámetro, el sistema se ve obligado a volver a implementar todos los microservicios en el siguiente desencadenador, ya que lo percibe como un estado nuevo.<br />Pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Ventajas:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Desventajas:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />**Método 2: Insertar una confirmación en cada subcarpeta de monorepo**<br />Este método implica realizar un cambio menor e insertarlo en cada subcarpeta de microservicios del monorepo para iniciar sus canalizaciones individuales.<br />Pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Ventajas:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Desventajas:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 

## Recursos relacionados
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-resources"></a>
+ [Integración y entrega continuas (CI/CD) mediante CDK Pipelines](https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html) (documentación)AWS CDK 
+ [módulo aws-cdk/pipelines](https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html) (referencia de la API)AWS CDK 