Skip to content
English
On this page

Guía de Configuración de AWS CDK CLI

1. Requisitos Previos

1.1 Herramientas Necesarias

bash
# Node.js (v14.x o superior)
node --version

# AWS CLI configurado
aws configure list

# TypeScript (recomendado)
npm install -g typescript

1.2 Permisos AWS

  • Permisos IAM para CloudFormation
  • Acceso a servicios que se utilizarán
  • Credenciales AWS configuradas

2. Instalación

2.1 Instalación Global

bash
# Instalar CDK CLI globalmente
npm install -g aws-cdk

# Verificar instalación
cdk --version

2.2 Configuración del Proyecto

bash
# Crear nuevo proyecto CDK
cdk init app --language typescript

# Para otros lenguajes disponibles:
cdk init app --language python
cdk init app --language java
cdk init app --language csharp

2.3 Estructura del Proyecto (TypeScript)

my-cdk-app/
├── bin/
│   └── my-cdk-app.ts
├── lib/
│   └── my-cdk-app-stack.ts
├── test/
│   └── my-cdk-app.test.ts
├── cdk.json
├── package.json
└── tsconfig.json

3. Configuración Básica

3.1 Bootstrap

bash
# Bootstrap de CDK en tu cuenta/región
cdk bootstrap aws://ACCOUNT-NUMBER/REGION

# Bootstrap con perfil específico
cdk bootstrap --profile dev

3.2 Configuración del Proyecto

json
// cdk.json
{
  "app": "npx ts-node --prefer-ts-exts bin/my-cdk-app.ts",
  "context": {
    "@aws-cdk/core:enableStackNameDuplicates": "true",
    "aws-cdk:enableDiffNoFail": "true",
    "@aws-cdk/core:stackRelativeExports": "true"
  }
}

4. Desarrollo de Stack

4.1 Stack Básico (TypeScript)

typescript
// lib/my-cdk-app-stack.ts
import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';

export class MyCdkAppStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Crear bucket S3
    new s3.Bucket(this, 'MyBucket', {
      versioned: true,
      encryption: s3.BucketEncryption.S3_MANAGED,
      removalPolicy: cdk.RemovalPolicy.DESTROY
    });
  }
}

4.2 Definición de App

typescript
// bin/my-cdk-app.ts
import * as cdk from 'aws-cdk-lib';
import { MyCdkAppStack } from '../lib/my-cdk-app-stack';

const app = new cdk.App();
new MyCdkAppStack(app, 'MyCdkAppStack', {
  env: { 
    account: process.env.CDK_DEFAULT_ACCOUNT, 
    region: process.env.CDK_DEFAULT_REGION 
  }
});

5. Comandos Principales

5.1 Desarrollo

bash
# Sintetizar CloudFormation
cdk synth

# Listar stacks
cdk ls

# Diferencias entre local y deployed
cdk diff

# Desplegar stack
cdk deploy

# Destruir stack
cdk destroy

5.2 Testing y Validación

bash
# Ejecutar tests
npm run test

# Validar stack
cdk doctor

# Verificar seguridad
npm run security-check

6. Configuración Avanzada

6.1 Configuración de Entornos

typescript
// lib/environments.ts
export const environments = {
  dev: {
    account: '123456789012',
    region: 'us-east-1',
    stackName: 'dev-stack'
  },
  prod: {
    account: '987654321098',
    region: 'us-west-2',
    stackName: 'prod-stack'
  }
};

6.2 Configuración de Context

bash
# Agregar valores al contexto
cdk context --json '{"key":"value"}'

# Usar context en stack
cdk deploy -c environment=prod

7. Patrones y Mejores Prácticas

7.1 Organización de Código

typescript
// lib/constructs/database.ts
import * as cdk from 'aws-cdk-lib';
import * as rds from 'aws-cdk-lib/aws-rds';

export class Database extends cdk.Construct {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id);
    
    // Implementación de base de datos
  }
}

7.2 Aspectos

typescript
// lib/aspects/security.ts
import { IAspect, Annotations } from 'aws-cdk-lib';
import { IConstruct } from 'constructs';

export class SecurityAspect implements IAspect {
  public visit(node: IConstruct): void {
    // Implementar revisiones de seguridad
  }
}

8. Pipeline CI/CD

8.1 Pipeline Stack

typescript
import * as cdk from 'aws-cdk-lib';
import * as pipelines from 'aws-cdk-lib/pipelines';

export class CdkPipelineStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const pipeline = new pipelines.CodePipeline(this, 'Pipeline', {
      synth: new pipelines.ShellStep('Synth', {
        input: pipelines.CodePipelineSource.gitHub('owner/repo', 'main'),
        commands: [
          'npm ci',
          'npm run build',
          'npx cdk synth'
        ]
      })
    });
  }
}

9. Troubleshooting

9.1 Problemas Comunes

  1. Errores de Bootstrap
bash
# Re-ejecutar bootstrap
cdk bootstrap --force

# Verificar credenciales
aws sts get-caller-identity
  1. Errores de Despliegue
bash
# Desplegar con debug
cdk deploy --debug

# Revisar eventos de CloudFormation
aws cloudformation describe-stack-events

9.2 Logging y Debugging

bash
# Habilitar debugging
export CDK_DEBUG=true

# Logging verbose
cdk deploy --verbose

10. Comandos Útiles Adicionales

bash
# Exportar template
cdk synth --output=templates

# Watch mode para desarrollo
cdk watch

# Listar dependencias de stack
cdk metadata

# Actualizar dependencias
npm update @aws-cdk/core

11. Tips de Seguridad

  1. IAM y Permisos
typescript
// Usar roles mínimos necesarios
const role = new iam.Role(this, 'MyRole', {
  assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
  managedPolicies: [
    iam.ManagedPolicy.fromAwsManagedPolicyName(
      'service-role/AWSLambdaBasicExecutionRole'
    )
  ]
});
  1. Encriptación
typescript
// Siempre usar encriptación
const bucket = new s3.Bucket(this, 'MyBucket', {
  encryption: s3.BucketEncryption.KMS_MANAGED,
  enforceSSL: true
});

Esta guía proporciona una base sólida para comenzar con AWS CDK. Recuerda mantener actualizadas las dependencias y seguir las mejores prácticas de seguridad de AWS.