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.

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
Aprenda más sobre cómo aprovechar las características predeterminadas de los espacios de trabajo de npm para ayudarlo a administrar su proyecto monorepo, mientras también explora algunas de las nuevas características de npm cli.
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
Escalar bases de código grandes, especialmente monorepos, puede ser una pesadilla en los sistemas de Integración Continua (CI). El panorama actual de las herramientas de CI tiende a ser orientado a máquinas, de bajo nivel y exigente en términos de mantenimiento. Lo peor es que a menudo están desconectadas de las necesidades y el flujo de trabajo real del desarrollador.¿Por qué es un obstáculo el CI? Porque los sistemas de CI actuales son comodines, sin una comprensión específica de tu base de código. No pueden aprovechar el contexto en el que operan para ofrecer optimizaciones.En esta charla, exploraremos el futuro del CI, diseñado específicamente para bases de código grandes y monorepos. Imagina un sistema de CI que comprenda la estructura de tu espacio de trabajo, paralelice dinámicamente las tareas en máquinas utilizando datos históricos, y haga todo esto con una configuración mínima y de alto nivel. Repensemos el CI, haciéndolo más inteligente, eficiente y alineado con las necesidades del desarrollador.
AWS Lambda bajo el capó
Node Congress 2023Node Congress 2023
22 min
AWS Lambda bajo el capó
Top Content
En esta charla explico cómo funciona el servicio AWS Lambda, explicando la arquitectura, cómo escala y cómo un desarrollador debería pensar cuando diseñan su software utilizando funciones Lambda
Microfrontends Federados a Gran Escala
React Summit 2023React Summit 2023
31 min
Microfrontends Federados a Gran Escala
Top Content
La charla será una historia de cómo Personio pasó de renderizar a través de una arquitectura PHP monolítica, a una aplicación Next JS orientada a microfrontends, impulsada por la Federación de Módulos y la cadena de herramientas del monorepositorio NX.
Optimización del rendimiento de AWS Lambda
Node Congress 2024Node Congress 2024
25 min
Optimización del rendimiento de AWS Lambda
¿Alguna vez te has preguntado cómo obtener lo mejor de tus funciones Lambda?Si es así, esta charla revelará los entresijos de uno de los servicios sin servidor más populares y te brindará una guía paso a paso para optimizar tus funciones.En esta sesión, te guiaré a través de la mentalidad para reducir el tiempo de ejecución de tus funciones Lambda. En el ejemplo presentado, pude reducir el tiempo de ejecución en un 95% para el inicio en caliente y más del 50% en los inicios en frío, mejorando también las transacciones por segundo atendidas con esta API.
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
A medida que tu equipo crece y se convierte en múltiples equipos, el tamaño de tu base de código también crece. Llegas a las 100k líneas de código y el tiempo de compilación se acerca peligrosamente a los 10 minutos 😱 Pero eso no es todo, tus verificaciones estáticas de CI (linting, cobertura de tipos, código muerto) y pruebas también están tardando cada vez más...¿Cómo puedes mantener a tus equipos avanzando rápidamente y enviando funciones a los usuarios de manera regular si tus PRs tardan una eternidad en ser probados y desplegados?Después de explorar algunas opciones, decidimos seguir el camino de Nx. ¡Veamos cómo migrar una gran base de código a Nx y aprovechar sus compilaciones incrementales!

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.