← Tutoriales
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.

1 min de lectura

  • #aws
  • #terraform
  • #cloudfront
  • #s3

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

  1. S3 privado con el contenido generado (dist/).
  2. CloudFront con Origin Access Control (OAC), así el bucket nunca es público.
  3. ACM para el certificado (en us-east-1) y Route 53 para el DNS.
  4. 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]