Files
proyectosacc-mirror/docs/03-infraestructura-aws.md
T
2026-04-14 14:53:05 -06:00

6.2 KiB

03 - Infraestructura AWS

Descripción detallada de cada recurso de AWS que usa proyectosacc.


1. EC2 T3.small

La EC2 (Elastic Compute Cloud) es el servidor virtual donde corre la aplicación SACC.

Especificaciones

  • Tipo de instancia: t3.small
  • vCPU: 2
  • RAM: 2 GB
  • Sistema operativo: Ubuntu 22.04 LTS
  • Disco raíz: 20 GB SSD (gp3), con cifrado obligatorio

¿Qué hace?

  • Ejecuta la API/backend de SACC como un servicio de systemd (puerto 8080).
  • Corre Nginx Proxy solo para redirigir las peticiones de la API hacia el backend.
  • NO sirve el frontend React (eso lo hace S3 + CloudFront).
  • Se conecta a la base de datos RDS para leer y guardar datos.
  • Solo acepta conexiones SSH con llaves dedicadas: el pipeline y los administradores usan un par de llaves SSH generado específicamente para proyectosacc. No se permite acceso con contraseña.

Dato importante

En Cómputo Contable Soft hay una regla obligatoria: todas las instancias EC2 deben ser de la familia T3. Esto garantiza el mejor balance entre costo y rendimiento.


2. RDS MariaDB

La RDS (Relational Database Service) es la base de datos gestionada por AWS.

Especificaciones

  • Motor: MariaDB
  • Tipo de instancia: db.t3.micro
  • vCPU: 2
  • RAM: 1 GB
  • Uso: Base de datos de la aplicación SACC

¿Qué hace?

  • Guarda todos los datos de la aplicación: usuarios, clientes, productos, facturas, etc.
  • AWS se encarga de hacer respaldos automáticos, aplicar parches de seguridad y monitorear el rendimiento.

Ventaja principal

No tenemos que instalar ni mantener MariaDB nosotros mismos en el servidor. AWS lo hace por nosotros.


3. S3 Bucket

El S3 (Simple Storage Service) es el almacén de archivos de AWS.

¿Qué guardamos aquí?

  1. El frontend React compilado (build/) como un sitio web estático. CloudFront lee estos archivos para servirlos a los usuarios.
  2. Los archivos compilados (artefactos .jar) de la API backend.
  3. Versiones anteriores por si necesitamos hacer un rollback.
  4. Logs y respaldos temporales.

Ejemplo de rutas dentro del bucket

s3://ccsoft-proyectosacc-frontend/index.html
s3://ccsoft-artifacts-sacc4/develop/proyectosacc-app-1.0.0.jar

¿Por qué S3?

  • Es muy económico.
  • Es duradero (AWS garantiza que no se pierdan los archivos).
  • El pipeline puede subir y descargar archivos fácilmente.

4. CloudFront

CloudFront es la red de distribución de contenido (CDN) de AWS.

¿Qué hace?

  • Distribuye el frontend React desde el bucket S3 a los usuarios de todo el mundo.
  • Reduce la latencia porque los archivos se sirven desde el "edge location" más cercano al usuario.
  • Termina el cifrado SSL/TLS (HTTPS) usando el certificado de ACM.
  • Se conecta a S3 mediante Origin Access Control (OAC) para que el bucket no sea público directamente.

Relación con S3 y la API

CloudFront lee los archivos estáticos (index.html, CSS, JS) desde S3. Además, tiene un behavior /api/* que redirige las peticiones de la API hacia la EC2. De esta forma, tanto el frontend como el backend comparten el mismo dominio https://sacc.ccsoft.mx, pero los usuarios nunca acceden directamente al bucket S3.


5. Route 53

Route 53 es el servicio de DNS de AWS.

Registro configurado

  • Nombre: sacc.ccsoft.mx
  • Tipo: A (Alias)
  • Destino: CloudFront Distribution (no la IP de la EC2)

¿Qué hace?

Cuando un usuario escribe https://sacc.ccsoft.mx en su navegador, Route 53 le dice: "ve a CloudFront". Sin Route 53, los usuarios tendrían que escribir una URL larga de CloudFront.


6. ACM (AWS Certificate Manager)

ACM es el servicio que gestiona certificados SSL/TLS.

¿Qué es un certificado SSL?

Es un documento digital que permite que la conexión entre el usuario y el servidor esté cifrada. Se ve como el candadito verde 🔒 al lado de la dirección web.

¿Cómo lo usamos?

  1. Solicitamos un certificado en ACM para el dominio sacc.ccsoft.mx.
  2. ACM valida que el dominio nos pertenece.
  3. El certificado se adjunta a la distribución de CloudFront.
  4. Los usuarios acceden por HTTPS de forma segura. El certificado ya no vive en Nginx de la EC2.

7. Security Groups

Un Security Group es como un "guardia de seguridad" virtual que controla quién puede entrar y salir de la EC2.

Reglas de entrada (inbound)

Puerto Origen ¿Para qué?
22 IP del pipeline / VPN Conexión SSH para despliegues de la API
80 0.0.0.0/0 (todo internet) Tráfico HTTP hacia la API (puede redirigir a HTTPS)
443 0.0.0.0/0 (todo internet) Tráfico HTTPS hacia la API
8080 IPs de la VPC / CloudFront Acceso directo a la API backend

💡 Nota: los puertos 80 y 443 en la EC2 ya no sirven el frontend React. Solo reciben peticiones a la API. El frontend se sirve desde CloudFront.

Reglas de salida (outbound)

Puerto Destino ¿Para qué?
Todo (0-65535) 0.0.0.0/0 La EC2 puede salir a internet (descargar paquetes, consultar APIs, etc.)

Regla de seguridad importante

El puerto 22 (SSH) solo debe abrirse desde IPs confiables. Nunca dejarlo abierto a todo el mundo (0.0.0.0/0).


8. Nginx Proxy en la EC2

Nginx es un servidor web que en este proyecto actúa como proxy inverso exclusivo para la API.

¿Qué hace Nginx?

  1. Escucha en los puertos 80 y/o 443.
  2. Recibe las peticiones dirigidas a la API (por ejemplo, sacc.ccsoft.mx/api).
  3. Redirige el tráfico al backend que corre en el puerto interno 8080.
  4. NO sirve archivos estáticos del frontend React (eso es trabajo de S3 + CloudFront).

Ejemplo mental simple

Navegador/app ──▶ Nginx (443) ──▶ API SACC (8080)

¿Por qué Nginx y no Apache?

En proyectosacc se decidió usar Nginx porque:

  • Consume menos memoria RAM.
  • Es más rápido manejando muchas conexiones simultáneas.
  • La configuración de proxy inverso es más sencilla.

Anterior: 02-arquitectura-general.md
Siguiente: 04-usuarios-y-permisos.md