Proyecto 3 – Portfolio estático en Amazon S3
Este portfolio está formado por varias páginas HTML muy sencillas. Lo interesante del proyecto no es el frontend, sino cómo lo he desplegado y publicado usando servicios de Amazon Web Services.
1. Qué problema quería resolver en Cloud
Después de hacer varios mini–proyectos en AWS, necesitaba una forma simple de publicarlos y explicarlos sin montar un backend ni servidores adicionales. La solución era un sitio estático: solo HTML y CSS, pero desplegado de forma profesional en la nube.
El objetivo Cloud es practicar el ciclo completo: desarrollo local → despliegue en AWS → acceso público con URL estable.
2. Arquitectura en AWS
A nivel de arquitectura, este proyecto es un frontend estático servido desde Amazon S3, con opción de evolucionar a CloudFront + dominio propio.
2.1 Bucket S3 con Static Website Hosting
- Creo un bucket dedicado, por ejemplo:
pablo-cloud-portfolio. - Activo la opción “Static website hosting” en la pestaña de propiedades.
- Defino los documentos:
- Index document:
index.html - Error document: (opcional)
error.html
- Index document:
-
Subo todos los ficheros estáticos:
index.html,proyectosCloud.html,project-ec2.html,project-notes.html,project-portfolio.html,about.html,contact.html, etc.
Con esto, S3 me da una URL de sitio web del estilo:
http://pablo-cloud-portfolio.s3-website-eu-west-1.amazonaws.com
2.2 Seguridad y acceso público controlado
Como necesito que cualquiera pueda ver el portfolio, pero solo en modo lectura, configuro:
- El bucket con bloqueo de acceso público desactivado solo para este caso concreto.
- Una política de bucket que permite
s3:GetObjecta todo el mundo, pero sin exponer nada más.
Ejemplo de política (simplificada):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadForWebsite",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::pablo-cloud-portfolio/*"
}
]
}
De esta forma el bucket sigue siendo gestionado por mí, pero los objetos estáticos se pueden leer desde Internet como si fuesen archivos de un hosting tradicional.
2.3 (Opcional) CloudFront + dominio propio + HTTPS
El diseño del proyecto está pensado para poder crecer hacia una arquitectura más completa:
- Crear una distribución de Amazon CloudFront con origen en el bucket S3.
- Conectar un dominio propio (por ejemplo, comprado en IONOS o similar) a CloudFront mediante un CNAME.
- Emitir un certificado TLS en AWS Certificate Manager para servir el portfolio por
HTTPS.
Ahora mismo la versión mínima funciona con la URL de S3, pero la arquitectura Cloud ya está pensada para dar el siguiente paso sin tocar el código.
3. Flujo de despliegue en la nube
Aunque el código sea muy sencillo (ficheros HTML y CSS), he seguido un flujo de despliegue típico en Cloud:
-
Desarrollo local
Trabajo en local con los ficheros HTML/CSS (portada, lista de proyectos, detalle de cada proyecto, about, contacto). -
Empaquetado mínimo
Una vez que todo se ve bien en el navegador local, agrupo los ficheros en una carpeta lista para subir a S3. -
Subida al bucket S3
Desde la consola de AWS (o con CLI) subo los ficheros al bucketpablo-cloud-portfolio, sobrescribiendo la versión anterior si estoy desplegando cambios. -
Prueba en la URL de S3
Abro la URL del sitio estático de S3 y verifico:- Que el
index.htmlcarga correctamente. - Que la navegación entre páginas funciona con rutas relativas.
- Que no hay errores 403/404 por permisos o nombres de archivo.
- Que el
-
Preparado para CI/CD
Este flujo ahora es manual, pero está preparado para automatizarlo con:GitHub ActionsoAWS CodePipelineque desplieguen al bucket en cada push.
4. Cómo interactúa un usuario (vista Cloud)
Desde el punto de vista de la infraestructura Cloud, la interacción es:
- El usuario escribe la URL del portfolio (endpoint de S3 o dominio propio).
-
La petición llega al servicio de Static Website Hosting de S3, que sirve el fichero
index.htmlalmacenado como objeto en el bucket. - Cuando navega a otra sección (proyectos, detalle del EC2, serverless, etc.), el navegador solicita otros ficheros HTML/CSS al mismo bucket S3.
- No hay servidores que mantener, ni procesos que reiniciar: S3 solo responde con archivos estáticos de forma altamente disponible.
- Si más adelante añado CloudFront, las peticiones pasarán por la CDN, mejorando latencia y añadiendo HTTPS sin cambiar nada en el código del sitio.
5. Lecciones Cloud del proyecto
- Menos a veces es más: para un portfolio o frontends sencillos, S3 como hosting estático es suficiente y muy barato.
- Separar código y despliegue: aunque solo sean HTML/CSS, el despliegue sigue un flujo Cloud real (bucket, permisos, hosting, URL).
- Seguridad mínima pero clara:s3:GetObject público; todo lo demás sigue protegido por IAM.
- Arquitectura escalable: