Cómo crear infraestructura con CDK
¿Quieres saber cómo funciona CDK y cómo desplegarlo desde cero? Te explicaré cómo hacerlo.
TLDR
Explicaré los conceptos básicos de CDK en la práctica: cómo funciona CDK y cómo desplegar un proyecto CDK desde cero.
Además, compartiré el código fuente de mi proyecto CDK utilizado para crear la infraestructura de mi blog.
Introducción
Esta sección contiene:
- Qué es CDK
- Cómo funciona CDK
- Requisitos previos
Qué es CDK
CDK es un framework de desarrollo de software de código abierto para definir los recursos de tu aplicación en la nube usando lenguajes de programación familiares (TypeScript, JavaScript, Python, Java, C#/.Net y Go).
AWS CDK aprovisiona tus recursos de manera segura y repetible a través de AWS CloudFormation.
Para mí, con experiencia como desarrollador, CloudFormation es complejo y CDK llena ese vacío porque me permite usar un lenguaje de programación para crear la infraestructura fácilmente, es maravilloso.
Cómo funciona CDK
Para interactuar con aplicaciones CDK necesitarás el AWS CDK Toolkit (herramienta de línea de comandos).
En resumen:
- Añadir código: Añade los recursos AWS deseados en el código de la
appcon tu lenguaje de programación preferido. - Transformar el código en una plantilla de CloudFormation: Ejecuta el comando
cdk synthdesde el AWS CDK Toolkit para generar laplantilla de CloudFormationdesde el código de laapp. - Desplegar la infraestructura: Ejecuta el comando
cdk deploydesde el AWS CDK Toolkit paracrear un nuevo stack en el servicio CloudFormation, que desplegará losrecursos AWSen la cuenta AWS configurada.
Comandos de AWS CDK que necesitas conocer:
| Comando: Función |
|---|
cdk init: Crea un nuevo proyecto CDK en el directorio actual desde una plantilla especificada |
cdk bootstrap: Despliega el stack del CDK Toolkit. Debe ejecutarse una vez por entorno (cuenta y región) para permitir que cdk cree los recursos que necesita para ejecutarse |
cdk synthesize / cdk synth: Sintetiza e imprime la plantilla de CloudFormation para el/los stack(s) especificado(s) |
cdk diff: Compara el stack local especificado con el stack desplegado |
cdk deploy: Despliega el/los stack(s) especificado(s) |
cdk destroy: Destruye el/los stack(s) especificado(s) |
Requisitos previos
- AWS CLI
- Node.js
- IDE para tu lenguaje de programación
- VSCode
- Otros
- AWS CDK Toolkit
npm install -g aws-cdkcdk version
cdk bootstrap- Debes ejecutarlo una vez por entorno (cuenta y región) para permitir que CDK cree los recursos que necesita para ejecutarse
Cómo crear infraestructura con CDK
Esta sección contiene:
- Cómo crear y desplegar una aplicación CDK básica
- Limpieza
- Hacer cambios a la aplicación CDK predeterminada y desplegarla
Cómo crear y desplegar una aplicación CDK básica
He elegido TypeScript como mi lenguaje de programación.
TypeScript es un lenguaje de programación fuertemente tipado que se basa en JavaScript, brindándote mejores herramientas a cualquier escala.
Las fuentes de typescript necesitan ser compiladas a JavaScript.
¿Cuál es la forma más rápida de crear un nuevo proyecto CDK y desplegarlo en tu cuenta AWS?
1
2
3
4
5
6
7
8
# Crear una carpeta vacía
mkdir cdk-basic-example && cd cdk-basic-example
# Crea un ejemplo de aplicación CDK con algunos constructos
cdk init sample-app --language typescript
# Desplegar y generar los recursos en tu cuenta AWS
cdk deploy --require-approval never
Y eso es todo, hemos desplegado un topic y una queue en nuestra cuenta AWS…
NOTA: ¿Qué pasa con la generación de la plantilla de CloudFormation en la fase
synth? Solo hemos ejecutado el comandodeploy…Cuando ejecutas
cdk deploydetrás de escena también…
Limpieza
Destruyamos el stack. Sé que esta sección tal vez debería estar al final, pero ¿dónde está la diversión en eso? Estamos jugando y necesitamos probar cosas diferentes.
Si intentas hacer algo diferente y por tu cuenta, ¡aprenderás más rápido!
1
2
# Eliminar el stack de CloudFormation (así eliminará todos los recursos relacionados)
cdk destroy --force
Tienes que saber cómo destruir un stack, así que recuerda hacerlo al final si estás jugando con cdk…
Hacer cambios a la aplicación CDK predeterminada y desplegarla
¿Quizás queremos verificar qué se va a desplegar antes de desplegarlo?
Tiene sentido para mí.
1
2
3
4
# Sintetiza la plantilla de CloudFormation para el/los stack(s) especificado(s)
# En la consola, la plantilla se imprimirá en formato yaml
# En la carpeta "cdk.out", la plantilla estará en formato json
cdk synth
¿Qué pasa si comparamos el código local con el stack desplegado en la cuenta AWS?
1
cdk diff
NOTA:
cdk diffnecesita conectarse a la cuenta AWS para verificar el stack de CloudFormation contra tus recursos locales.
Podemos ver todos los nuevos recursos que se crearán:
- [+] AWS::SQS::Queue
- [+] AWS::SQS::QueuePolicy
- [+] AWS::SNS::Subscription
- [+] AWS::SNS::Topic
Recuerda que hemos destruido el stack en el paso anterior, por lo que todos los recursos se detectan como nuevos.
Lo desplegamos de nuevo:
1
cdk deploy --require-approval never
Y ejecutamos el comando diff nuevamente para ver las diferencias entre el código local y el stack desplegado:
1
cdk diff
Ahora actualicemos el código CDK para generar algunas diferencias. Primero, tenemos que abrir el proyecto con nuestro IDE (también puedes hacerlo con un bloc de notas pero…)
Este archivo contiene los 2 recursos AWS de mi ejemplo, una queue (rojo) y un topic (amarillo). Podría añadir un nuevo servicio pero por simplicidad, eliminaré el topic (líneas 15 a 17) y ejecutaré el cdk diff nuevamente.
1
cdk diff
Podemos ver que hemos eliminado el topic en el código, y cuando ejecutamos el comando diff, CDK encuentra los cambios y nos los muestra.
¡Y eso es todo, sigue practicando y aprendiendo!
Recuerda destruir tu stack cuando termines de jugar
Bonus: Mi código CDK del blog
El código fuente está disponible aquí.
Si lo revisas y crees que puede mejorarse, por favor házmelo saber.
Próximos pasos
Lectura adicional:
- Más sobre CDK: Cómo añadir CI/CD a mi proyecto CDK
- SAM + CDK: ¿Interesado en cómo AWS SAM y AWS CDK pueden trabajar juntos? He explorado esto en otro artículo: Cómo crear aplicaciones serverless con CDK y SAM. Es un gran siguiente paso para aquellos que buscan expandir su conocimiento de arquitectura serverless.
- SAM: Cómo crear aplicaciones Serverless con SAM
- Terraform: Cómo crear aplicaciones Serverless con Terraform
Espero escuchar tus pensamientos y experiencias con AWS CDK. Siéntete libre de compartirlos en los comentarios a continuación. ¡Feliz codificación!










