Índice del monorepo: ../docs/README.md.
Hay dos capas Terraform separadas a propósito:
Mapa de referencia (VPC, subnets, RDS PostgreSQL 16, ECS cluster, ECR, logs).
| Incluye | No incluye |
|---|---|
| VPC + IGW | TimescaleDB real |
| Subnets públicas/privadas | MSK / Kafka gestionado |
| RDS PostgreSQL 16 (sin hypertables) | ALB + ECS services |
| ECS cluster (sin services) | Despliegue Web |
| ECR api/worker | Alta disponibilidad / autoscaling |
Sirve para conversar arquitectura en sustentación. No es un despliegue completo del MVP. RDS del blueprint no sustituye TimescaleDB.
Uso:
cd infra/terraform
export TF_VAR_db_password="cambiar-en-local"
terraform init
terraform planRuta reproducible y económica para desarrollo/demostración (no producción):
- VPC + 2 subnets públicas + Internet Gateway
- 1× EC2 con Docker Compose (
--profile app) - Redpanda + TimescaleDB + API + Worker + Web
- Application Load Balancer (HTTP 80)
- Secrets Manager + IAM (lectura del secreto) + SSM (sin SSH público)
Documentación operativa: terraform/dev/README.md.
- Terraform
>= 1.9.8 - Credenciales AWS (VPC, EC2, ELB, IAM, Secrets Manager)
ami_idde Amazon Linux 2023 en la regiónapp_git_ref= SHA Git completo de 40 caracteres hexadecimales (obligatorio). Debe apuntar al commit que se desea desplegar (p. ej. el SHA demaino del tagv1.0.0tras el release). El valor de ejemplo enterraform.tfvars.examplees inválido a propósito y debe reemplazarse antes deterraform plan; Terraform lo rechaza hasta que cumpla^[0-9a-f]{40}$.
cd infra/terraform/dev
cp terraform.tfvars.example terraform.tfvars
# ami_id, instance_type, allowed_cidr_blocks, app_git_repository, app_git_ref
# (reemplazar el placeholder por un SHA real de 40 caracteres hex)
terraform init
terraform plan
terraform applyObtener AMI:
aws ec2 describe-images --owners amazon \
--filters "Name=name,Values=al2023-ami-2023*-x86_64" "Name=state,Values=available" \
--query 'sort_by(Images,&CreationDate)[-1].ImageId' --output textFijar el SHA a desplegar (p. ej. main estable o tag v1.0.0):
git fetch --tags origin
git rev-parse origin/main
# o: git rev-parse v1.0.0aws ssm start-session --target "$(terraform output -raw instance_id)"
# logs: /var/log/fleet-telemetry-user-data.log
ALB="$(terraform output -raw alb_url)"
curl -fsS "$ALB/"
curl -fsS "$ALB/health/ready"terraform destroy| Superficie | Exposición |
|---|---|
| ALB :80 | Solo allowed_cidr_blocks |
| EC2 :3000 / :5000 | Solo desde el SG del ALB |
| SSH | No expuesto |
| 5432 / 19092 | No expuestos al ALB ni a Internet (SG) |
| Secreto Postgres | Secrets Manager; recuperado en arranque por IAM role |
Cobran EC2, EBS, ALB, IPv4 públicos, Secrets Manager y tráfico. Una sola EC2: datos locales, sin multi-AZ ni HA. HTTP sin TLS / Route53 / WAF / CloudFront. Solo desarrollo y demostración.
| Opción | Notas |
|---|---|
Entorno dev/ (Compose + Timescale) |
Demo/dev funcional |
| Timescale Cloud | Opción gestionada productiva |
| TimescaleDB self-hosted | Operación propia |