Colección de 13 módulos Terraform publicados en el Terraform Registry para desplegar arquitecturas serverless en AWS, con 12 ejemplos que cubren desde ECS básico hasta CRUD full-stack con DynamoDB y AgentCore con MCP.
Una colección de 13 módulos Terraform reutilizables para desplegar arquitecturas serverless en AWS. Publicados en el Terraform Registry y disponibles como open source en GitHub.
El proyecto incluye 12 ejemplos completos — cada uno con su propio deploy.sh, documentación de arquitectura y código Terraform listo para ejecutar. Los módulos siguen las mejores prácticas del AWS Well-Architected Framework: seguridad, confiabilidad, excelencia operacional, rendimiento y optimización de costos.
Los 13 módulos cubren la infraestructura necesaria para aplicaciones serverless y basadas en contenedores:
| Módulo | Descripción | Características clave |
|---|---|---|
| vpc | VPC Multi-AZ | NAT gateways, VPC endpoints, flow logs |
| ecr | Container registry | Encriptación, lifecycle policies, image scanning |
| ecs | Fargate service | Auto-scaling, Container Insights, Spot |
| lambda | Lambda functions | Container images, DLQ, retry policies, alarmas |
| alb | Application Load Balancer | Access logs, HTTPS, health checks |
| sqs | SQS colas de mensajes | FIFO, DLQ, encriptación, long polling |
| sns | SNS pub/sub | Email, SQS, Lambda suscripciones, filtrado |
| dynamodb | DynamoDB NoSQL | Encriptación, PITR, auto-scaling |
| api-gateway | HTTP API (v2) | Throttling, logging, X-Ray |
| api-gateway-v1 | REST API (v1) | OpenAPI/Swagger, VPC Link |
| cloudfront-s3 | CDN + hosting estático | SPA routing, OAC, dominios custom |
| waf | Web Application Firewall | Rate limiting, IP filtering, managed rules |
| cloudwatch-alarms | Monitoreo | CPU, memoria, response time, error rates |
Los 12 ejemplos están organizados como una ruta de aprendizaje progresiva:
| Ejemplo | Patrón | Componentes | Enlace |
|---|---|---|---|
| ecs-app | ALB → ECS | VPC, ALB, ECS, ECR | código |
| lambda-function | Lambda Function URL | Lambda, ECR, CloudWatch, SNS, SQS | código |
| Ejemplo | Patrón | Componentes | Enlace |
|---|---|---|---|
| rest-api-service | REST API + VPC Link | API Gateway v1, NLB, ALB, ECS | código |
| openapi-rest-api | REST API + Swagger | API Gateway v1, OpenAPI 3.0 → Swagger 2.0, ECS | código |
| openapi-http-api | HTTP API + OpenAPI | API Gateway v2, OpenAPI 3.0, ECS | código |
| Ejemplo | Patrón | Componentes | Enlace |
|---|---|---|---|
| crud-api-rest | REST API + DynamoDB + React | API Gateway v1, ECS, DynamoDB, CloudFront, WAF | código |
| crud-api-http | HTTP API + DynamoDB + React | API Gateway v2, ECS, DynamoDB, CloudFront | código |
| Ejemplo | Patrón | Componentes | Enlace |
|---|---|---|---|
| sqs-queue | Lambda + SQS + DLQ | SQS FIFO, Dead Letter Queue, Lambda | código |
| sns-fanout | SNS → múltiples SQS | SNS Topic, filtrado por atributos, múltiples colas | código |
| Ejemplo | Patrón | Componentes | Enlace |
|---|---|---|---|
| api-gateway-multi-service | Multi-servicio | API Gateway, VPC Link, FastAPI + Node MCP | código |
| mcp-agent-runtime | MCP Server + AgentCore | ECS, ALB, Bedrock AgentCore Gateway | código |
| agentcore-full | AgentCore completo | ECS, Lambda, SQS, SNS, OpenSearch, Bedrock Agent | código |
El ejemplo más básico — una aplicación FastAPI detrás de un ALB en ECS Fargate:
module "vpc" {
source = "jonmatum/serverless-modules/aws//modules/vpc"
name = "my-app-vpc"
cidr = "10.0.0.0/16"
azs = ["us-east-1a", "us-east-1b"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
enable_nat_gateway = true
single_nat_gateway = true
}
module "alb" {
source = "jonmatum/serverless-modules/aws//modules/alb"
name = "my-app-alb"
vpc_id = module.vpc.vpc_id
subnet_ids = module.vpc.public_subnet_ids
target_port = 8000
health_check_path = "/health"
}
module "ecr" {
source = "jonmatum/serverless-modules/aws//modules/ecr"
repository_name = "my-app"
scan_on_push = true
}
module "ecs" {
source = "jonmatum/serverless-modules/aws//modules/ecs"
cluster_name = "my-app-cluster"
service_name = "my-app-service"
container_name = "my-app"
container_image = "${module.ecr.repository_url}:latest"
container_port = 8000
subnet_ids = module.vpc.private_subnet_ids
target_group_arn = module.alb.target_group_arn
enable_autoscaling = true
enable_container_insights = true
}Aplicación full-stack con React, FastAPI, DynamoDB y API Gateway HTTP API:
module "dynamodb" {
source = "jonmatum/serverless-modules/aws//modules/dynamodb"
table_name = "my-app-items"
hash_key = "id"
billing_mode = "PAY_PER_REQUEST"
enable_point_in_time_recovery = true
enable_encryption = true
}
module "api_gateway" {
source = "jonmatum/serverless-modules/aws//modules/api-gateway"
name = "my-app-api"
vpc_link_subnet_ids = module.vpc.private_subnet_ids
vpc_link_security_group_ids = [aws_security_group.vpc_link.id]
integrations = {
proxy = {
method = "ANY"
route_key = "ANY /{proxy+}"
connection_type = "VPC_LINK"
uri = module.alb.listener_arn
}
}
enable_access_logs = true
enable_xray_tracing = true
}
module "cloudfront" {
source = "jonmatum/serverless-modules/aws//modules/cloudfront-s3"
name = "my-app-web"
enable_logging = true
}Una decisión clave al usar API Gateway — los módulos soportan ambas versiones:
| Característica | HTTP API (v2) | REST API (v1) |
|---|---|---|
| Costo | $1.00/millón de requests | $3.50/millón de requests |
| Integración VPC | Directa a ALB | Requiere NLB intermedio |
| Latencia | Menor | Mayor (hop adicional) |
| OpenAPI | Sí | Sí |
| CORS | Built-in | Configuración manual |
| API Keys / Usage Plans | No | Sí |
| Validación de requests | Limitada | Completa |
Recomendación: usar HTTP API (v2) a menos que se necesiten API keys o usage plans. Es 71% más barato y tiene menor latencia.
Cada módulo implementa las mejores prácticas del AWS Well-Architected Framework. El documento completo detalla cada decisión.
| Pilar | Implementación |
|---|---|
| Seguridad | Encriptación at rest/transit, IAM least-privilege, VPC endpoints, WAF |
| Confiabilidad | Multi-AZ, auto-scaling, health checks, DLQ, alarmas |
| Excelencia operacional | Container Insights, access logs, CloudWatch, pre-commit hooks |
| Rendimiento | Fargate compute, VPC endpoints, CloudFront CDN |
| Optimización de costos | Fargate Spot, lifecycle policies, VPC endpoints, single NAT para dev |
# Producción: Multi-AZ, On-Demand, auto-scaling
module "vpc" {
source = "jonmatum/serverless-modules/aws//modules/vpc"
single_nat_gateway = false # Multi-AZ NAT
enable_vpc_endpoints = true
}
module "ecs" {
source = "jonmatum/serverless-modules/aws//modules/ecs"
enable_fargate_spot = false
enable_autoscaling = true
autoscaling_min_capacity = 2
autoscaling_max_capacity = 10
autoscaling_target_cpu = 70
}# Desarrollo: Single NAT, Spot, mínima capacidad
module "vpc" {
source = "jonmatum/serverless-modules/aws//modules/vpc"
single_nat_gateway = true
}
module "ecs" {
source = "jonmatum/serverless-modules/aws//modules/ecs"
enable_fargate_spot = true
desired_count = 1
}| Ambiente | Costo mensual | Configuración |
|---|---|---|
| Desarrollo | $70–90 | Single NAT, Fargate Spot, 1 task |
| Staging | $150–200 | Single NAT, On-Demand, 2 tasks |
| Producción | $200–400 | Multi-AZ NAT, auto-scaling 2–10 tasks |
Desglose de producción: NAT Gateways (2×) ~$65/mes, Fargate (2–10 tasks) ~$50–200/mes, ALB ~$20/mes, DynamoDB on-demand variable.
Cada ejemplo incluye scripts de despliegue idempotentes:
cd examples/ecs-app
./deploy.sh # Despliegue inicial (Terraform + Docker build + push)
./redeploy.sh # Redespliegue tras cambios de código
terraform destroy # Destruir infraestructuraLos módulos soportan despliegues idempotentes — terraform apply && terraform destroy && terraform apply funciona sin errores.
Estos módulos resuelven un problema concreto: desplegar aplicaciones serverless en AWS requiere coordinar decenas de recursos (VPC, subnets, NAT, ALB, ECS, IAM roles, security groups, CloudWatch) con configuraciones que deben seguir las mejores prácticas de seguridad y confiabilidad. Sin módulos reutilizables, cada equipo reinventa estas configuraciones — y frecuentemente omite encriptación, health checks o auto-scaling. La colección reduce un despliegue de producción de cientos de líneas de IaC a composiciones de 5–10 módulos con defaults seguros.
Práctica de definir y gestionar infraestructura mediante archivos de configuración versionados en lugar de procesos manuales. Fundamento de la automatización moderna de operaciones.
Modelo de computación en la nube donde el proveedor gestiona la infraestructura automáticamente, permitiendo ejecutar código sin aprovisionar ni administrar servidores, pagando solo por el uso real.
Herramienta de Infrastructure as Code de HashiCorp que permite definir, provisionar y gestionar infraestructura multi-cloud mediante archivos declarativos en HCL.
Servicio de orquestación de contenedores de AWS que ejecuta y escala aplicaciones Docker sin gestionar la infraestructura de cluster subyacente.
Motor de cómputo serverless para contenedores que elimina la necesidad de gestionar servidores, permitiendo ejecutar contenedores Docker pagando solo por los recursos consumidos.
Servicio managed de AWS para crear, publicar y gestionar APIs REST, HTTP y WebSocket que actúan como puerta de entrada a funciones Lambda y otros servicios backend.
Servicio de cómputo serverless de AWS que ejecuta código en respuesta a eventos sin necesidad de aprovisionar ni administrar servidores, escalando automáticamente desde cero hasta miles de ejecuciones concurrentes.
Base de datos NoSQL serverless de AWS con latencia de milisegundos a cualquier escala, ideal para aplicaciones que requieren alto rendimiento y escalabilidad automática.
Framework de AWS con seis pilares de mejores prácticas para diseñar y operar sistemas confiables, seguros, eficientes y rentables en la nube.
Servicio de colas de mensajes completamente administrado de AWS que desacopla componentes de aplicaciones distribuidas, garantizando la entrega de mensajes con escalabilidad ilimitada.
Servicio de mensajería pub/sub de AWS que distribuye mensajes a múltiples suscriptores simultáneamente, habilitando patrones de fan-out y notificaciones a escala.
Repositorios para almacenar, versionar y distribuir imágenes de contenedores, desde registros públicos como Docker Hub hasta registros privados como ECR.