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
Helton Ribeiro, Petrus Batalha y Ricardo Morais, Amazon Web Services
Resumen
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
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) y realice los cambios necesarios en sus funciones de IAM y. Servicios de AWS
Requisitos previos y limitaciones
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 AWS CLI documentación.
Python 3 y
pipinstalados en su equipo local. Para obtener más información, consulte la documentación de Python. AWS CDK instalado y configurado Para obtener más información, consulte Introducción a AWS CDK la AWS CDK documentación.
Un AWS Cloud9 IDE, instalado y configurado. Para obtener más información, consulte Configuración AWS Cloud9 en la AWS Cloud9 documentación.
El repositorio de activadores multicanalización de GitHub AWS CodeCommit monorepo
, 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 en el AWS sitio web de orientación prescriptiva.
Arquitectura
El siguiente diagrama muestra cómo usar el AWS CDK para definir una infraestructura con dos AWS CloudFormation pilas: y. MonoRepoStack PipelinesStack

En el diagrama, se muestra el siguiente flujo de trabajo:
El proceso de arranque utiliza el AWS CDK para crear las AWS CloudFormation pilas y.
MonoRepoStackPipelinesStackLa
MonoRepoStackpila crea el CodeCommit repositorio para la aplicación y la funciónmonorepo-event-handlerLambda que se inicia después de cada confirmación.La
PipelinesStackpila crea las canalizaciones CodePipeline iniciadas por la función Lambda. Cada microservicio debe tener una canalización de infraestructura definida.La canalización para
microservice-nla inicia la función Lambda e inicia sus CI/CD etapas aisladas que se basan en el código fuente de. CodeCommitLa canalización para
microservice-1la 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.

Un usuario cambia el código de uno de los microservicios de la aplicación.
El usuario envía los cambios de un repositorio local a un CodeCommit repositorio.
La actividad de envío inicia la función Lambda que recibe todos los envíos al repositorio. CodeCommit
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}/LastCommitSi 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.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)
AWS Cloud Development Kit (AWS CDK)es un marco de desarrollo de software para definir la infraestructura de nube en código y aprovisionarla mediante ella. CloudFormation
Python
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
Prácticas recomendadas
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 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 de la AWS CDK documentación.
Al definir las canalizaciones de microservicios, revise las prácticas recomendadas de seguridad 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
. Esta herramienta utiliza un conjunto de reglas, agrupadas por paquetes, para evaluar el código. Estos son los paquetes disponibles:
Epics
| 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:
| 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:
| Desarrollador |
| 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 | Desarrollador |
Edite el archivo | Añada el nombre del directorio del código de la aplicación y el nombre de la canalización al archivo | Desarrollador |
Cree la canalización. | En el directorio Puede copiar uno de los archivos y modificarlo según los requisitos de su aplicación. | Desarrollador |
Edite el archivo | En Por ejemplo, en el siguiente código, se muestra una definición de canalización en el directorio
| Desarrollador |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Despliegue la AWS CloudFormation pila. | Ejecute el Puede cambiar el nombre del repositorio si ejecuta el comando notaPuede implementar ambas canalizaciones simultáneamente mediante el comando | Desarrollador |
Valide el CodeCommit repositorio. | Valide si sus recursos se crearon mediante la ejecución del comando importanteComo la CloudFormation pila crea el CodeCommit repositorio en el que se almacena el monorepo, no ejecute el | Desarrollador |
Valide los resultados de la CloudFormation pila. | Valide que la CloudFormation
| Desarrollador |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Despliegue la CloudFormation pila. | La AWS CloudFormation Implemente la PipelinesStack pila ejecutando el notaTambién puede ejecutar el comando El siguiente ejemplo de resultado muestra cómo la
| Desarrollador |
Valide los resultados de la AWS CloudFormation pila. | Valide que la AWS CloudFormation
| Desarrollador |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Elimina tus AWS CloudFormation pilas. | Ejecute el comando | Desarrollador |
Elimine los buckets de S3 para sus canalizaciones. |
| Desarrollador |
Resolución de problemas
| Problema | Solución |
|---|---|
He encontrado AWS CDK problemas. | Consulte Solución de AWS CDK problemas comunes 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 Verifique la configuración de la rama:
Valide los archivos de configuración:
Solución de problemas en la consola AWS CodePipeline comprueba:
AWS Lambda solución de problemas:
|
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. Método 1: Eliminar un parámetro del almacén de parámetros 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. Pasos:
Ventajas:
Desventajas:
Método 2: Insertar una confirmación en cada subcarpeta de monorepo Este método implica realizar un cambio menor e insertarlo en cada subcarpeta de microservicios del monorepo para iniciar sus canalizaciones individuales. Pasos:
Ventajas:
Desventajas:
|
Recursos relacionados
Integración y entrega continuas (CI/CD) mediante CDK Pipelines (documentación)AWS CDK
módulo aws-cdk/pipelines (referencia de la API)AWS CDK