CDN módulo¶
infra/modules/cdn-static-site/ empaqueta el patrón S3 privado + OAC
+ CloudFront + ACM (us-east-1) + Route53 alias para sitios estáticos.
Es el módulo usado por widget, admin, auth y docs.
Inputs principales¶
| Variable | Tipo | Notas |
|---|---|---|
name |
string | nombre lógico (widget, admin, auth, docs) |
env |
string | dev, qa, prod |
domain_name |
string | FQDN público |
hosted_zone_id |
string | Zone Route53 donde crear el alias |
kms_key_arn |
string | CMK de la plataforma para encrypt S3 |
account_id |
string | para policies S3 |
spa_mode |
bool | true → reescribe 403/404 a index.html (SPA routing) |
default_root_object |
string | normalmente index.html |
enable_waf |
bool | activa WebACL (qa/prod) |
enable_distribution |
bool | toggle para destruir tráfico sin perder bucket |
Providers requeridos:
Recursos creados¶
aws_s3_bucketprivado con versionado + SSE-KMS.aws_s3_bucket_public_access_block(todo bloqueado).aws_cloudfront_origin_access_control(OAC).aws_cloudfront_distributioncon behavior default + SPA reescrituras opcionales.aws_acm_certificateenus_east_1.aws_acm_certificate_validationcon DNS auto.aws_route53_recordalias A/AAAA.- (opcional)
aws_wafv2_web_aclregla básicaAWSManagedRulesCommonRuleSet.
SPA mode¶
Con spa_mode = true se crea una CloudFront Function que reescribe
errores 403/404 a index.html (NO el viejo custom_error_response, que
también devuelve 200 pero rompe los assets reales 404).
Outputs¶
domain_name— FQDN final.bucket_name— para sync de assets.distribution_id— para invalidations.distribution_domain_name—*.cloudfront.net(debug).
Instancias actuales (envs/dev/cdn.tf)¶
| Módulo | Dominio | spa_mode |
|---|---|---|
cdn_widget |
cdn.zen.zervizdev.com |
false (widget.js suelto) |
cdn_admin |
admin.dev.zen.zervizdev.com |
true |
cdn_auth |
auth.dev.zen.zervizdev.com |
false (3 HTMLs estáticos) |
cdn_docs (nuevo) |
docs.dev.zen.zervizdev.com |
false (MkDocs build estático) |
Cómo agregar un CDN nuevo¶
- Editar
infra/envs/dev/cdn.tfcon un nuevo bloquemodule "cdn_<name>". - Reutilizar
hosted_zone_idykms_key_arn. - Decidir
spa_modesegún si es SPA con routing client-side o sitio estático plano. - Aplicar via cd-dev.yml (push a main).
- Agregar el dominio al CNAME / DNS approval del cliente si va fuera de
*.zen.zervizdev.com.
Deploy de assets¶
Patrón estándar (también usado por widget y admin):