如何通过Terraform实现AWS CloudFront分发的缓存失效?
结论
可以实现,你在CloudFront分发的文档中没有找到相关说明是因为缓存失效是独立的资源,没有和分发配置写在同一文档下,目前有两种常用实现方式:
方案1:使用原生aws_cloudfront_invalidation资源(推荐)
这是AWS Provider官方提供的独立资源,适用于绝大多数场景,配置示例如下:
resource "aws_cloudfront_distribution" "example" { # 此处保留你原有CloudFront分发的全部配置 } resource "aws_cloudfront_invalidation" "cache_purge" { distribution_id = aws_cloudfront_distribution.example.id paths = [ "/*", # 失效所有路径,也可指定具体路径比如/static/*、/index.html ] # 可选配置:添加后每次执行terraform apply都会自动触发一次失效,不需要可移除 triggers = { run_timestamp = timestamp() } }
参数说明:
distribution_id关联你要操作的CloudFront分发IDpaths填写需要失效的缓存路径,支持通配符*
方案2:通过local-exec预置器调用AWS CLI实现(灵活自定义场景用)
如果需要搭配自定义触发逻辑(比如仅在分发配置更新后触发、仅在资源销毁时触发等),可以用该方案,配置示例如下:
resource "aws_cloudfront_distribution" "example" { # 此处保留你原有CloudFront分发的全部配置 provisioner "local-exec" { command = "aws cloudfront create-invalidation --distribution-id ${self.id} --paths '/*'" # 可添加when = destroy等参数自定义触发时机 } }
注意:该方案需要执行Terraform的环境已经安装并配置好AWS CLI,且凭证拥有CloudFront失效操作的相关权限。
注意事项
- CloudFront每月提供1000条免费失效路径额度,超出部分会产生额外费用,建议按需指定失效路径,避免直接全量失效产生不必要的成本
- 缓存失效任务全局生效通常需要5~15分钟
- 你也可以通过
depends_on参数配置失效任务和其他资源的依赖关系,精准控制触发时机
内容的提问来源于stack exchange,提问作者Kavin404
相关产品推荐
相关产品推荐

