Primeros Pasos con AWS CDK en macOS: Guía Completa de Instalación
La Infraestructura como Código (IaC) ha revolucionado la forma en que gestionamos recursos en la nube, y AWS Cloud Development Kit (CDK) lo lleva al siguiente nivel al permitirte definir infraestructura usando lenguajes de programación familiares. En esta guía, te mostraré cómo configurar AWS CDK en macOS, desde la instalación hasta el despliegue de tu primer stack.
¿Qué es AWS CDK?
AWS CDK es un framework de desarrollo de software de código abierto que te permite definir infraestructura en la nube usando lenguajes de programación como TypeScript, Python, Java y C#. A diferencia de las plantillas tradicionales de CloudFormation escritas en JSON o YAML, CDK te permite aprovechar todo el poder de los lenguajes de programación, incluyendo bucles, condicionales y patrones de diseño orientado a objetos.
¿Por Qué Elegir CDK?
- Seguridad de Tipos: Detecta errores en tiempo de compilación, no en tiempo de despliegue
- Soporte de IDE: Obtén autocompletado, documentación en línea y herramientas de refactorización
- Reutilización: Crea y comparte constructos como librerías
- Menos Código Repetitivo: Escribe menos código comparado con CloudFormation puro
- Abstracciones de Alto Nivel: Usa constructos predefinidos que siguen las mejores prácticas de AWS
Requisitos Previos
Antes de comenzar, asegúrate de tener:
- Una Mac con macOS (esta guía funciona tanto para Intel como Apple Silicon)
- Una cuenta activa de AWS
- Familiaridad básica con la terminal
- Aproximadamente 15 minutos de tu tiempo
Paso 1: Instalar Homebrew (Si Aún No Lo Tienes)
Homebrew es el gestor de paquetes para macOS que facilita la instalación de herramientas de desarrollo.
Abre la Terminal y ejecuta:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Después de la instalación, verifica que funciona:
brew --version
Paso 2: Instalar Node.js
AWS CDK requiere Node.js versión 14.15.0 o superior. Instalaremos la última versión LTS usando Homebrew.
brew install node
Verifica la instalación:
node --version
npm --version
Deberías ver los números de versión tanto de Node.js como de npm.
Consejo Pro: Si necesitas gestionar múltiples versiones de Node.js, considera usar nvm (Node Version Manager).
Paso 3: Instalar AWS CLI
La Interfaz de Línea de Comandos de AWS es esencial para gestionar tus credenciales y recursos de AWS.
brew install awscli
Verifica la instalación:
aws --version
Paso 4: Configurar Credenciales de AWS
Ahora necesitamos configurar tus credenciales de AWS. Necesitarás tu AWS Access Key ID y Secret Access Key. Si aún no las tienes, créalas en la Consola de IAM de AWS.
Ejecuta el comando de configuración:
aws configure
Se te pedirá que ingreses:
AWS Access Key ID [None]: TU_ACCESS_KEY_ID
AWS Secret Access Key [None]: TU_SECRET_ACCESS_KEY
Default region name [None]: us-east-1
Default output format [None]: json
Nota de Seguridad: Nunca subas tus credenciales de AWS al control de versiones. Considera usar AWS IAM Identity Center (anteriormente AWS SSO) para mayor seguridad en entornos de producción.
Paso 5: Instalar AWS CDK
¡Ahora viene lo principal! Instala el CLI de AWS CDK globalmente usando npm:
npm install -g aws-cdk
Verifica la instalación:
cdk --version
¡Felicidades! AWS CDK está ahora instalado en tu Mac. 🎉
Paso 6: Preparar tu Entorno de AWS (Bootstrap)
Antes de poder desplegar aplicaciones CDK, necesitas preparar tu entorno de AWS. Esto crea los recursos necesarios (como un bucket S3) que CDK usa para almacenar artefactos de despliegue.
cdk bootstrap aws://NUMERO-CUENTA/REGION
O simplemente:
cdk bootstrap
Esto usará tu cuenta y región predeterminadas de AWS de tu configuración de AWS CLI.
Solo necesitas hacer esto una vez por combinación de cuenta/región de AWS.
Paso 7: Crear tu Primer Proyecto CDK
Vamos a crear un proyecto CDK simple para verificar que todo funciona correctamente.
Crear un Directorio de Proyecto
mkdir mi-primera-app-cdk
cd mi-primera-app-cdk
Inicializar una Aplicación CDK
Usaremos TypeScript para este ejemplo:
cdk init app --language typescript
Esto crea una estructura de proyecto completa con:
-
lib/- Definiciones de tus stacks CDK -
bin/- Punto de entrada para tu aplicación CDK -
test/- Pruebas unitarias -
package.json- Dependencias de Node.js -
cdk.json- Configuración de CDK
Instalar Dependencias
npm install
Paso 8: Construir tu Primer Stack
Vamos a crear un bucket S3 simple para demostrar CDK en acción.
Abre lib/mi-primera-app-cdk-stack.ts y reemplaza su contenido con:
import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
import { Construct } from 'constructs';
export class MiPrimeraAppCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Crear un bucket S3 con versionado habilitado
const bucket = new s3.Bucket(this, 'MiPrimerBucket', {
versioned: true,
removalPolicy: cdk.RemovalPolicy.DESTROY,
autoDeleteObjects: true,
encryption: s3.BucketEncryption.S3_MANAGED,
});
// Mostrar el nombre del bucket
new cdk.CfnOutput(this, 'NombreBucket', {
value: bucket.bucketName,
description: 'El nombre del bucket S3',
});
}
}
¿Qué Está Pasando Aquí?
- Estamos importando las librerías necesarias de CDK
- Creando un bucket S3 con versionado habilitado
- Estableciendo una política de eliminación para destruir el bucket cuando se elimine el stack
- Habilitando la eliminación automática de objetos
- Agregando cifrado del lado del servidor
- Mostrando el nombre del bucket para fácil referencia
Paso 9: Sintetizar la Plantilla de CloudFormation
Antes de desplegar, veamos qué plantilla de CloudFormation genera CDK:
cdk synth
Este comando genera una plantilla de CloudFormation desde tu código CDK. Verás la salida en YAML en tu terminal.
Paso 10: Previsualizar Cambios
Antes de desplegar, es una buena práctica ver qué cambios se realizarán:
cdk diff
Paso 11: Desplegar tu Stack
Ahora el momento de la verdad—vamos a desplegar en AWS:
cdk deploy
CDK te mostrará los cambios y pedirá confirmación. Escribe y y presiona Enter.
Después de un minuto o dos, ¡tu stack estará desplegado! Verás el nombre del bucket en las salidas.
Verificar en la Consola de AWS
Dirígete a la Consola de S3 para ver tu bucket recién creado.
Hoja de Referencia de Comandos Esenciales de CDK
Aquí están los comandos que usarás con más frecuencia:
| Comando | Descripción |
|---|---|
cdk init |
Inicializar un nuevo proyecto CDK |
cdk synth |
Sintetizar plantilla de CloudFormation |
cdk diff |
Comparar stack desplegado con estado actual |
cdk deploy |
Desplegar stack en AWS |
cdk destroy |
Eliminar stack de AWS |
cdk list |
Listar todos los stacks en la aplicación |
cdk doctor |
Verificar posibles problemas |
cdk watch |
Observar cambios y desplegar automáticamente |
Paso 12: Limpiar
Para evitar incurrir en cargos, vamos a destruir el stack:
cdk destroy
Confirma escribiendo y cuando se te solicite.
Mejores Prácticas para el Desarrollo con CDK
Ahora que tienes CDK configurado, aquí hay algunas mejores prácticas a seguir:
1. Usa TypeScript para Seguridad de Tipos
TypeScript proporciona excelente soporte de IDE y detecta errores antes del despliegue:
// TypeScript detectará este error en tiempo de compilación
const bucket = new s3.Bucket(this, 'MiBucket', {
versioned: 'yes', // ❌ Error: El tipo 'string' no es asignable al tipo 'boolean'
});
2. Organiza tus Stacks
Para proyectos más grandes, separa las responsabilidades en múltiples stacks:
// networking-stack.ts
export class NetworkingStack extends cdk.Stack { }
// database-stack.ts
export class DatabaseStack extends cdk.Stack { }
// application-stack.ts
export class ApplicationStack extends cdk.Stack { }
3. Usa Variables de Entorno
Haz que tus stacks sean reutilizables entre entornos:
const app = new cdk.App();
new MyStack(app, 'DevStack', {
env: { account: '123456789', region: 'us-east-1' },
stage: 'dev',
});
new MyStack(app, 'ProdStack', {
env: { account: '987654321', region: 'us-west-2' },
stage: 'prod',
});
4. Aprovecha los Constructos
Usa constructos de alto nivel (L2 y L3) que encapsulan mejores prácticas:
// L1 (bajo nivel) - más verboso
new s3.CfnBucket(this, 'MiBucket', {
bucketName: 'mi-bucket',
versioningConfiguration: {
status: 'Enabled',
},
});
// L2 (alto nivel) - recomendado
new s3.Bucket(this, 'MiBucket', {
versioned: true,
});
5. Escribe Pruebas
CDK soporta pruebas unitarias desde el inicio:
import { Template } from 'aws-cdk-lib/assertions';
import * as MyStack from '../lib/my-stack';
test('Bucket S3 Creado', () => {
const app = new cdk.App();
const stack = new MyStack.MyStack(app, 'MyTestStack');
const template = Template.fromStack(stack);
template.hasResourceProperties('AWS::S3::Bucket', {
VersioningConfiguration: {
Status: 'Enabled',
},
});
});
Ejecuta las pruebas con:
npm test
6. Usa el Contexto de CDK
Almacena valores de configuración en cdk.json:
{
"context": {
"nombreApp": "mi-app",
"entorno": "produccion"
}
}
Accede en tu código:
const nombreApp = this.node.tryGetContext('nombreApp');
Solución de Problemas Comunes
Problema: "Command not found: cdk"
Solución: Asegúrate de que el directorio bin global de npm esté en tu PATH:
echo 'export PATH="$HOME/.npm-packages/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
Problema: "Need to perform AWS calls for account..."
Solución: Ejecuta cdk bootstrap para preparar tu entorno de AWS.
Problema: Errores de Permisos Denegados
Solución: Verifica que tus credenciales de AWS tengan los permisos necesarios. Para desarrollo, podrías necesitar AdministratorAccess, pero en producción, usa políticas IAM de mínimo privilegio.
Problema: Conflictos de Versión de Node
Solución: Usa nvm para gestionar versiones de Node.js:
brew install nvm
nvm install 18
nvm use 18
Próximos Pasos
¡Felicidades! Ahora tienes un entorno de desarrollo de AWS CDK completamente funcional en tu Mac. Aquí está lo que puedes explorar a continuación:
- Aprende Patrones de CDK: Visita el sitio web CDK Patterns para patrones de arquitectura comunes
- Explora Constructos de AWS: Navega por el Construct Hub para constructos predefinidos
- Toma el Workshop de CDK: Completa el CDK Workshop oficial
- Construye Proyectos Reales: Intenta crear una API serverless, un sitio web estático o un pipeline de datos
- Únete a la Comunidad: Participa en las discusiones de GitHub de AWS CDK
Recursos Útiles
- Documentación de AWS CDK
- Referencia de API de CDK
- Repositorio de Ejemplos de AWS CDK
- CDK Construct Hub
- GitHub de AWS CDK
Conclusión
AWS CDK transforma la gestión de infraestructura al llevar el poder de los lenguajes de programación a la infraestructura en la nube. Con CDK instalado en tu Mac, ahora estás equipado para definir, desplegar y gestionar recursos de AWS usando código con el que ya estás familiarizado.
El viaje desde CloudFormation tradicional a CDK puede parecer desalentador al principio, pero los beneficios—seguridad de tipos, soporte de IDE, reutilización y menos código repetitivo—hacen que valga la pena la inversión.
¿Qué construirás con CDK? ¡Comparte tus proyectos en los comentarios! 👇
¿Te resultó útil esta guía? Sígueme para más contenido sobre AWS y DevOps. ¿Tienes preguntas? ¡Déjalas en los comentarios!
Tags: #aws #cdk #devops #infraestructura #typescript #cloudformation #iac #tutorial #macos #principiantes
Top comments (0)