Introducción a AWS CDK: Infraestructura como Código de forma Sencilla
Deivy Hernandez
Posted on April 8, 2024
El kit de desarrollo en la nube (CDK) es una herramienta de código abierto que permite a los desarrolladores definir y gestionar su infraestructura de nube mediante código. El enfoque de la infraestructura como código permite un despliegue más rápido, reduce los errores humanos y permite el control de versiones. CDK es compatible con varios lenguajes de programación y fomenta coherencia mediante la creación de componentes reutilizables, en caso de ser necesario.
Mencionemos algunas ventajas
El kit de desarrollo de la nube (CDK) es una herramienta importante de la nube de AWS por varias razones:
- Infraestructura como código: Permite a los desarrolladores definir y aprovisionar su infraestructura de nube utilizando código, lo que acelera el proceso de despliegue y reduce la probabilidad de error humano.
- Lenguajes de programación: Es compatible con lenguajes de programación como JavaScript, TypeScript, Python, Java y C#. Esto lo hace accesible a una amplia gama de desarrolladores.
- Código abierto: Fomenta la contribución y colaboración de la comunidad, lo que conduce a la mejora continua e innovación.
- Control de versiones: Como cualquier otro código de software, el código de la infraestructura puede versionarse, revisarse y compartirse. Esto fomenta la colaboración entre equipos y garantiza que los cambios se rastreen y gestionen de forma eficaz.
- Componentes reutilizables: la creación de componentes reutilizables en CDK permite que sean compartidos a través de diferentes proyectos y mejora la coherencia entre los mismos.
Ejemplo del flujo al crear recursos con CDK
¿Cómo podemos instalar CDK?
Es necesario tener una version de node (recomiendo hacer uso de nvm para manejar versiones de node). Para instalar la librería debes ejecutar el siguiente comando:
npm i -g aws-cdk
Luego iniciaremos un proyecto con lo siguiente:
mkdir my-cdk-project
cd my-cdk-project
cdk init sample-app --language=typescript
Esto creará un proyecto con la siguiente estructura usando typescript:
Al abrir el archivo lib/cdk-examples-stack.ts
podrás ver la siguiente clase creada:
import { Duration, Stack, StackProps } from 'aws-cdk-lib';
import * as sns from 'aws-cdk-lib/aws-sns';
import * as subs from 'aws-cdk-lib/aws-sns-subscriptions';
import * as sqs from 'aws-cdk-lib/aws-sqs';
import { Construct } from 'constructs';
export class CdkExamplesStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const queue = new sqs.Queue(this, 'CdkExamplesQueue', {
visibilityTimeout: Duration.seconds(300)
});
const topic = new sns.Topic(this, 'CdkExamplesTopic');
topic.addSubscription(new subs.SqsSubscription(queue));
}
}
Se puede observar que la clase está creando dos recursos, un SQS y un SNS, donde a este último se agrega como suscripción al SQS.
Ahora necesitamos saber dónde se realiza la instancia de la clase anterior, para esto, debemos dirigirnos al archivo bin/cdk-examples.ts
y podrás observar lo siguiente:
#!/usr/bin/env node
import * as cdk from 'aws-cdk-lib';
import { CdkExamplesStack } from '../lib/cdk-examples-stack';
const app = new cdk.App();
new CdkExamplesStack(app, 'CdkExamplesStack');
Para realizar un despliegue es necesario que tengas configurado en tu computador un perfil de AWS, puedes ver más información acá.
Los comandos que frecuentemente usarás son:
cdk deploy #Despliega tus stack en la cuenta del perfil de AWS
cdk synth #Sintetiza una plantilla de AWS CloudFormation para su aplicación
cdk diff #Compara tu aplicación con la pila desplegada
Error común
- En caso de haber ejecutado el comando
cdk deploy
es muy probable que te hayas encontrado con un error, esto se debe a que es necesario enlazar el entorno de la aplicación a nuestra cuenta de AWS ejecutando el comandocdk bootstrap
, en una nueva publicación estaremos complementando esta información.
Enlaces de referencia
Posted on April 8, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.