Infraestructura AWS (nwi-app-conectamed-iac)
El repositorio nwi-app-conectamed-iac define la infraestructura de ConectaMed en AWS con Terraform. La capa de aplicación corre en EC2 gestionada por Coolify (scopes); Terraform provisiona red, balanceadores, instancias y colas SQS. Postgres y Redis se despliegan en el data scope desde Coolify, no como RDS/ElastiCache gestionados.
Relación con el monorepo de servicios
| Capa | Repositorio / artefacto | Rol en AWS |
|---|---|---|
| Aplicación | nwi-app-conectamed-* | Contenedores Docker en scopes EC2 (deploy vía Coolify Git App) |
| Orquestación local | services/docker-compose.dev.yml | Paridad funcional en dev; no despliega en AWS |
| Infraestructura | nwi-app-conectamed-iac | VPC, scopes EC2, ALB, NLB, SQS, backups S3 |
| Gestor de deploy | Coolify (scope control) | Build, env vars, auto-deploy desde GitHub |
| UI | ui/nwi-app-conectamed-noc-web | Desplegar en scope adecuado (Coolify) o Amplify externo |
Scopes EC2
| Scope | Rol | Balanceador |
|---|---|---|
| control | Coolify UI + Headscale (VPN) | EIP pública (admin.dominio) |
| data | PostgreSQL, Redis, backups S3 | — |
| core | BFF, notification, inventory, workers | — |
| auth | auth-ms, radius-worker, portal cautivo | ALB HTTP |
| radius | radius-server | NLB UDP |
Tamaños y volúmenes: coolify_scopes en terraform.tfvars.
Módulos Terraform
| Módulo | Recursos principales |
|---|---|
modules/vpc | VPC, subredes, NAT, endpoints opcionales |
modules/alb | ALB → target group del scope auth |
modules/nlb | NLB UDP → scope radius |
modules/sqs | Colas (notification, intelligence, …) |
modules/scope-server | EC2 + user-data Coolify/Headscale por scope |
Estado remoto y CI
Bootstrap (una vez): bootstrap-state/ crea bucket S3 y tabla DynamoDB para state lock.
Infraestructura — workflow nwi-app-conectamed-iac/.github/workflows/terraform-iac.yml:
| Evento | Acción |
|---|---|
PR → main | terraform plan |
Push → main | terraform apply |
Secrets: AWS_ROLE_TO_ASSUME, AWS_REGION, TF_STATE_BUCKET, TF_STATE_LOCK_TABLE. Detalle en nwi-app-conectamed-iac/docs/github-actions-terraform.md.
Aplicaciones — sin workflow de deploy en GitHub. Cada repo se conecta a Coolify (GitHub App). Ver nwi-app-conectamed-iac/docs/coolify-deploy.md.
Outputs útiles tras terraform apply
| Output | Uso |
|---|---|
control_public_ip | DNS de admin Coolify |
scope_private_ips | Registrar servidores remotos en Coolify |
alb_dns_name | CNAME API / portal HTTP |
nlb_dns_name | DNS para APs RADIUS |
sqs_queue_urls | Variables de entorno en workers |
data_backup_bucket | Backups Postgres en data scope |
coolify_setup_guide | Checklist post-apply |
coolify_ssh_private_key_ssm | Clave SSH para nodos remotos |
Configuración de aplicación
Terraform no inyecta secretos ni URLs entre microservicios. Configúralos en Coolify por aplicación:
JWT_SECRET, SMTP, claves LLM, Metabase, etc.DATABASE_URL, Redis host (IPs del data scope)- URLs HTTP entre MS (
AUTH_SERVICE_URL, …)
Mantén alineados los nombres de servicio con las URLs del BFF, como en desarrollo local.
Comandos locales (operador IaC)
cd nwi-app-conectamed-iac
terraform init -reconfigure -backend-config=backend.hcl
terraform plan -var-file=terraform.tfvars
# terraform apply -var-file=terraform.tfvars
terraform output coolify_setup_guide
No ejecutes apply en prod sin revisar el plan. Activa enable_deletion_protection y alb_enable_https + alb_certificate_arn en producción.
Documentación del repositorio IAC
README.md— resumendocs/github-actions-terraform.md— CI de Terraformdocs/coolify-deploy.md— deploy de microserviciosvariables.tf/outputs.tf— referencia de entradas y salidas