Proyecto 1 – Servidor web en AWS con EC2 y VPC
Infraestructura mínima en AWS para publicar una página web con Nginx, entendiendo cómo se conectan VPC, subredes, rutas, Internet Gateway y Security Groups.
1. Descripción general
En este proyecto he diseñado y desplegado una infraestructura mínima pero realista en AWS para publicar una página web accesible desde Internet.
El objetivo no era solo “levantar una máquina”, sino construir todos los componentes de red necesarios (VPC, subred, tabla de rutas, Internet Gateway, Security Group) y entender cómo interactúan entre sí para que una petición HTTP desde cualquier navegador llegue correctamente hasta mi servidor.
2. Objetivo del proyecto
- Crear una red virtual propia en AWS (VPC) con direccionamiento IP privado.
- Definir una subred pública con salida a Internet.
- Desplegar una instancia EC2 dentro de esa subred.
- Configurar un servidor web Nginx en la instancia.
- Servir una página HTML personalizada accesible mediante la IP pública de la instancia.
Con este proyecto demuestro que entiendo los conceptos básicos de networking en cloud, seguridad y despliegue de aplicaciones en AWS.
3. Arquitectura implementada
La arquitectura final se compone de los siguientes elementos.
3.1 Región y zona de disponibilidad
- Región de trabajo: por ejemplo,
eu-west-1(Irlanda). -
Dentro de esa región utilicé una Availability Zone concreta, por ejemplo
eu-west-1a, que corresponde físicamente a uno de los centros de datos de AWS.
Esto es importante porque las subredes siempre están asociadas a una AZ específica.
3.2 VPC (Virtual Private Cloud)
- Creación de una VPC propia, una red virtual aislada dentro de AWS.
- Rango de direcciones IP (CIDR):
10.0.0.0/16.
Este CIDR proporciona un espacio amplio de IPs privadas (65.536 direcciones) que puedo subdividir en varias subredes. La VPC actúa como el “barrio” donde vivirán mis recursos (instancias, bases de datos, etc.), aislado de otras VPC y de la red pública salvo que yo lo permita.
3.3 Subred pública
- CIDR de la subred:
10.0.1.0/24. - Asociada a la AZ:
eu-west-1a.
Esta subred es el “segmento de red” donde coloqué la instancia EC2 que actúa como servidor web y que necesita ser accesible desde Internet.
3.4 Internet Gateway (IGW)
Para permitir que los recursos de mi VPC se comuniquen con Internet, creé y asocié un Internet Gateway a la VPC.
El Internet Gateway es la puerta de entrada y salida entre mi red privada (VPC) y la red pública (Internet). Sin este componente, aunque una instancia tuviera IP pública, no habría una ruta válida hacia Internet.
3.5 Route Table (tabla de rutas)
Configuré una tabla de rutas asociada a la subred pública con:
-
Ruta local (creada automáticamente):
10.0.0.0/16 → local, que permite la comunicación interna dentro de la VPC. -
Ruta por defecto hacia Internet:
0.0.0.0/0 → Internet Gateway.
Esta ruta por defecto indica que todo el tráfico dirigido a direcciones fuera de la red privada debe enviarse al Internet Gateway. Es esta configuración la que convierte a la subred en “pública”.
3.6 Security Group (firewall a nivel de instancia)
Creé un Security Group específico para el servidor web. Es un firewall lógico que se aplica a nivel de instancia.
Reglas de entrada (Inbound):
-
SSH (puerto 22) desde
0.0.0.0/0.
Permite gestionar la instancia remotamente mediante SSH. En un entorno real, esto se limitaría a una IP concreta, pero en este proyecto lo dejé más abierto por simplicidad. -
HTTP (puerto 80) desde
0.0.0.0/0.
Permite que cualquier usuario pueda acceder a la página web desde su navegador.
Reglas de salida (Outbound):
- Tráfico saliente permitido a cualquier destino (configuración por defecto), necesario para que la instancia pueda descargar paquetes e instalar software.
3.7 Instancia EC2 (servidor virtual)
A continuación desplegué una instancia EC2 dentro de la subred pública:
- Sistema operativo: Amazon Linux 2023.
- Tipo de instancia:
t3.micro(válida para el free tier y suficiente para pruebas). - Red:
- VPC: la VPC creada en el proyecto.
- Subred: la subred pública
10.0.1.0/24. - IP pública: asignación automática habilitada.
- Security Group: el configurado con SSH + HTTP.
De esta forma dispongo de un servidor Linux en la nube, dentro de mi propia red, con acceso controlado desde Internet.
3.8 Servidor web Nginx y despliegue de página HTML
Una vez creada la instancia, me conecté mediante SSH desde mi equipo a la IP pública de la EC2:
ssh -i clave-mini-proyecto.pem ec2-user@IP_PUBLICA
(Nombre de usuario por defecto para Amazon Linux: ec2-user).
1. Instalación de Nginx:
sudo dnf install nginx -y
2. Habilitar e iniciar el servicio:
sudo systemctl enable nginx
sudo systemctl start nginx
Con esto, Nginx se inicia automáticamente en cada arranque y empieza a escuchar en el puerto 80.
3. Crear página web personalizada:
sudo bash -c 'echo "<h1>Hola AWS - Proyecto 1</h1>" > /usr/share/nginx/html/index.html'
De esta forma, la ruta por defecto (/) de Nginx devuelve una página HTML simple
con el mensaje "Hola AWS - Proyecto 1".
4. Verificación desde el navegador:
http://IP_PUBLICA_DE_LA_INSTANCIA
La petición viaja por Internet, entra en mi VPC a través del Internet Gateway, llega a la subred pública, atraviesa el Security Group (que permite el puerto 80) y finalmente Nginx responde con la página HTML.
4. Flujo completo de una petición HTTP
Cuando un usuario abre la IP pública de mi servidor en su navegador:
- El navegador envía una petición HTTP a la IP pública de la instancia EC2 en el puerto 80.
- El tráfico viaja por Internet hasta la infraestructura de AWS.
- En AWS, la petición entra por el Internet Gateway asociado a mi VPC.
- La tabla de rutas de la subred pública decide que ese tráfico debe ir a la instancia EC2 que tiene esa IP.
- El Security Group comprueba las reglas de entrada y permite el tráfico HTTP en el puerto 80.
- El sistema operativo de la instancia entrega la petición al proceso de Nginx.
- Nginx responde devolviendo el contenido del archivo
index.html. - La respuesta sigue el camino inverso hasta el navegador del usuario, que muestra la página.
5. Buenas prácticas aplicadas y lecciones aprendidas
Con este proyecto he trabajado de forma práctica varios conceptos fundamentales de Cloud:
- Diseño de redes en AWS: creación de una VPC con espacio de direcciones IP personalizado, definición de subred pública y configuración de tablas de rutas.
-
Conectividad a Internet: uso de un Internet Gateway y de una ruta por defecto
0.0.0.0/0para proporcionar salida a Internet a una subred concreta. - Seguridad a nivel de red: configuración de Security Groups para limitar qué puertos están expuestos y a qué tipo de tráfico.
- Compute en la nube: despliegue y administración de una instancia EC2 con Linux, conexión por SSH y gestión de servicios (Nginx).
- Servidor web básico: instalación, configuración mínima y despliegue de contenido estático con Nginx.
Este primer proyecto sienta las bases para arquitecturas más complejas: separar subredes públicas y privadas, añadir balanceadores de carga, bases de datos en subred privada, autoescalado, etc.