S3 + CloudFront como default para sites estáticos
Migrar o Scholion do Azure Static Web Apps para AWS S3 + CloudFront levou uma tarde. Nesse processo percebi que o desenho já é o default comoditizado: bucket privado atrás de CDN, ACM, uma função no edge.
Os componentes:
- S3 privado, com public access block completo. O bucket guarda os arquivos e ninguém fala com ele diretamente.
- Origin Access Control (OAC). Substituiu a velha OAI. Só aquela distribution específica pode ler o bucket, identificada pelo
AWS:SourceArnna bucket policy. - CloudFront Function. JS nos edges, com runtime mais leve que Lambda@Edge. Reescreve
/notes/para/notes/index.htmlantes do cache. Hugo gera pretty URLs, S3 não serve diretórios, o CDN faz a ponte. 10M invocações grátis por mês. - ACM wildcard. Um cert para
*.thluiz.com, renova automaticamente via CNAME de validação. Grátis. - Cache split no deploy: HTML com
max-age=3600, assets estáticos commax-age=31536000, immutable. Hugo gera nomes estáveis para CSS/JS/imagens, então oimmutableé literal. Invalidar/*a cada push custa cêntimos e poupa raciocínio sobre versionamento.
Comparação#
- Azure Static Web Apps: em PaaS, quando algo quebra fora do teu código, os caminhos de diagnóstico e correção são os que o provider oferece. Se o suporte é lento ou ausente, o site fica offline e você não tem como destravar. O GitHub Actions continua a reportar deploy com sucesso enquanto o CDN serve vazio.
- GitHub Pages: sem controle de
cache-control, sem regras de rewrite, sem cert no apex sem salto. Serve para READMEs. - Netlify / Vercel / Cloudflare Pages: o bastidor é o mesmo padrão (object store + CDN) com UI por cima e política de free tier mutável. A UI custa dependência de uma política que eles podem mudar.
Por que S3 + CloudFront venceu#
O acoplamento é baixo. Cada componente é comoditizado: GCS + Cloud CDN fazem o mesmo, R2 + Cloudflare Workers fazem o mesmo. Migrar para outro provider é trocar um script, não reescrever uma aplicação. O lock-in está na automação (workflow YAML, CLI), não na arquitetura.
Custo estimado do Scholion: ~$0.10/mês. Free Tier AWS cobre a maior parte, o restante é tráfego residual de um blog pessoal. O custo zero da Azure custa caro quando não há suporte adequado.
