Skip to content

Este proyecto tiene como objetivo crear una plataforma de desarrollo con AWS CDK (Cloud Development Kit) usando TypeScript, que automatiza la creación, despliegue y prueba de recursos de infraestructura y aplicaciones.

netfoor/cdk-TypeScript

Repository files navigation

Proyecto: Plataforma AWS CDK - Lambda, Testing y Pipelines

Descripción del Proyecto

Este proyecto tiene como objetivo crear una plataforma de desarrollo con AWS CDK (Cloud Development Kit) usando TypeScript, que automatiza la creación, despliegue y prueba de recursos de infraestructura y aplicaciones. Incluye:

  • Definición de Stacks y Constructs en CDK.
  • Desarrollo de funciones Lambda con infraestructura como código.
  • Testing de CDK Constructs usando Jest y CDK assertions.
  • Implementación de pipelines de CI/CD con AWS CodePipeline y CodeBuild.
  • Aplicación de Test-Driven Development (TDD) y buenas prácticas de infraestructura.

Recursos Adicionales

Para una explicación detallada y completa de este proyecto, incluyendo tutoriales paso a paso, diagramas y ejemplos de código adicionales, consulta nuestra documentación extendida:

📝 Documentación Completa: AWS CDK - Lambdas, Testing y Pipelines

Esta documentación incluye:

  • Guías paso a paso para la configuración inicial
  • Ejemplos de código comentados
  • Diagramas de arquitectura
  • Solución a problemas comunes

Tecnologías y Herramientas

  • AWS CDK (v2)
  • TypeScript
  • Node.js
  • Jest para pruebas
  • AWS Lambda
  • DynamoDB
  • S3 (repositorio de código y artefactos)
  • CodePipeline y CodeBuild para CI/CD
  • Git + git-remote-s3 (para simular repositorio remoto en S3)

Estructura del Proyecto

auth-service/
│
├─ bin/                    # Punto de entrada CDK
│   └─ auth-service.ts
│
├─ lambda/                 # Funciones Lambda
│   ├─ hello.js
│   └─ hitcounter.js
│
├─ lib/                    # Stacks y constructs
│   ├─ auth-service-stack.ts  # (LambdaClassExample)
│   ├─ hitcounter.ts
│   ├─ pipeline-stack.ts
│   └─ pipeline-stage.ts
│
├─ test/                   # Tests de CDK constructs
│   └─ hitcounter.test.ts
│
├─ package.json
├─ tsconfig.json
└─ cdk.json

Flujo de Desarrollo

1. Definición de Stacks y Constructs

  • Se crean stacks en CDK (Stack) y dentro de ellos recursos concretos (Constructs) como Lambdas, tablas DynamoDB o buckets S3.
  • Cada recurso se define usando el patrón: (scope, id, props) donde scope es generalmente this (el stack actual).
  • Se pueden crear constructs personalizados, como HitCounter, que reciben recursos como props (ej. una Lambda) y crean infraestructura dependiente.

Ejemplo Lambda en CDK (LambdaClassExample):

const hello = new Function(this, 'HelloHandler', {
  runtime: Runtime.NODEJS_22_X,
  code: Code.fromAsset('lambda'),
  handler: 'hello.handler',
});

2. Testing de Constructs

  • Se utilizan tests unitarios con Jest y cdk assertions para validar recursos de CDK.

  • Esto permite TDD (Test Driven Development): escribir primero los tests y luego implementar la infraestructura.

  • Tipos de tests:

    • Verificación de existencia de recursos (resourceCountIs)
    • Validación de propiedades (hasResourceProperties)
    • Validación de variables de entorno en Lambdas
    • Validación de entradas (input validation)

Ejemplo test de HitCounter:

const stack = new Stack();
new HitCounter(stack, 'MyTestConstruct', {
  downstream: new Function(stack, 'TestFunction', {
    runtime: Runtime.NODEJS_22_X,
    code: Code.fromAsset('lambda'),
    handler: 'hello.handler'
  })
});
const template = Template.fromStack(stack);
template.resourceCountIs('AWS::DynamoDB::Table', 1);
  • Los tests brindan confianza, facilitan refactorizaciones y sirven como documentación ejecutable.

3. Pipelines con CDK (CI/CD)

  • Se creó un pipeline con AWS CodePipeline V2, que automatiza:

    1. Build: instalación de dependencias, compilación TypeScript, cdk synth.
    2. Despliegue: stages con stacks de aplicación (WorkshopPipelineStage).
    3. Tests automáticos: validación de endpoints y visualizadores.

Variables de pipeline: permiten parametrizar builds y tests (ENVIRONMENT, VERSION).

Test Actions: se ejecutan después del deploy para asegurar que los recursos funcionen correctamente (curl a endpoints).

Comparación V1 vs V2:

Característica V1 V2
Creación Pipeline Manual con Pipeline + CodeBuildProject Declarativa con CodePipeline + CodeBuildStep
Variables No nativo Nativo (Variable.reference())
Stages Verbosos Simples con addStage()
Test Actions Manuales y complejos Integrados con addPost()

4. Flujo del pipeline

  1. Subir cambios a S3 repo usando git push s3-origin main.

  2. Pipeline detecta cambios:

    • Ejecuta Build (SynthStep)
    • Despliega Stack (Deploy stage)
    • Corre Test Actions (TestViewer y TestAPI)
  3. Salida: endpoints y URL de TableViewer disponibles como outputs.


5. Limpieza de recursos

  • cdk destroy WorkshopPipelineStack elimina:

    • Pipeline
    • Buckets S3 creados por el stack
    • Stacks desplegados en stages
  • Recursos externos no gestionados por CDK deben eliminarse manualmente (ej. S3 fuera del scope CDK).


6. Buenas prácticas aprendidas

  • Definir stacks modulares (Lambda, S3, Pipeline separados) para mantener el proyecto escalable.
  • Usar TDD para crear infraestructura confiable.
  • Configurar tests automáticos para endpoints y recursos críticos.
  • Evitar hardcodear valores de entorno: usar variables de pipeline.
  • Documentar todos los stacks y constructs, usando CfnOutput para referencias fáciles.

7. Resumen conceptual

  • CDK: Infraestructura como código con TypeScript.
  • Constructs: bloques reutilizables de infraestructura.
  • Stacks: contenedores de constructs.
  • Tests: verifican creación y configuración de recursos antes de producción.
  • Pipeline: automatiza build, deploy y test.
  • TDD: escribir tests primero para guiar el desarrollo.

Resultado final

  • Una plataforma de despliegue automatizada, testeable y parametrizable en AWS, con infraestructura y aplicaciones gestionadas 100% mediante CDK.
  • Referencia futura para crear nuevos proyectos CI/CD y aplicar buenas prácticas de desarrollo e infraestructura.

Recursos adicionales:

https://catalog.us-east-1.prod.workshops.aws/workshops/10141411-0192-4021-afa8-2436f3c66bd8/en-US/2000-typescript-workshop

About

Este proyecto tiene como objetivo crear una plataforma de desarrollo con AWS CDK (Cloud Development Kit) usando TypeScript, que automatiza la creación, despliegue y prueba de recursos de infraestructura y aplicaciones.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published