Introducción a AWS CDK: Infraestructura como Código de forma Sencilla
Tags: aws, awsspanish, cdk, typescript
Published: 2024-04-08 01:06:33

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:

1. **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.
2. **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.
3. **Código abierto**: Fomenta la contribución y colaboración de la comunidad, lo que conduce a la mejora continua e innovación.
4. **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.
5. **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

![basic-diagram-cdk](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/431vlynxsmpo96b65x3j.png)

## ¿Cómo podemos instalar CDK?

Es necesario tener una version de node (recomiendo hacer uso de [nvm](https://github.com/nvm-sh/nvm) para manejar versiones de node). Para instalar la librería debes ejecutar el siguiente comando:

```tsx
npm i -g aws-cdk
```

Luego iniciaremos un proyecto con lo siguiente:

```tsx
mkdir my-cdk-project
cd my-cdk-project
cdk init sample-app --language=typescript
```

Esto creará un proyecto con la siguiente estructura usando typescript:

![cdk-structure](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ofbu3s7j5aggkhalci78.png)

Al abrir el archivo `lib/cdk-examples-stack.ts` podrás ver la siguiente clase creada:

```tsx
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:

```tsx
#!/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á](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-format-profile). 

Los comandos que frecuentemente usarás son:

```tsx
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 comando `cdk bootstrap` , en una nueva publicación estaremos complementando esta información.

## Enlaces de referencia

- [Configurar perfil AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-format-profile)
- [CDK](https://github.com/aws/aws-cdk)
- [NVM](https://github.com/nvm-sh/nvm)