DEV Community

Cover image for Arquitectura Cloud Moderna para Aplicaciones Web en AWS
Eduardo Fuentes
Eduardo Fuentes

Posted on

Arquitectura Cloud Moderna para Aplicaciones Web en AWS

Cuando aprendemos AWS, solemos estudiar los servicios por separado:
EC2, RDS, S3, VPC…

Pero la verdadera ingeniería comienza cuando entendemos cómo se conectan entre sí para formar una arquitectura escalable, segura y lista para producción.

En este artículo explico una arquitectura moderna para aplicaciones web basada en buenas prácticas.


Objetivo de la arquitectura

Diseñar una infraestructura que sea:

  • Altamente disponible
  • Escalable
  • Segura
  • Optimizada en costos
  • Preparada para producción

Punto de Entrada: Route 53 + CloudFront

Cuando un usuario escribe el dominio en su navegador, el flujo correcto es:

  1. Route 53 resuelve el dominio.
  2. El dominio apunta a CloudFront.
  3. CloudFront verifica si el contenido está cacheado en una Edge Location cercana.
  4. Si está cacheado, lo entrega inmediatamente.
  5. Si no está cacheado, consulta al origin.

Nota: No todo el tráfico entra a la VPC. CloudFront actúa como primera capa de optimización y protección.


Contenido Estático: S3 como Origin

Para contenido estático como:

  • HTML
  • CSS
  • JavaScript
  • Imágenes
  • Assets del frontend

CloudFront usa Amazon S3 como origin.

Esto permite:

  • Baja latencia global
  • Reducción de carga en backend
  • Menor costo operativo
  • Mejor experiencia de usuario

Nota: En muchos casos, el frontend completo puede servirse desde S3 + CloudFront sin tocar la VPC.


Contenido Dinámico: ALB como Origin

Cuando la petición requiere lógica de negocio (API, autenticación, base de datos):

CloudFront redirige la solicitud hacia el Application Load Balancer (ALB).

Flujo dinámico:

Usuario → Route 53 → CloudFront → ALB → EC2 → RDS

Aquí recién entramos a la VPC.


VPC: Nuestra Red Privada

La VPC define:

  • Rango de IPs
  • Subnets públicas
  • Subnets privadas
  • Tablas de ruteo
  • Gateways

Nota: Es el entorno aislado donde vive nuestra aplicación.


Subnets Públicas

En las subnets públicas normalmente encontramos:

  • Application Load Balancer
  • NAT Gateway
  • Internet Gateway (a nivel VPC)

Nota: El ALB recibe tráfico desde CloudFront. No desde usuarios directamente.


Subnets Privadas (Capa de Aplicación)

Aquí viven las instancias:

  • EC2 con nuestro backend
  • Auto Scaling Group (recomendado)

Características:

  • No tienen IP pública.
  • Solo reciben tráfico desde el ALB.
  • Pueden salir a Internet mediante NAT Gateway.

Nota: Esto reduce significativamente la superficie de ataque.


Subnets Privadas (Capa de Datos)

La base de datos (Amazon RDS) se ubica en subnets privadas separadas.

Buenas prácticas aplicadas:

  • Multi-AZ para alta disponibilidad
  • Sin acceso público
  • Security Groups restringidos
  • Backups automáticos

Nota: Separar aplicación y datos mejora seguridad y organización.


NAT Gateway

Las instancias en subnets privadas pueden necesitar acceso externo para:

  • Descargar dependencias
  • Consumir APIs externas
  • Actualizaciones

Nota: El NAT Gateway permite salida controlada a Internet sin exponer las instancias.


Seguridad por Capas

Esta arquitectura aplica principios clave:

  • CDN como primera barrera
  • Separación por capas
  • Principio de mínimo privilegio
  • Base de datos no expuesta
  • Instancias privadas
  • Balanceo multi-AZ

Nota: La seguridad no es un componente. Es un diseño.


Escalabilidad

La arquitectura permite crecer fácilmente:

  • Auto Scaling en EC2
  • Read replicas en RDS
  • Cacheo en CloudFront
  • Separación frontend/backend
  • Migración futura a contenedores (ECS/EKS)

Optimización de Costos

CloudFront reduce tráfico al backend.

S3 es más barato que servir estáticos desde EC2.

Auto Scaling evita sobreaprovisionamiento.

Arquitectura moderna no es solo técnica. También es financiera.


¿Por qué esta es una buena base?

Porque:

  • Desacopla estático de dinámico
  • Reduce latencia global
  • Aumenta seguridad
  • Aplica buenas prácticas reales
  • Te obliga a entender networking, disponibilidad y diseño

Conclusión

Entender cómo diseñar un sistema completo, pensando en rendimiento, seguridad y escalabilidad desde el inicio.

La diferencia entre saber usar servicios y saber diseñar arquitectura es lo que realmente eleva tu carrera como ingeniero.


Feliz codeo gente!

@eduuu.dev

Top comments (0)