Add complete SACC v4 infrastructure project
- Terraform modules: VPC, EC2, RDS, S3, CloudFront, Route53, Lambda, IAM, Security Groups - Ansible playbooks for server configuration - Scripts: create-test-environment.sh, destroy-test-environment.sh, validate-environment.sh - Documentation: README, QUICKSTART, AGENTS - Jenkins pipeline for automated deployment - Jenkins pipeline for environment destruction
This commit is contained in:
@@ -0,0 +1,355 @@
|
||||
# =============================================================================
|
||||
# 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)
|
||||
# =============================================================================
|
||||
Reference in New Issue
Block a user