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:
Jenkins CI
2026-06-03 04:39:01 +00:00
commit 71be2abd2e
27 changed files with 6424 additions and 0 deletions
+396
View File
@@ -0,0 +1,396 @@
# Analisis de Cuenta AWS 668889063715 - SACC v4 Test Environment
> **Fecha de analisis:** 2026-06-01
> **Cuenta AWS:** 668889063715
> **Region:** mx-central-1
> **Proyecto:** SACC v4 (Duplicacion de Produccion)
> **Estado:** Documento de analisis y planificacion - SIN CAMBIOS APLICADOS
---
## 1. Resumen Ejecutivo
Este documento analiza la cuenta AWS `668889063715` para determinar la viabilidad y estrategia de duplicacion del entorno de produccion SACC v4. **No se han ejecutado cambios** - este es un documento de planificacion basado en la arquitectura conocida de produccion.
### Objetivo
Crear un entorno de pruebas identico al de produccion en la cuenta `668889063715`, utilizando naming convention `sacc4-test-*` para evitar conflictos.
### Alcance
- Infraestructura completa (VPC, EC2, RDS, S3, CloudFront, Route53, Lambda)
- Configuracion de servidor (Nginx, Systemd, Usuarios)
- Scripts de automatizacion para creacion, validacion y destruccion
---
## 2. Estado de la Cuenta (Basado en Credenciales Proporcionadas)
### 2.1 Acceso Verificado
| Dato | Valor |
|------|-------|
| Cuenta AWS | 668889063715 |
| Region | mx-central-1 |
| Tipo de credencial | Temporal (Session Token) |
| Acceso requerido | IAM con permisos para EC2, RDS, S3, VPC, CloudFront, Route53, Lambda, IAM, DynamoDB |
### 2.2 Recursos Esperados en Cuenta
Segun el usuario, la cuenta ya cuenta con:
- **Route53**: Subdominio configurado (a verificar)
- **VPC**: Posiblemente VPC default o existentes (a verificar)
### 2.3 Verificacion Recomendada (NO EJECUTADA)
Antes de desplegar, ejecutar manualmente:
```bash
# Verificar identidad
aws sts get-caller-identity
# Listar regiones disponibles
aws account list-regions
# VPCs existentes
aws ec2 describe-vpcs
# Buckets S3
aws s3 ls
# Certificados ACM
aws acm list-certificates --region mx-central-1
aws acm list-certificates --region us-east-1
# Instancias EC2
aws ec2 describe-instances
# RDS
aws rds describe-db-instances
# Route53
aws route53 list-hosted-zones
```
---
## 3. Recursos a Crear
### 3.1 Infraestructura de Red
| Recurso | Nombre | CIDR / Configuracion |
|---------|--------|---------------------|
| VPC | sacc4-test-vpc | 10.3.0.0/16 |
| Subnet Publica 1 | sacc4-test-public-1 | 10.3.1.0/24 (mx-central-1a) |
| Subnet Publica 2 | sacc4-test-public-2 | 10.3.2.0/24 (mx-central-1b) |
| Subnet Privada 1 | sacc4-test-private-1 | 10.3.10.0/24 (mx-central-1a) |
| Subnet Privada 2 | sacc4-test-private-2 | 10.3.11.0/24 (mx-central-1b) |
| Internet Gateway | sacc4-test-igw | Asociado a VPC |
| Route Table Publica | sacc4-test-public-rt | 0.0.0.0/0 -> IGW |
**Razonamiento del CIDR:**
- Produccion usa `10.2.0.0/16`
- Test usa `10.3.0.0/16` para evitar solapamiento
- Si existen otras VPCs, verificar que no usen `10.3.0.0/16`
### 3.2 Computo (EC2)
| Recurso | Nombre | Configuracion |
|---------|--------|---------------|
| Instancia EC2 | sacc4-test-api-prod | t3.small, Ubuntu 22.04 |
| Elastic IP | sacc4-test-eip | Asociada a EC2 |
| Key Pair | sacc4-test-thoth | Llave publica de thoth |
| Volume Root | - | 8 GB gp2, encriptado |
**Puertos abiertos (Security Group EC2):**
| Puerto | Origen | Proposito |
|--------|--------|-----------|
| 22 | VPC CIDR o IPs especificas | SSH |
| 80 | 0.0.0.0/0 | HTTP |
| 443 | 0.0.0.0/0 | HTTPS |
| 8080-8085 | VPC CIDR | Microservicios API |
### 3.3 Base de Datos (RDS)
| Recurso | Nombre | Configuracion |
|---------|--------|---------------|
| Instancia RDS | sacc4-test-db-prod | MariaDB 10.11.16 |
| Clase | db.t3.micro | 1 vCPU, 1 GB RAM |
| Almacenamiento | 20 GB | gp2, encriptado |
| DB Name | ccsoft_sacc4_test | |
| Master User | sacc_admin_test | |
| App User | sacc_app_user | (creado por user data) |
| Backup | 7 dias | Ventana 03:00-04:00 |
**Security Group RDS:**
| Puerto | Origen | Proposito |
|--------|--------|-----------|
| 3306 | Security Group EC2 | MariaDB desde API |
### 3.4 Frontend (S3 + CloudFront)
| Recurso | Nombre | Configuracion |
|---------|--------|---------------|
| Bucket S3 | sacc4-frontend-test-668889063715 | Privado, OAC |
| CloudFront | Auto-generado | PriceClass_100, HTTPS |
| OAC | sacc4-test-oac | SigV4, S3 origin |
### 3.5 DNS (Route53)
| Recurso | Nombre | Valor |
|---------|--------|-------|
| Hosted Zone | ccsoft.mx (existente) | Data source |
| Record A | test-sacc.ccsoft.mx | Alias a CloudFront |
| Record A | api.test-sacc.ccsoft.mx | IP publica EC2 |
**Nota:** Se asume que existe una hosted zone para `ccsoft.mx` o subdominio. Si no existe, crearla primero o usar otro dominio.
### 3.6 Scheduling (Lambda + EventBridge)
| Recurso | Nombre | Proposito |
|---------|--------|-----------|
| Lambda Start | sacc4-test-start-instances | Iniciar EC2/RDS L-V 8AM |
| Lambda Stop | sacc4-test-stop-instances | Detener EC2/RDS L-V 7PM |
| Schedule Start | sacc4-test-start-morning | cron(0 13 ? * MON-FRI *) |
| Schedule Stop | sacc4-test-stop-evening | cron(0 0 ? * TUE-SAT *) |
| IAM Role Lambda | sacc4-test-lambda-scheduler-role | Permisos EC2/RDS |
| IAM Role Scheduler | sacc4-test-eventbridge-scheduler-role | Invocar Lambda |
**Horario (America/Mexico_City):**
- Inicio: 8:00 AM L-V (13:00 UTC)
- Apagado: 7:00 PM L-V (00:00 UTC+1)
### 3.7 Estado Terraform
| Recurso | Nombre | Proposito |
|---------|--------|-----------|
| Bucket S3 | sacc4-terraform-state-test-668889063715 | Estado remoto |
| Tabla DynamoDB | sacc4-terraform-locks-test-668889063715 | Bloqueo de estado |
---
## 4. Dependencias y Orden de Creacion
```
1. Backend Terraform (S3 + DynamoDB)
|
2. VPC (VPC, Subnets, IGW, Route Tables)
|
3. Security Groups (EC2, RDS)
|
4. IAM Roles (Lambda, EC2, Scheduler)
|
5. RDS (Subnet Group, Instance)
|
6. EC2 (Instance, EIP, Key Pair)
|
7. S3 + CloudFront (Bucket, Distribution, OAC)
|
8. Route53 (Records A)
|
9. Lambda + EventBridge (Functions, Schedules)
|
10. Ansible (Configuracion servidor)
```
**Dependencias criticas:**
- EC2 depende de VPC, Security Groups, IAM
- RDS depende de VPC, Security Groups
- CloudFront depende de S3
- Route53 depende de EC2 (IP) y CloudFront (dominio)
- Lambda depende de EC2 (ID) y RDS (ID)
---
## 5. Costos Estimados (Mensual)
| Recurso | Especificacion | Costo Mensual (USD) |
|---------|---------------|---------------------|
| EC2 t3.small | 11h/dia (scheduling) | ~$5.25 |
| RDS db.t3.micro | 11h/dia (scheduling) | ~$4.54 |
| S3 | ~1 GB storage | ~$0.02 |
| CloudFront | 100GB transferencia | ~$2.00 |
| Route53 | 1 hosted zone + queries | ~$0.50 |
| Lambda | 2 funciones, poca ejecucion | ~$0.00 |
| Data Transfer | Salida a internet | ~$1.00 |
| **TOTAL** | | **~$13.31** |
**Notas de costos:**
- Con scheduling (apagado fuera de horario laboral): ~60% de ahorro
- Sin scheduling (24/7): ~$35-40/mes
- Los costos son estimados y pueden variar
- CloudFront: PriceClass_100 (Norte America y Europa)
---
## 6. Riesgos y Mitigaciones
| Riesgo | Probabilidad | Impacto | Mitigacion |
|--------|-------------|---------|------------|
| Conflicto de CIDR con VPC existente | Media | Alto | Verificar `aws ec2 describe-vpcs` antes. Usar 10.3.0.0/16 |
| Nombre de bucket S3 ya existe | Alta | Medio | Usar sufijo de cuenta ID: sacc4-frontend-test-668889063715 |
| Falta de permisos IAM | Media | Alto | Verificar politicas antes. Script valida credenciales |
| Route53 zone no existe | Media | Alto | Verificar con `aws route53 list-hosted-zones`. Ajustar dominio |
| AMI no disponible en mx-central-1 | Baja | Alto | Verificar AMI antes o usar data source `aws_ami` |
| Credenciales temporales expiran | Media | Medio | Renovar session token si es necesario |
| Costos inesperados | Baja | Medio | Scheduling habilitado por defecto. Monitorear Billing |
| Destruccion accidental | Baja | Alto | Script de destruccion requiere confirmacion doble |
---
## 7. Conflictos Potenciales con Recursos Existentes
### 7.1 Nombres Unicos Globales
Los siguientes recursos requieren nombres unicos globalmente en AWS:
- **S3 Buckets**: `sacc4-frontend-test-668889063715` (incluye ID de cuenta)
- **DynamoDB Tables**: `sacc4-terraform-locks-test-668889063715`
### 7.2 Nombres Unicos por Cuenta
- **EC2 Key Pairs**: `sacc4-test-thoth`
- **IAM Roles**: `sacc4-test-lambda-scheduler-role`, `sacc4-test-eventbridge-scheduler-role`
- **RDS Instances**: `sacc4-test-db-prod`
- **Lambda Functions**: `sacc4-test-start-instances`, `sacc4-test-stop-instances`
### 7.3 Estrategia de Evitacion
1. Todos los recursos usan prefijo `sacc4-test-*`
2. Bucket S3 incluye ID de cuenta
3. Tabla DynamoDB incluye ID de cuenta
4. Script `create-test-environment.sh` verifica conflictos antes de crear
---
## 8. Checklist Pre-Despliegue
### 8.1 Verificacion Manual (Obligatoria)
- [ ] Ejecutar `aws sts get-caller-identity` y confirmar cuenta 668889063715
- [ ] Verificar region `mx-central-1`
- [ ] Listar VPCs existentes: `aws ec2 describe-vpcs`
- [ ] Verificar CIDR 10.3.0.0/16 no este en uso
- [ ] Listar hosted zones Route53: `aws route53 list-hosted-zones`
- [ ] Verificar dominio `test-sacc.ccsoft.mx` este disponible
- [ ] Listar certificados ACM: `aws acm list-certificates --region us-east-1`
### 8.2 Preparacion Local
- [ ] Instalar AWS CLI v2
- [ ] Instalar Terraform >= 1.5.0
- [ ] Instalar Ansible (opcional, para configuracion)
- [ ] Generar par de llaves SSH: `ssh-keygen -t ed25519 -f ~/.ssh/sacc4-test-key`
- [ ] Copiar `terraform.tfvars.example` a `terraform.tfvars`
- [ ] Completar todas las variables en `terraform.tfvars`
- [ ] Cambiar contrasena RDS por una segura
### 8.3 Configuracion de Credenciales
```bash
export AWS_ACCESS_KEY_ID=ASIAZXPHFEERTQJHLDJC
export AWS_SECRET_ACCESS_KEY=Xa58LDQt+WOBgGVQhwoYbATz/sk2G80RpIcjvKuo
export AWS_SESSION_TOKEN=IQoJb3JpZ2luX2VjECYaDG14LWNlbnRyYWwtMSJHMEUCIQCDI8BwOq2g1G/g7bNRoTJlolwJas0IxPU0PcLMFWbVEgIgJfC5/CoCt9rL6xGrC3hUtjzXb/SHk5owM6ImoK4GKdYq9wIIFhAAGgw2Njg4ODkwNjM3MTUiDMlcZz9jDpE28Mvr3yrUAihBZtNJ4vZs5iU16XgogqOWzA54lBjSnFsrq17u30F88mQL3sKNns7jGjgfHDIoPy0MmyA+cWd+q9DCtuZr+DUNS81n0DGDtI+oCkPfAmlkhHCtskzoyUzMb0XSRBIv2IUDqUqsOps/QBiTZcqJ3JIYeUaDntA1ZHCYCTH1C2hsgkznkPgwQE9/UrVmkkwoWAfRlln9DYpUpH5x/y+Cmzd5a7W/bhCYBF6vYbPvhr5Zr1t8EKcDPz4ANX+OFaa6v7AL2aHDuyVPiHU/YDXD6uSeTlfpLFYuQvx2HdBeHvHNyMcPpAsQ8c4YflzJGZmPBqnXrnpkOZBhNqjxlHFjXxSlNEv0X7ceKwOPCz4TLHA+cS18KkGKARzfVSfCeCmhQ+5LS8uCGdDV6u3tTUHY/rFyZ6uKVWrbl0Ky9apJRl2TOlXwQd6NyHsw2PkUgacitEfO0vswieX30AY6pQHT7j02zLvQClYhLqpyt+EHGVzlvRNN0dH92RRtQGtryQ+er5YUatzrth8VyBs659qLeIf1bmrCBBWpvJRDIsRAxnWU3Wq3nBqwxgFshaoPS8j99g9Q8Iky0MahSKEi30CLNaFZh6k8PoqQeGUrJLmT7cUH0gP9u+J+jJoPHb9568+yDLtCItb2p0q4JejISOKXniMKm6nja0/dJwl1uYMMtEalvVk=
export AWS_DEFAULT_REGION=mx-central-1
```
---
## 9. Arquitectura del Entorno Test
```
+------------------+
| Usuario |
+--------+---------+
|
v
+------------------+ +----------+-----------+
| Route53 |<----------| CloudFront CDN |
| (test-sacc... ) | | (SSL via ACM) |
+------------------+ +----------+-----------+
|
+---------------------+---------------------+
| |
v v
+----------------+ +------------------+
| S3 Bucket | | EC2 Instance |
| (Frontend | | (Backend API |
| React) | | Spring Boot) |
+----------------+ +--------+---------+
|
v
+------------------+
| Nginx (reverse |
| proxy) |
+--------+---------+
|
v
+------------------+
| RDS MariaDB |
| (Base de datos) |
+------------------+
^
|
+------------------+
| Lambda Scheduler|
| (Start/Stop) |
+------------------+
```
---
## 10. Scripts Generados
| Script | Ruta | Proposito |
|--------|------|-----------|
| **create-test-environment.sh** | `iac-duplicate/scripts/` | Crea el entorno completo |
| **validate-environment.sh** | `iac-duplicate/scripts/` | Valida funcionamiento |
| **destroy-test-environment.sh** | `iac-duplicate/scripts/` | Destruye de forma segura |
### Uso de Scripts
```bash
# 1. Configurar credenciales
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...
export AWS_DEFAULT_REGION=mx-central-1
# 2. Crear entorno
cd iac-duplicate/scripts
./create-test-environment.sh
# 3. Validar entorno
./validate-environment.sh --full
# 4. Destruir entorno (cuando ya no se necesite)
./destroy-test-environment.sh
```
---
## 11. Diferencias con Produccion
| Aspecto | Produccion | Test |
|---------|-----------|------|
| Cuenta AWS | 523761210517 | 668889063715 |
| CIDR VPC | 10.2.0.0/16 | 10.3.0.0/16 |
| Dominio | prod-sacc.ccsoft.mx | test-sacc.ccsoft.mx |
| Scheduling | L-V 8AM-7PM | L-V 8AM-7PM |
| Instancia EC2 | t3a.medium | t3.small |
| Certificado SSL | Let's Encrypt + ACM | CloudFront default (inicial) |
| Backup RDS | 7 dias | 7 dias |
---
## 12. Notas y Advertencias
1. **NO APLICAR EN PRODUCCION**: Estos scripts estan disenados exclusivamente para el entorno de test en cuenta 668889063715.
2. **Credenciales Temporales**: Las credenciales proporcionadas incluyen un session token, lo que indica que son temporales y expiraran. Renovar segun sea necesario.
3. **Costos**: Aunque el scheduling reduce costos significativamente, monitorear la facturacion de AWS para evitar cargos inesperados.
4. **SSL/TLS**: En produccion se usa Let's Encrypt para la API y ACM para CloudFront. En test, inicialmente CloudFront usara el certificado default. Para produccion-like, solicitar certificado ACM en us-east-1.
5. **Datos Sensibles**: El archivo `terraform.tfvars` contiene contrasenas. NO commitear en git. Usar `.gitignore` o AWS Secrets Manager para entornos reales.
6. **AMI**: La AMI `ami-0f553e2869648134e` es para Ubuntu 22.04 en mx-central-1. Verificar disponibilidad antes de desplegar.
---
## 13. Proximos Pasos
1. **Verificar cuenta**: Ejecutar comandos AWS CLI de la seccion 2.3
2. **Preparar terraform.tfvars**: Completar todas las variables
3. **Generar llaves SSH**: Crear par de llaves para acceso EC2
4. **Ejecutar create-test-environment.sh**: Crear la infraestructura
5. **Desplegar aplicacion**: Subir JARs de microservicios a EC2
6. **Configurar SSL**: Solicitar certificado ACM para dominio custom
7. **Validar**: Ejecutar validate-environment.sh
---
*Documento generado automaticamente - 2026-06-01*
**Cómputo Contable Soft SA de CV - Proyecto SACC4**