# ============================================================================= # TERRAFORM.TFVARS.EXAMPLE - SACC v4 # ============================================================================= # Plantilla unificada para despliegue de infraestructura SACC v4 # en entornos TEST y PRODUCCION usando Terraform Workspaces. # # INSTRUCCIONES: # 1. Copiar este archivo: cp terraform.tfvars.example terraform.tfvars # 2. Completar las variables marcadas como [REQUERIDO] # 3. Seleccionar workspace: terraform workspace select test|prod # 4. terraform init # 5. terraform plan # 6. terraform apply # # CUENTAS AWS: # TEST: 668889063715 (mx-central-1) # PROD: 523761210517 (mx-central-1) # # NOTA DE SEGURIDAD: # - NUNCA commitear terraform.tfvars (esta en .gitignore) # - Las contrasenas deben tener minimo 16 caracteres # - Restringir SSH a IPs especificas (no usar 0.0.0.0/0) # ============================================================================= # ============================================================================= # SECCION 1: CONFIGURACION GENERAL # ============================================================================= # Entorno de despliegue. Terraform workspace DEBE coincidir con este valor. # Valores permitidos: "test", "prod" # TEST: "test" (cuenta 668889063715) # PROD: "prod" (cuenta 523761210517) # [REQUERIDO] - No tiene valor por defecto para evitar errores accidentales environment = "test" # Nombre del proyecto (usado como prefijo en recursos) # Valor por defecto: "sacc4" project_name = "sacc4" # Region AWS para despliegue # NOTA: mx-central-1 es la unica region disponible para ambas cuentas # Valor por defecto: "mx-central-1" aws_region = "mx-central-1" # ============================================================================= # SECCION 2: DOMINIO Y DNS (Route53) # ============================================================================= # Dominio principal para la aplicacion # TEST: "dev-sacc.ccsoft.mx" # PROD: "sacc.ccsoft.mx" # [REQUERIDO] - Debe existir como Hosted Zone en Route53 de la cuenta # correspondiente ANTES de ejecutar terraform apply domain_name = "dev-sacc.ccsoft.mx" # Subdominio para la API backend # TEST: "api.dev-sacc.ccsoft.mx" # PROD: "api.sacc.ccsoft.mx" # [REQUERIDO] - Se crea automaticamente como registro A apuntando a EC2 api_subdomain = "api.dev-sacc.ccsoft.mx" # ============================================================================= # SECCION 3: NETWORKING (VPC) # ============================================================================= # CIDR block para la VPC # IMPORTANTE: No debe chocar con otras VPCs ni redes on-premise # TEST: "10.3.0.0/16" (evita conflicto con prod 10.2.0.0/16) # PROD: "10.2.0.0/16" # Valor por defecto: "10.3.0.0/16" vpc_cidr = "10.3.0.0/16" # Zonas de disponibilidad # mx-central-1 actualmente soporta: mx-central-1a, mx-central-1b # Valor por defecto: ["mx-central-1a", "mx-central-1b"] availability_zones = ["mx-central-1a", "mx-central-1b"] # CIDRs para subnets publicas (una por AZ) # Deben estar dentro del rango vpc_cidr # TEST: ["10.3.1.0/24", "10.3.2.0/24"] # PROD: ["10.2.1.0/24", "10.2.2.0/24"] # Valor por defecto: ["10.3.1.0/24", "10.3.2.0/24"] public_subnet_cidrs = ["10.3.1.0/24", "10.3.2.0/24"] # CIDRs para subnets privadas (una por AZ) # RDS y recursos internos se despliegan aqui # TEST: ["10.3.10.0/24", "10.3.11.0/24"] # PROD: ["10.2.10.0/24", "10.2.11.0/24"] # Valor por defecto: ["10.3.10.0/24", "10.3.11.0/24"] private_subnet_cidrs = ["10.3.10.0/24", "10.3.11.0/24"] # ============================================================================= # SECCION 4: EC2 - SERVIDOR DE APLICACION # ============================================================================= # Tipo de instancia EC2 # TEST: "t3.small" (costo optimizado) # PROD: "t3.medium" (instancia actual: 78.13.201.205) # Valor por defecto: "t3.small" # NOTA: Para produccion, t3.medium con 4GB RAM minimo recomendado ec2_instance_type = "t3.small" # AMI ID de Ubuntu 22.04 LTS (Jammy) # Verificar AMI actualizada en: https://cloud-images.ubuntu.com/locator/ec2/ # Para mx-central-1, buscar "Ubuntu 22.04 LTS amd64" # Valor por defecto: "ami-0f553e2869648134e" (Ubuntu 22.04 LTS) # NOTA: La AMI puede variar por cuenta. Verificar en consola AWS. ec2_ami = "ami-0f553e2869648134e" # Tamano del volumen root en GB # PROD actual: 8GB (7.6G usados 60%) # Recomendado: 20GB para logs y artefactos # Valor por defecto: 8 ec2_root_volume_size = 8 # Tipo de volumen root # Opciones: gp2, gp3, io1, io2 # Valor por defecto: "gp2" ec2_root_volume_type = "gp2" # Encriptar volumen root # Valor por defecto: true # RECOMENDADO: Siempre true en produccion ec2_root_volume_encrypted = true # ============================================================================= # SECCION 5: ACCESO SSH (CRITICO - SEGURIDAD) # ============================================================================= # Lista de CIDRs permitidos para acceso SSH (puerto 22) # FORMATO: ["xxx.xxx.xxx.xxx/32"] para IP individual # ["203.0.113.0/24"] para rango de oficina # ["10.8.0.0/24"] para VPN # # [REQUERIDO] - Debe contener al menos tu IP publica actual # WARNING: [] vacio permite SOLO acceso desde la VPC (mas seguro pero requiere bastion) # PROD actual incluye IPs de: Libra-Totalplay, Leaseweb, Empresa # # Ejemplo TEST: ["186.96.145.105/32", "187.234.90.175/32"] # Ejemplo PROD: ["186.96.145.105/32", "207.244.97.190/32", "187.234.90.175/32"] ssh_allowed_cidrs = [] # Llave publica SSH para usuario "thoth" # Generar par de llaves: ssh-keygen -t ed25519 -f sacc4-thoth-key -C "thoth@ccsoft" # El usuario thoth se usa para despliegues (UID 1001, grupo duat GID 1006) # [REQUERIDO] - Copiar contenido de sacc4-thoth-key.pub thoth_public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/RcJmEYOBpfq1tSLltV1pyNB55l1jA2zYr5ZNJ0f41 thoth@ccsoft" # Llave publica SSH para usuario "osiris" # Generar par de llaves: ssh-keygen -t ed25519 -f sacc4-osiris-key -C "osiris@ccsoft" # El usuario osiris ejecuta los servicios Java (UID 997, grupo duat GID 1006) # [REQUERIDO] - Copiar contenido de sacc4-osiris-key.pub osiris_public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFo6CycfgIuCCSVZbhuPwqlAVDxY8YWb1xpvpqxSzMjR osiris@ccsoft" # ============================================================================= # SECCION 6: RDS - BASE DE DATOS # ============================================================================= # Clase de instancia RDS # TEST: "db.t3.micro" (costo optimizado, eligible free tier) # PROD: "db.t3.micro" (instancia actual en produccion) # Valor por defecto: "db.t3.micro" rds_instance_class = "db.t3.micro" # Motor de base de datos # PROD actual usa: MariaDB 10.6 # Valor por defecto: "mariadb" # NOTA: No cambiar a menos que se migre intencionalmente rds_engine = "mariadb" # Version del motor # PROD actual: 10.6 # TEST recomendado: 10.11.16 (version compatible mas reciente) # Valor por defecto: "10.11.16" rds_engine_version = "10.11.16" # Almacenamiento asignado en GB # Valor por defecto: 20 # Recomendado: 50GB+ para produccion con crecimiento rds_allocated_storage = 20 # Almacenamiento maximo para auto-scaling # RDS expande automaticamente hasta este limite # Valor por defecto: 100 rds_max_allocated_storage = 100 # Nombre de la base de datos inicial # TEST: "ccsoft_sacc4_test" # PROD: "ccsoft_sacc4" # Valor por defecto: "ccsoft_sacc4_test" rds_db_name = "ccsoft_sacc4_test" # Usuario master/administrador de RDS # TEST: "sacc_admin_test" # PROD: "sacc_admin_prod" # Valor por defecto: "sacc_admin_test" # NOTA: Este usuario NO es el que usa la aplicacion. La app usa un usuario # adicional creado automaticamente: "sacc_app_user" rds_master_username = "sacc_admin_test" # Contrasena master de RDS # [REQUERIDO] - MINIMO 16 caracteres, debe incluir: # - Mayusculas, minusculas, numeros, simbolos # - No usar caracteres especiales problematicos: @, /, \" # Ejemplo: "Sacc4_Test_2024!Secure" # NOTA DE SEGURIDAD: Esta contrasena se usa tambien para el usuario sacc_app_user rds_master_password = "CambiarEstaPassword123!Segura" # Periodo de retencion de backups automaticos (dias) # TEST: 7 dias (minimo para desarrollo) # PROD: 30 dias (recomendado para produccion) # Valor por defecto: 7 rds_backup_retention_period = 7 # Ventana de backup (hora UTC) # Formato: "hh:mm-hh:mm" # Valor por defecto: "03:00-04:00" (9pm-10pm CST) rds_backup_window = "03:00-04:00" # Ventana de mantenimiento # Formato: "Ddd:hh:mm-Ddd:hh:mm" # Valor por defecto: "Mon:04:00-Mon:05:00" rds_maintenance_window = "Mon:04:00-Mon:05:00" # ============================================================================= # SECCION 7: SCHEDULING (APAGADO AUTOMATICO - SOLO TEST) # ============================================================================= # Habilitar apagado automatico de EC2 y RDS para ahorrar costos # RECOMENDADO: true para TEST, false para PROD # TEST: true (apaga fines de semana) # PROD: false (siempre encendido) # Valor por defecto: true enable_scheduling = true # Zona horaria para las reglas de scheduling # Valor por defecto: "America/Mexico_City" schedule_timezone = "America/Mexico_City" # Cron para INICIO de instancias (hora de Mexico) # Por defecto: 8:00 AM Lunes-Viernes (13:00 UTC) # Formato AWS cron: cron(minutes hours day-of-month month day-of-week year) # Valor por defecto: "cron(0 13 ? * MON-FRI *)" schedule_start_cron = "cron(0 13 ? * MON-FRI *)" # Cron para APAGADO de instancias (hora de Mexico) # Por defecto: 7:00 PM Lunes-Viernes (00:00 UTC siguiente dia) # Valor por defecto: "cron(0 0 ? * TUE-SAT *)" schedule_stop_cron = "cron(0 0 ? * TUE-SAT *)" # ============================================================================= # SECCION 8: FRONTEND (S3 + CloudFront) # ============================================================================= # Nombre del bucket S3 para alojar el frontend React # DEBE ser unico a nivel global en AWS # TEST: "sacc4-frontend-test-668889063715" # PROD: "sacc4-frontend-prod-523761210517" # [REQUERIDO] - Debe incluir ID de cuenta para garantizar unicidad # NOTA: Si el bucket ya existe, Terraform fallara. Verificar primero. frontend_bucket_name = "sacc4-frontend-test-668889063715" # Clase de precio de CloudFront # Opciones: # "PriceClass_100" - Norteamérica y Europa (mas economico) # "PriceClass_200" - + Asia y Oceania # "PriceClass_All" - Global # Valor por defecto: "PriceClass_100" cloudfront_price_class = "PriceClass_100" # Habilitar logging de CloudFront # Valor por defecto: false # Recomendado: true en produccion para debugging enable_cloudfront_logging = false # ============================================================================= # SECCION 9: CERTIFICADOS SSL (ACM) # ============================================================================= # ARN del certificado SSL en ACM # [REQUERIDO PARA HTTPS/PROD] # Para CloudFront, el certificado DEBE estar en us-east-1 (N. Virginia) # Aunque los recursos esten en mx-central-1 # # Como obtener: # 1. Ir a AWS Console -> Certificate Manager (region us-east-1) # 2. Solicitar certificado para el domain_name # 3. Validar via DNS (Route53) o Email # 4. Copiar el ARN aqui # # TEST: "arn:aws:acm:us-east-1:668889063715:certificate/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" # PROD: "arn:aws:acm:us-east-1:523761210517:certificate/bfb41df2-79f1-40e5-95ad-404d4fe306e4" # # NOTA: Dejar vacio "" si aun no se tiene certificado. CloudFront se creara # con HTTP solo y se actualizara manualmente despues. certificate_arn = "" # ============================================================================= # SECCION 10: TAGS Y METADATOS # ============================================================================= # Tags comunes aplicados a TODOS los recursos # Valor por defecto: ver abajo # NOTA: Se agregan automaticamente tags adicionales por el provider: # Environment, AccountId, CostCenter common_tags = { Project = "proyectosacc" ManagedBy = "terraform" Team = "infra" Purpose = "test-environment" } # ============================================================================= # SECCION 11: VARIABLES AVANZADAS (opcional - modificar con precaucion) # ============================================================================= # Configuracion de pool de conexiones HikariCP (aplicacion Java) # Estos valores se inyectan via variables de entorno systemd # Valores de PROD actual para referencia: # max_pool_size = 4 # min_idle = 0 # idle_timeout = 300000 # max_lifetime = 1800000 # connection_timeout = 30000 # ============================================================================= # REFERENCIA RAPIDA: VALORES POR ENTORNO # ============================================================================= # TEST PROD # ------------------------------------------------------------------------- # Cuenta AWS: 668889063715 523761210517 # Region: mx-central-1 mx-central-1 # VPC CIDR: 10.3.0.0/16 10.2.0.0/16 # Dominio: dev-sacc.ccsoft.mx sacc.ccsoft.mx # API: api.dev-sacc.ccsoft.mx api.sacc.ccsoft.mx # EC2: t3.small t3.medium # RDS: db.t3.micro db.t3.micro # Scheduling: true (ahorro) false (24/7) # AMI Ubuntu: ami-0f553e2869648134e ami-0f553e2869648134e # ------------------------------------------------------------------------- # ============================================================================= # CHECKLIST PRE-DESPLIEGUE # ============================================================================= # [ ] Crear/workspac: terraform workspace new test|prod # [ ] Configurar credenciales AWS para la cuenta correcta # [ ] Verificar que domain_name existe en Route53 # [ ] Solicitar certificado SSL en ACM (us-east-1) # [ ] Generar llaves SSH para thoth y osiris # [ ] Obtener IP publica actual para ssh_allowed_cidrs # [ ] Definir contrasena segura para RDS (16+ caracteres) # [ ] Verificar que frontend_bucket_name es unico globalmente # [ ] Revisar CIDRs para evitar conflictos de red # [ ] Ejecutar: terraform plan (revisar sin aplicar) # =============================================================================