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.
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
- 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)
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
- 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)dondescopees generalmentethis(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',
});-
Se utilizan tests unitarios con
Jestycdk assertionspara 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)
- Verificación de existencia de recursos (
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.
-
Se creó un pipeline con AWS CodePipeline V2, que automatiza:
- Build: instalación de dependencias, compilación TypeScript,
cdk synth. - Despliegue: stages con stacks de aplicación (
WorkshopPipelineStage). - Tests automáticos: validación de endpoints y visualizadores.
- Build: instalación de dependencias, compilación TypeScript,
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() |
-
Subir cambios a S3 repo usando
git push s3-origin main. -
Pipeline detecta cambios:
- Ejecuta Build (
SynthStep) - Despliega Stack (
Deploy stage) - Corre Test Actions (
TestVieweryTestAPI)
- Ejecuta Build (
-
Salida: endpoints y URL de TableViewer disponibles como outputs.
-
cdk destroy WorkshopPipelineStackelimina:- 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).
- 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.
- 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.
- 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: