Construyendo un sofisticado CodePipeline con CDK en una configuración de Monorepo

Rate this content
Bookmark

Muchas empresas están adoptando completamente AWS y, por lo tanto, están adoptando su conjunto completo de herramientas de código para sus procesos de CI/CD. Sin embargo, aunque CodePipeline es la plataforma para este proceso, puede que no sea la más fácil de usar. En una configuración de Monorepo, es típico crear múltiples pipelines de CI/CD para cada paquete. Sin embargo, hay varias precauciones que debes tener en cuenta. Por ejemplo, es posible que te encuentres con escenarios en los que se activan múltiples pipelines incluso si solo modificaste un archivo, o puedes cuestionar la necesidad de crear múltiples ramas para cada pipeline. En esta charla, proporcionamos consejos valiosos para construir un sofisticado CodePipeline utilizando CDK en un entorno de Monorepo. Las técnicas discutidas en esta charla también son aplicables a otras herramientas de CI/CD.

This talk has been presented at DevOps.js Conf 2024, check out the latest edition of this JavaScript Conference.

FAQ

AWS CDK (Cloud Development Kit) es una herramienta que permite definir la infraestructura cloud utilizando lenguajes de programación conocidos como TypeScript. Es útil para ingenieros de DevOps porque facilita la creación de infraestructuras como código, permitiendo una mejor abstracción y comprensión por parte de los desarrolladores.

Para crear una canalización de CI/CD con AWS CDK, se comienza definiendo una canalización en TypeScript dentro del monorepo. Esta canalización incluye varias etapas y acciones, como la acción de origen de CodeCommit y la acción de fragmento de código para la construcción. Cada acción produce un artefacto que puede ser utilizado en etapas subsiguientes, como la implementación.

En una canalización de AWS CDK, las 'etapas' son diferentes puntos en el proceso de CI/CD, como compilación, prueba o implementación. Las 'acciones' son tareas específicas que se ejecutan dentro de cada etapa, como la obtención de código desde CodeCommit, ejecución de pruebas, o despliegues utilizando CDK deploy.

Para manejar la implementación en diferentes cuentas de AWS, se pueden crear bucles en el código de AWS CDK que generen una nueva instancia de la canalización por cada cuenta, asegurando el despliegue en cada una a través del comando 'CDK deploy' bajo los roles asumidos adecuados.

EventBridge captura eventos específicos, como cambios en el repositorio de código, y los envía a una función Lambda. Esta función evalúa los cambios y determina qué canalización de CI/CD debe activarse, permitiendo una gestión eficiente de múltiples canalizaciones para diferentes stacks como frontend y backend.

La aprobación manual en las etapas de producción permite un control más riguroso antes de realizar despliegues finales, asegurando que todo esté en orden. Como alternativa, se puede configurar para que se omita en entornos de desarrollo, acelerando el ciclo de CI/CD donde los riesgos son menores.

John Nguyen
John Nguyen
8 min
15 Feb, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Imagina comenzar como ingeniero de DevOps de AWS en una pequeña empresa. Tu jefe quiere un enfoque completo de AWS, con CI/CD completamente en AWS para implementaciones automatizadas. Utiliza AWS CDK para crear un pipeline, etapas y acciones. Aprende cómo manejar múltiples pipelines para diferentes cuentas y cómo aprobar manualmente los entornos de puesta en escena y producción. Descubre cómo activar pipelines con EventBridge y Lambda, y crear pipelines sofisticados para diferentes escenarios.

1. Introduction to AWS CDK and Pipeline Creation

Short description:

Imagina comenzar como ingeniero de DevOps de AWS en una pequeña empresa. Tu jefe quiere un enfoque completo de AWS, con CICD completamente en AWS para implementaciones automatizadas. Utiliza AWS CDK para crear una canalización, etapas y acciones. Importa el código desde CodeCommit, crea etapas con la acción de origen de CodeCommit y la acción de fragmento de código. A continuación, implementa en diferentes cuentas de AWS.

Hola. Imagina que comenzaste como ingeniero de DevOps de AWS en una pequeña empresa y tu jefe quiere que vayamos por completo con AWS. Por supuesto, el CICD debe estar completamente en AWS para implementaciones automatizadas. Toda la infraestructura debe estar en código. Y estamos utilizando un monorepo que contiene un backend y frontend, ambos en TypeScript.

Genial. Has estado trabajando con GitLab CI o GitHub Actions donde solo necesitas definir el archivo YAML y crea en la plataforma la canalización por ti. En AWS, es un poco diferente. Cada recurso debes crearlo tú mismo. Por lo tanto, decidiste utilizar AWS CDK porque puedes usar TypeScript. Puedes utilizar las mismas herramientas que los desarrolladores. Puedes poner el código dentro de su monorepo. Y también tienes una buena abstracción, que también puede entender el desarrollador.

Pongamos manos a la obra. Comienzas creando una canalización utilizando esta nueva abstracción de canalización. Y cada canalización de código contiene etapas. Y una etapa contiene acciones. Las acciones generan resultados y producen un artefacto. Este artefacto se puede almacenar en un bucket de S3. Por lo tanto, importas el código desde CodeCommit donde se encuentra alojado el monorepo. Y puedes usarlo para crear tu primera etapa utilizando el comando 'add stage'. Y aquí creas la acción de origen de CodeCommit. Por lo tanto, esto se activará cada vez que ocurra algo en la rama principal. Y creas una segunda etapa utilizando la acción de fragmento de código. Y allí utilizas un proyecto de fragmento de código. Puedes definir cada fase del proyecto de fragmento de código. En este caso, utilizo la fase de construcción, donde quiero instalar el linting y las pruebas unitarias. Y el resultado de esta acción se puede almacenar en esta carpeta en este caso. Y ahora las siguientes etapas son las etapas de implementación. Por lo tanto, deseas implementar en diferentes cuentas de AWS.

2. Handling Multiple Pipelines and Manual Approval

Short description:

Crear múltiples canalizaciones para diferentes cuentas utilizando la abstracción de CDK. Utilizar un método personalizado para la creación de canalizaciones, asumiendo roles e implementando con CDK. Manejar la aprobación manual para los entornos de puesta en escena y producción. Crear canalizaciones separadas para las implementaciones de front-end y back-end. Utilizar variables de entorno para activar la canalización adecuada.

Por lo tanto, creas el bucle de todas las cuentas. Y también puedes hacer uso de la abstracción de CDK. Por lo tanto, puedes crear tu propio método, en este caso, el proyecto de creación de canalización. Entonces, en lugar de usar este código, nuevamente, puedes hacerlo más fácil abstrayéndolo y colocándolo en tu propio método, y luego simplemente hacer uso de cada fase. Primero, asumes el rol y luego utilizas el comando CDK deploy. Y después de eso, después de la implementación, puedes ejecutar pruebas de integración. También puedes utilizar operaciones de mantenimiento. Como puedes ver en los entornos de puesta en escena y producción, tenemos la aprobación manual. Y esta acción de aprobación manual, puedes combinarla con la acción corporativa. Por lo tanto, solo si no está en def, de lo contrario, simplemente omitimos la acción de aprobación manual. Pero cada vez que haya un cambio en el front-end, también se implementará el back-end. Entonces, ¿cómo lo manejas? Para eso, necesitas crear múltiples canalizaciones. Ahora tienes una canalización para el front-end, y otra canalización para el back-end. Este podría ser el código, cómo se ve. Por lo tanto, puedes encontrar múltiples canalizaciones, y puedes manejarlo utilizando variables de entorno.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Elevando Monorepos con los Espacios de Trabajo de npm
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Elevando Monorepos con los Espacios de Trabajo de npm
Top Content
NPM workspaces help manage multiple nested packages within a single top-level package, improving since the release of NPM CLI 7.0. You can easily add dependencies to workspaces and handle duplications. Running scripts and orchestration in a monorepo is made easier with NPM workspaces. The npm pkg command is useful for setting and retrieving keys and values from package.json files. NPM workspaces offer benefits compared to Lerna and future plans include better workspace linking and adding missing features.
Poner fin al dolor: Repensando CI para Monorepos Grandes
DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Poner fin al dolor: Repensando CI para Monorepos Grandes
Today's Talk discusses rethinking CI in monorepos, with a focus on leveraging the implicit graph of project dependencies to optimize build times and manage complexity. The use of NX Replay and NX Agents is highlighted as a way to enhance CI efficiency by caching previous computations and distributing tasks across multiple machines. Fine-grained distribution and flakiness detection are discussed as methods to improve distribution efficiency and ensure a clean setup. Enabling distribution with NX Agents simplifies the setup process, and NX Cloud offers dynamic scaling and cost reduction. Overall, the Talk explores strategies to improve the scalability and efficiency of CI pipelines in monorepos.
AWS Lambda bajo el capó
Node Congress 2023Node Congress 2023
22 min
AWS Lambda bajo el capó
Top Content
In this Talk, key characteristics of AWS Lambda functions are covered, including service architecture, composition, and optimization of Node.js code. The two operational models of Lambda, asynchronous and synchronous invocation, are explained, highlighting the scalability and availability of the service. The features of Lambda functions, such as retries and event source mapping, are discussed, along with the micro VM lifecycle and the three stages of a Lambda function. Code optimization techniques, including reducing bundle size and using caching options, are explained, and tools like webpack and Lambda Power Tuning are recommended for optimization. Overall, Lambda is a powerful service for handling scalability and traffic spikes while enabling developers to focus on business logic.
Microfrontends Federados a Gran Escala
React Summit 2023React Summit 2023
31 min
Microfrontends Federados a Gran Escala
Top Content
This Talk discusses the transition from a PHP monolith to a federated micro-frontend setup at Personio. They implemented orchestration and federation using Next.js as a module host and router. The use of federated modules and the integration library allowed for a single runtime while building and deploying independently. The Talk also highlights the importance of early adopters and the challenges of building an internal open source system.
Optimización del rendimiento de AWS Lambda
Node Congress 2024Node Congress 2024
25 min
Optimización del rendimiento de AWS Lambda
This Talk covers various optimization techniques for Lambda functions, including parameter fetching, code minification and bundling, observability with Power Tools and X-Ray, baseline testing with load testing tools, caching with Elastic Cache and Redis, and optimizing code size and memory usage. The importance of library choices, power tuning for cost and performance, leveraging subprocesses and sandboxes, and adjusting concurrency limits are also discussed. Overall, these techniques can significantly improve Lambda function performance.
Escala tu aplicación de React sin micro-frontends
React Summit 2022React Summit 2022
21 min
Escala tu aplicación de React sin micro-frontends
This Talk discusses scaling a React app without micro-frontend and the challenges of a growing codebase. Annex is introduced as a tool for smart rebuilds and computation caching. The importance of libraries in organizing code and promoting clean architecture is emphasized. The use of caching, NxCloud, and incremental build for optimization is explored. Updating dependencies and utilizing profiling tools are suggested for further performance improvements. Splitting the app into libraries and the benefits of a build system like NX are highlighted.

Workshops on related topic

React a Escala con Nx
React Summit 2023React Summit 2023
145 min
React a Escala con Nx
Top Content
Featured WorkshopFree
Isaac Mann
Isaac Mann
Vamos a utilizar Nx y algunos de sus plugins para acelerar el desarrollo de esta aplicación.
Algunas de las cosas que aprenderás:- Generar un espacio de trabajo Nx prístino- Generar aplicaciones frontend React y APIs backend dentro de tu espacio de trabajo, con proxies preconfigurados- Crear librerías compartidas para reutilizar código- Generar nuevos componentes enrutados con todas las rutas preconfiguradas por Nx y listas para usar- Cómo organizar el código en un monorepositorio- Mover fácilmente las librerías alrededor de tu estructura de carpetas- Crear historias de Storybook y pruebas e2e de Cypress para tus componentes
Tabla de contenidos: - Lab 1 - Generar un espacio de trabajo vacío- Lab 2 - Generar una aplicación React- Lab 3 - Ejecutores- Lab 3.1 - Migraciones- Lab 4 - Generar una librería de componentes- Lab 5 - Generar una librería de utilidades- Lab 6 - Generar una librería de rutas- Lab 7 - Añadir una API de Express- Lab 8 - Mostrar un juego completo en el componente de detalle de juego enrutado- Lab 9 - Generar una librería de tipos que la API y el frontend pueden compartir- Lab 10 - Generar historias de Storybook para el componente de interfaz de usuario compartido- Lab 11 - Prueba E2E del componente compartido
Monorepos de Node con Nx
Node Congress 2023Node Congress 2023
160 min
Monorepos de Node con Nx
Top Content
WorkshopFree
Isaac Mann
Isaac Mann
Varias apis y varios equipos en el mismo repositorio pueden causar muchos dolores de cabeza, pero Nx te tiene cubierto. Aprende a compartir código, mantener archivos de configuración y coordinar cambios en un monorepo que puede escalar tanto como tu organización. Nx te permite dar estructura a un repositorio con cientos de colaboradores y elimina las desaceleraciones de CI que normalmente ocurren a medida que crece la base de código.
Índice de contenidos:- Laboratorio 1 - Generar un espacio de trabajo vacío- Laboratorio 2 - Generar una api de node- Laboratorio 3 - Ejecutores- Laboratorio 4 - Migraciones- Laboratorio 5 - Generar una biblioteca de autenticación- Laboratorio 6 - Generar una biblioteca de base de datos- Laboratorio 7 - Añadir un cli de node- Laboratorio 8 - Limites de módulo- Laboratorio 9 - Plugins y Generadores - Introducción- Laboratorio 10 - Plugins y Generadores - Modificación de archivos- Laboratorio 11 - Configuración de CI- Laboratorio 12 - Caché distribuida
Construyendo Aplicaciones Serverless en AWS con TypeScript
Node Congress 2021Node Congress 2021
245 min
Construyendo Aplicaciones Serverless en AWS con TypeScript
Workshop
Slobodan Stojanović
Slobodan Stojanović
Este masterclass te enseña los conceptos básicos del desarrollo de aplicaciones serverless con TypeScript. Comenzaremos con una función Lambda simple, configuraremos el proyecto y la infraestructura como código (AWS CDK) y aprenderemos cómo organizar, probar y depurar una aplicación serverless más compleja.
Tabla de contenidos:        - Cómo configurar un proyecto serverless con TypeScript y CDK        - Cómo escribir una función Lambda testeable con arquitectura hexagonal        - Cómo conectar una función a una tabla DynamoDB        - Cómo crear una API serverless        - Cómo depurar y probar una función serverless        - Cómo organizar y hacer crecer una aplicación serverless


Materiales mencionados en el masterclass:
https://excalidraw.com/#room=57b84e0df9bdb7ea5675,HYgVepLIpfxrK4EQNclQ9w
Blog de DynamoDB de Alex DeBrie: https://www.dynamodbguide.com/
Excelente libro para DynamoDB: https://www.dynamodbbook.com/
https://slobodan.me/workshops/nodecongress/prerequisites.html
Masterclass de Frontend en la Nube Hecho Fácil - Un Taller de ReactJS + AWS
DevOps.js Conf 2024DevOps.js Conf 2024
59 min
Masterclass de Frontend en la Nube Hecho Fácil - Un Taller de ReactJS + AWS
Workshop
Eyal Keren
Eyal Keren
Este taller te permite aprender cómo desarrollar aplicaciones React y luego desplegarlas en la nube (o construirlas en la consola) junto con un backend completamente abstracto, sin una configuración de backend compleja, simplificando la construcción y el despliegue de aplicaciones frontend y web en la nube.