avatar Artículo

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:

  1. Añadir código: Añade los recursos AWS deseados en el código de la app con tu lenguaje de programación preferido.
  2. Transformar el código en una plantilla de CloudFormation: Ejecuta el comando cdk synth desde el AWS CDK Toolkit para generar la plantilla de CloudFormation desde el código de la app.
  3. Desplegar la infraestructura: Ejecuta el comando cdk deploy desde el AWS CDK Toolkit para crear un nuevo stack en el servicio CloudFormation, que desplegará los recursos AWS en la cuenta AWS configurada.

how-cdk-works

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-cdk
    • cdk 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 comando deploy

Cuando ejecutas cdk deploy detrás de escena también…

  • se ejecuta cdk synth para generar la plantilla de CloudFormation (por lo que podrías querer evitar ejecutar cdk synth antes de cdk deploy)
  • y nuestro código de assets y la plantilla de CloudFormation se despliegan en el bucket S3 aprovisionado cuando se ejecutó cdk bootstrap cdk-deploy-in-progress cdk-deploy

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

cdk-destroy

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

cdk-synth-console

cdk-synth-code

¿Qué pasa si comparamos el código local con el stack desplegado en la cuenta AWS?

1
cdk diff

NOTA: cdk diff necesita conectarse a la cuenta AWS para verificar el stack de CloudFormation contra tus recursos locales.

cdk-diff

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

cdk-diff-no-changes

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…)

cdk-code

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.

cdk-code-2

1
cdk diff

cdk-diff-delete-topic

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:

Espero escuchar tus pensamientos y experiencias con AWS CDK. Siéntete libre de compartirlos en los comentarios a continuación. ¡Feliz codificación!

Este artículo está licenciado bajo CC BY 4.0 por el autor.