Guía para desplegar nuestra primera aplicación de CDK

Daniel Rojas
Bancolombia Tech
Published in
6 min readMar 13, 2022

1. Pre Requisitos

Para iniciar, es necesario que tengas instalado lo siguiente en tu maquina:
• Node.js (npm o yarn)
• AWS CLI

Aunque el tutorial se puede ejecutar sin tener una cuenta de AWS, si quieres ejecutar despliegues es necesario que crees una.

2. Instalar CLI de CDK

La instalación del CLI de CDK se realiza a través de npm o yarn. Para este caso se mostrará cómo se instala con npm. (Nota: puede que necesite algún permiso de administrador).

npm install -g aws-cdk

Comando de instalación del CLI CDK.

3. Generar aplicación de CDK

Para crear nuestra primera aplicación de CDK, crearemos primero la carpeta donde se almacenará el proyecto y posteriormente ejecutaremos el comando init en el CLI de CDK que instalamos recientemente.

mkdir <<folder-name>>
cdk init app --language typescript

Comandos para crear app de CDK con el asistente del CLI

4. Realizar el Bootstrap (Opcional)

Este paso es totalmente opcional debido a que requiere de una cuenta de AWS, sin embargo, si la tienes y quieres desplegar desde la app de CDK necesitaremos ejecutar esta parte. El Bootstrap, en pocas palabras, aprovisiona a nuestra cuenta de AWS con el toolkit de CDK para poder realizar despliegues.

Este toolkit incluye un rol de despliegue para usar CloudFormation, un bucket de S3 para guardar assets, un repo de ECR y las respectivas políticas de cada recurso.

(Nota: este Bootstrap es totalmente personalizable, ya sea desde el CLI de CDK o creándolo a mano).

Antes de ejecutar el Bootstrap deberemos configurar el AWS CLI con las credenciales necesarias para poder hacer uso del servicio de CloudFormation en nuestra cuenta.

Para un nivel de principiante, tenemos dos opciones, las cuales vamos a explicar en qué casos nos serviría una u otra.

npx cdk bootstrap Bootstrap tradicional

Este Bootstrap ejecutará el Bootstrap legacy de CDK que es útil en casi todos los casos, excepto si queremos trabajar con assets o CDK pipelines. Por otro lado, tenemos la opción más actual y que personalmente recomiendo.

npx cdk bootstrap --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess Bootstrap newStyleStackSynthesis

Cuando proveemos un rol al Bootstrap, el CLI identificará la versión de Bootstrap que necesitamos y desplegará la nueva, dicha versión funciona para trabajar assets y CDK pipelines. Es muy importante recalcar que es posible actualizar la versión de tu Bootstrap, ya sea con un update directo al stack de CloudFormation o ejecutando el mismo comando de CLI con opciones diferentes.

Además de esto, si este CDK Toolkit (nombre del stack) se ve corrompido o se desea eliminar, es tan sencillo como eliminar el stack. Lo anterior no va a afectar ninguna aplicación que se haya desplegado con CDK. Sin embargo, se perderán los assets recopilados por el toolkit.

5. Jugando con la aplicación

Habiendo creado nuestra aplicación, procederemos a explorarla y editar lo necesario para generar una app que despliegue un bucket de S3, a continuación, las partes principales de una app de CDK (en TypeScript):

Archivo cdk.json

En este archivo se configura todo el comportamiento de la CDK APP, para ser específicos, aquí se proveen variables de contexto, feature flags de CDK e incluso se le dice a la app dónde va a ejecutar la aplicación como tal:

Archivo package.json

El package.json es donde vamos a declarar todos los módulos que necesitamos para nuestra aplicación (incluidos los de cdk), funciona exactamente como en cualquier otro proyecto de JavaScript o TypeScript.

Nota: Los paquetes de cdk en este archivo son aws-cdk-lib donde se encuentran todos los constructs que contiene todas las referencias nativas de la clase Construct.

Archivo Stack.ts

Es el área de trabajo de la aplicación, aquí es donde definimos los constructs que queremos desplegar posteriormente con la app.

Aquí se puede apreciar que ya hemos definido un bucket de S3 con un output de nombre usando el concepto de construct explicado anteriormente, tanto al bucket como al output se inicializaron con su respectivo scope, id y props. (Tómate la libertad de experimentar y leer las opciones que te provee cada construct).

A continuación dejo el fragmento de código para que lo edites en tu proyecto…

const myBucket = new aws_s3.Bucket(this, ‘MyBucket’, {
bucketName: ‘mynewbucketfromcdk’,
versioned: true,
enforceSSL: true
})
new CfnOutput(this, ‘bucketOutput’, {
value: myBucket.bucketName,
description: ‘Nombre del bucket’
})

Ejemplo de construct de S3 y un ouptput con nombre del bucket

Archivo app.ts

En este archivo que se encuentra en el directorio bin, es posible definir la aplicación de CDK y por consiguiente los stacks que serán desplegados para la aplicación.

Nota: Es posible tener más de un stack en una aplicación de CDK, según esto, por cada nuevo stack creado, es necesario importarlo e instanciarlo en este documento.

6. Síntesis

Habiendo construido y explorado nuestro ejemplo es hora de hacer magia. Para esto requerimos usar el terminal y el CLI de CDK, en este paso generaremos un template de CloudFormation a partir de nuestro código.

Una vez estemos en la terminal, ejecutaremos el comando cdk synth, a continuación, la aplicación nos va a generar e imprimir el template en el terminal a través de stdout.

Esto es importante aclararlo debido a que, si queremos ver logs en la app por efectos de depuración, tenemos que hacerlos a través de stderr usando console.warn() o console.error(). Sin embargo, si nosotros queremos este template en algún archivo, siempre podemos utilizar el siguiente comando:

cdk synth > <<nombre-del-archivo>>

y nuestro template será guardado en el archivo especificado.

Hecho lo anterior, hemos terminado el demo para quienes no quieran iniciar el despliegue.

7. Despliegue (Opcional)

Con el fin de desplegar y, como yo le diría, “completar el truco de magia”; requerimos una cuenta de AWS. Con esto, obtendremos credenciales para configurarlas en el CLI de AWS, ejecutaremos el bootstrap (si aún no lo has hecho) y por último lanzaremos el siguiente comando para CDK: cdk deploy.

Habiendo ejecutado el deploy se nos mostrará el progreso de despliegue de nuestra aplicación en la terminal, y a su vez en tu consola de AWS CloudFormation:

Despliegue en progreso en terminal

Una vez terminado el despliegue, el resultado es retornado en el terminal también.

Despliegue terminado en terminal
Despliegue terminado en Consola de AWS

Con esto, ¡¡¡hemos completado el proceso de despliegue de nuestra primera CDK APP!!!

8. Limpiar (Opcional)

Si queremos limpiar nuestro entorno de AWS de esta aplicación que acabamos de desplegar, lo único que debemos hacer es ejecutar el comando cdk destroy y, al igual que en el deploy, el terminal nos mostrará el progreso de la eliminación de los recursos de la app, además de mostrarlos en la consola de AWS CloudFormation:

Eliminación en progreso en terminal
Eliminación terminada en terminal
Eliminación terminada en Consola de AWS

Con lo anterior, ya hemos limpiado cualquier recurso desplegado en nuestra cuenta de AWS. Adicionalmente, si se requiere eliminar los recursos del bootstrap, es posible eliminando el stack de CDK Toolkit desde la consola de AWS.

Ahora sabes como usar una CDK app, nos vemos pronto en otra publicación, mientras tanto, sigue explorando!!!

--

--