TutorialesIntermedio
Hosting estático en AWS con S3, CloudFront y Terraform
Cómo servir un sitio estático con HTTPS, caché global y despliegues sin llaves de acceso.
Borrador de arranque. Este post sirve para probar el diseño. Reemplázalo con tu versión final.
Un blog estático no necesita servidores: archivos en S3, CloudFront delante y un certificado de ACM. El costo ronda los centavos al mes y la superficie de ataque es mínima.
Arquitectura
- S3 privado con el contenido generado (
dist/). - CloudFront con Origin Access Control (OAC), así el bucket nunca es público.
- ACM para el certificado (en
us-east-1) y Route 53 para el DNS. - GitHub Actions con OIDC para desplegar sin llaves de acceso de larga duración.
El bucket, siempre privado
resource "aws_s3_bucket" "site" {
bucket = "kloudmaster-site-prod"
}
resource "aws_s3_bucket_public_access_block" "site" {
bucket = aws_s3_bucket.site.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
Publicar un cambio
npm run build
aws s3 sync dist/ "s3://$BUCKET" --delete
aws cloudfront create-invalidation --distribution-id "$DIST_ID" --paths "/*"
Qué sigue
- [Tu explicación de la política del bucket para OAC]
- [Tu función de CloudFront para reescribir
/ruta/a/ruta/index.html] - [Tu pipeline de GitHub Actions con OIDC]
