Introducción a AWS Cloud Development Kit

October 10th, 2024

AWS Cloud Development Kit (CDK) es un marco de desarrollo de software de código abierto proporcionado por Amazon Web Services (AWS). Permite a los desarrolladores definir recursos de infraestructura como máquinas virtuales, bases de datos y componentes de red utilizando lenguajes de programación conocidos.

Los desarrolladores pueden escribir código para provisionar y administrar su infraestructura de AWS de una manera que les resulte más natural, utilizando la potencia de los lenguajes de programación y la comodidad de los IDE modernos.

La infraestructura como código (IaC) es un principio fundamental de CDK, que utiliza un modelo declarativo donde se definen recurso de infraestructura, configuraciones y dependencias mediante código, tratando la infraestructura como artefactos de código.

Componentes principales de AWS CDK

  • Constructs: son los bloques fundamentales de construcción en AWS CDK. Representan los recursos de AWS y se utilizan para definir la infraestructura como código. Son similares a las clases o componentes en la programación orientada a objetos y encapsulan la lógica y las propiedades de un recurso de AWS específico, como una instancia de EC2, una tabla de DynamoDB o una cola de SQS.

  • Stages: representan diferentes etapas del ciclo de vida de una aplicación, como desarrollo, prueba y producción. Se utilizan para organizar y desplegar diferentes versiones de la aplicación en entornos separados, lo que facilita la gestión de los cambios y los despliegues controlados en los diferentes entornos.

  • Stacks: es una unidad lógica de despliegue en AWS CDK. Representa un conjunto coherente de recursos de AWS que se implementan juntos como una unidad. Una stack puede contener uno o más constructs y se puede pensar en ella como una pila de recursos que se despliegan y gestionan en conjunto

  • Construct Libraries: son bibliotecas predefinidas o personalizadas que contienen constructs reutilizables, listos para usar, que se pueden importar y utilizar en diferentes aplicaciones por medio de la reutilización de código. Ayudan a acelerar el desarrollo de IaC.

  • CDK CLI: es una interfaz de línea de comandos que se utiliza para interactuar con AWS CDK. Permite a los desarrolladores crear, construir, desplegar y gestionar aplicaciones y stacks. También proporciona comandos para sintetizar y desplegar la infraestructura definida en una cuenta de AWS.

Estos son los componentes principales que permiten a los desarrolladores definir y desplegar infraestructura en AWS utilizando lenguajes de programación familiares, en lugar de escribir manualmente plantillas de AWS CloudFormation (servicio de AWS que provisiona y administra recursos mediante plantillas JSON o YAML) o scripts de automatización.

Soporte de CDK como Infraestructura como Código

  • Definición declarativa: la infraestructura se define utilizando código de manera declarativa, utilizando lenguajes de programación que permiten especificar qué recursos de infraestructura desean, sus configuraciones y cómo deben conectarse. Este enfoque declarativo garantiza la coherencia al representar la infraestructura como código que se puede controlar, revisar y compartir entre los miembros del equipo

  • Control de versiones y colaboración: se puede controlar por versiones utilizando sistemas de control de versiones populares como Git, lo que permite a los equipos realizar un seguimiento de los cambios, administrar versiones y colaborar eficazmente en el código. El control de versiones mejora la trazabilidad, permite la reversión y promueve prácticas de desarrollo colaborativo entre los miembros del equipo.

  • Despliegues repetibles y consistentes: el código se ejecuta para provisionar y administrar recursos a través de AWS CloudFormation, utilizando el código CDK como entrada para generar plantillas, que capturan la configuración de la infraestructura. Estas plantillas se pueden implementar de forma repetida y consistente en diferentes entornos, lo que garantiza que la infraestructura se provisione y administre igualmente de forma consistente.

  • Operaciones idempotentes: tanto CDK como AWS CloudFormation admiten operaciones idempotentes, lo que significa que la infraestructura se puede implementar varias veces sin causar conflictos o cambios no deseados. Esto hace que las despliegues sean seguros, predecibles y repetibles. Si ya existe un recurso de infraestructura, CDK y CloudFormation realizan actualizaciones o modificaciones basadas en los cambios en el código, en lugar de volver a crear el recurso desde cero.

  • Gestión de cambios y auditoría: los cambios de código pasan por los mismos procesos de gestión de cambios que otros artefactos de software. El código se puede revisar, probar y aprobar antes de desplegarse, promoviendo prácticas adecuadas de gestión de cambios. Además, los cambios de infraestructura realizados a través de CDK se capturan en eventos de stack de CloudFormation y registros de AWS CloudTrail, lo que proporciona una auditoría y visibilidad del historial de modificaciones realizadas.

  • Integración con pipelines de CI/CD: los desarrolladorespueden automatizar la compilación, las pruebasy laimplementación del código de infraestructura CDK comoparte de sus flujos de trabajo de CI/CD. Estaintegración permite la adopción de prácticas de infraestructuracomo códigodentro de los procesos más amplios de DevOps,obteniendo despliegues másrápidos, automatizados y fiables.

Comandos AWS CDK

AWS CDK Toolkit se considera la herramienta principal para interactuar con una aplicación de AWS CDK. Adicionalmente proporciona otras características para crear y trabajar con proyectos.

Debemos recordar que los comandos deben ejecutarse en el directorio del proyecto de CDK, donde se encuentra el archivo de entrada principal (app.ts, app.py, …) que define la aplicación de CDK.

Desplegar la stack de pruebas:

El comando cdk bootstrap inicializa o prepara el entorno de AWS para implementar aplicaciones con CDK.

Al ejecutar el comando se realizan las siguientes tareas:

  1. Crea un bucket de S3 utilizado por CDK para almacenar activos y artefactos de implementación.

  2. Crea una stack de CloudFormation que incluye un rol de IAM necesario y los recursos relacionados para habilitar los despliegues de CDK.

  3. Configura AWS CLI con las credenciales necesarias para comunicarse con los servicios de AWS.

Este sería un ejemplo de cómo usar el comando, en el que tendríamos que reemplazar <ID_DE_CUENTA_AWS> por nuestro ID de cuenta de AWS y <REGIÓN_AWS> por el código de región de AWS deseado, como eu-west-1 para Irlanda (Europa).

$cdk bootstrap aws://<ID_DE_CUENTA_AWS>/<REGIÓN_AWS>

Al ejecutar el comando, se solicitará confirmar la creación de los recursos y se proporcionará información sobre las acciones que se están realizando. Es requisito tener los permisos adecuados para crear los recursos requeridos en la cuenta de AWS.

Es importante tener en cuenta que el comportamiento y las opciones específicas del comando pueden variar según la versión de AWS CDK que estés utilizando. Siempre es recomendable consultar la documentación oficial o verificar la ayuda del comando para obtener información detallada específica de la versión instalada.

Inicializar un proyecto de CDK:

$cdk init --language <lenguaje>

Reemplazaremos <lenguaje> con el lenguaje de programación que deseamos utilizar, como Typescript, Python, Java o C#. Este comando creará la estructura inicial del proyecto de CDK.

Antes de ejecutarlo hay que asegurarse de tener el AWS CDK CLI instalado y configurado correctamente en el entorno de desarrollo. Además, debemos tener una cuenta de AWS y haber configurado las credenciales de AWS en el entorno para poder implementar y administrar recursos en la nube de AWS.

Construir una aplicación de CDK:

$cdk synth

El comando cdk synth es utilizado para sintetizar una aplicación en una plantilla AWS CloudFormation, definiendo la infraestructura como código utilizando un lenguaje de programación. Al ejecutar el comando, AWS CDK compila el código, resuelve las dependencias, evalúa las construcciones y genera la salida de la aplicación en forma de una plantilla AWS CloudFormation. Esta plantilla representa la infraestructura que será creada en AWS cuando implementes tu aplicación de CDK.

Es importante destacar que antes de ejecutar cdk synth, debemos asegurarnos de haber ejecutado cdk bootstrap en la cuenta de AWS donde deseamos implementar la aplicación. Esto prepara la cuenta para trabajar con la herramienta y garantiza que los recursos necesarios estén disponibles.

Una vez que hayas ejecutado cdk synth, podremos revisar la plantilla AWS CloudFormation generada para verificar que se ajuste a nuestras expectativas antes de implementarla en AWS mediante el comando cdk synth.

Desplegar una aplicación de CDK en una cuenta de AWS:

$cdk deploy

Este comando despliega la aplicación de CDK a partir de la plantilla de CloudFormation generada anteriormente. También compila el código, evalúa las construcciones, verifica los cambios y crear o actualiza los recursos correspondientes en la cuenta de AWS. Esto puede incluir la creación de instancias EC2, grupos de Auto Scaling, instancias de RDS, tablas de DynamoDB, roles de IAM, etc.

El comando cdk deploy también desplegará cualquier cambio realizado en el código desde el ultimo despliegue. Esto permite actualizar y mantener tu infraestructura de manera controlada y repetible.

Es importante tener en cuenta que cdk deploy puede solicitar confirmación antes de realizar los cambios, ya que el despliegue puede tener un impacto en los recursos de AWS existentes. Podremos utilizar la opción --require-approval con valores como never, any-change, o all para controlar el nivel de confirmación necesario durante el despliegue.

Destruir una aplicación de CDK:

$cdk destroy

Cuando ejecutamos cdk destroy, se identifican los recursos que fueron creados a través de la aplicación y se eliminan de la cuenta de AWS, aunque no afecta a otros recursos que no estén definidos en el código. Si contamos con recursos adicionales en la cuenta que no fueron creados por la aplicación, no se eliminarán automáticamente.

Antes de ejecutarlo se solicitará una confirmación con el fin de asegurarnos de que realmente deseamos eliminar los recursos. Podemos hacer uso de la opción --force para evitar que se solicite confirmación durante el proceso de destrucción.

Es importante destacar que se trata de una operación destructiva y debe usarse con precaución, asegurándonos de comprender completamente el impacto que tendrá en la infraestructura.

Ventajas en el uso de AWS CDK

  • Permite escribir código utilizando lenguajes de programación populares con los que están ya familiarizados como TypeScript, JavaScript, Python, C# y Java, aprovechando sus habilidades y conocimientos, reduciendo la curva de aprendizaje en comparación con el uso de lenguajes específicos.

  • Los desarrolladores pueden aprovechar los potentes entornos de desarrollo integrado (IDE) para generar código, resaltar la sintaxis, refactorizar y depurar. Los IDE proporcionan una experiencia de codificación más productiva al ofrecer sugerencias útiles, detectar errores y permitir una navegación eficiente a través de la base de código.

  • Se pueden crear librerías reutilizables y constructs, que son abstracciones de nivel superior que representan recursos o grupos de recursos de AWS, lo que permite a los desarrolladores encapsular patrones y configuraciones comunes. Al reutilizarlas, es posible reducir significativamente la cantidad de código que se necesita escribir, lo que propicia ciclos de desarrollo más rápidos y una mayor productividad.

  • Proporciona abstracción de nivel superior que simplifica el proceso de definición de la infraestructura de AWS. Estas abstracciones eliminan el código repetitivo y hacen que el desarrollo de infraestructura sea más rápido y menos propenso a errores.

  • Incorpora las prácticas recomendadas y las directrices de AWS en sus construcciones y bibliotecas. Esto ayuda a los desarrolladores a seguir los patrones recomendados de seguridad, escalabilidad y rendimiento sin tener que investigarlos e implementarlos desde cero. Al aprovechar estas mejores prácticas, podemos ahorrar tiempo y garantizar que la infraestructura se adhiera a los estándares de la industria.

  • Tiene una comunidad activa y creciente de desarrolladores que contribuyen al ecosistema creando y compartiendo sus propias construcciones, librerías y ejemplos. Estas contribuciones de la comunidad mejoran aún más la reutilización al proporcionar una amplia gama de recursos e ideas que se pueden aprovechar en varios proyectos.

  • Proporciona compatibilidad con un conjunto completo de servicios de AWS, pudiéndose definir recursos de infraestructura para una variedad de servicios, incluidos computación, almacenamiento, bases de datos, redes, seguridad y más. Esta flexibilidad permite a los desarrolladores crear configuraciones de infraestructura complejas y diversas aprovechando toda la gama de servicios de AWS disponibles.

  • Admite el despliegue de infraestructura en diferentes entornos (desarrollo, stage y producción), pudiendo definir configuraciones específicas del entorno y adaptar el proceso de implementación en función del entorno de destino. Su flexibilidad permite administrar la infraestructura en diferentes cuentas, regiones y estrategias de despliegue (canary deployment / blue-green deployment).

Conclusiones

AWS CDK proporciona flexibilidad en lenguajes de programación, soporte de servicios de AWS, construcciones personalizadas, integración con la infraestructura existente, administración de entornos, despliegues y extensibilidad, todo ellos por medio del uso de plantillas de AWS CloudFormation basadas en el código escrito por los desarrolladores. Simplifica el proceso de creación de dichas plantillas al proporcionar una abstracción de nivel superior mediante lenguajes de programación.

Podemos considerarlo una herramienta eficaz para los desarrolladores que desean provisionar y administrar su infraestructura de AWS mediante lenguajes de programación con los que está familiarizado, lo que proporciona una mayor productividad, reutilización y coherencia en el desarrollo de la infraestructura.

Si tienes dudas y quieres profundizar en alguno de estos aspectos o si tu empresa desea dar un salto de calidad en el gobierno de arquitecturas de sistemas cloud, ponte en contacto con nosotros.

Contacta con nosotros y te ayudaremos