Saltar al contenido principal

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​

CapaRepositorio / artefactoRol en AWS
Aplicaciónnwi-app-conectamed-*Contenedores Docker en scopes EC2 (deploy vía Coolify Git App)
Orquestación localservices/docker-compose.dev.ymlParidad funcional en dev; no despliega en AWS
Infraestructuranwi-app-conectamed-iacVPC, scopes EC2, ALB, NLB, SQS, backups S3
Gestor de deployCoolify (scope control)Build, env vars, auto-deploy desde GitHub
UIui/nwi-app-conectamed-noc-webDesplegar en scope adecuado (Coolify) o Amplify externo

Scopes EC2​

ScopeRolBalanceador
controlCoolify UI + Headscale (VPN)EIP pública (admin.dominio)
dataPostgreSQL, Redis, backups S3—
coreBFF, notification, inventory, workers—
authauth-ms, radius-worker, portal cautivoALB HTTP
radiusradius-serverNLB UDP

Tamaños y volúmenes: coolify_scopes en terraform.tfvars.

Módulos Terraform​

MóduloRecursos principales
modules/vpcVPC, subredes, NAT, endpoints opcionales
modules/albALB → target group del scope auth
modules/nlbNLB UDP → scope radius
modules/sqsColas (notification, intelligence, …)
modules/scope-serverEC2 + 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:

EventoAcción
PR → mainterraform plan
Push → mainterraform 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​

OutputUso
control_public_ipDNS de admin Coolify
scope_private_ipsRegistrar servidores remotos en Coolify
alb_dns_nameCNAME API / portal HTTP
nlb_dns_nameDNS para APs RADIUS
sqs_queue_urlsVariables de entorno en workers
data_backup_bucketBackups Postgres en data scope
coolify_setup_guideChecklist post-apply
coolify_ssh_private_key_ssmClave 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
precaución

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 — resumen
  • docs/github-actions-terraform.md — CI de Terraform
  • docs/coolify-deploy.md — deploy de microservicios
  • variables.tf / outputs.tf — referencia de entradas y salidas