如何使用 Terraform 使 AWS CloudFront Distribution 缓存失效?
Posted
技术标签:
【中文标题】如何使用 Terraform 使 AWS CloudFront Distribution 缓存失效?【英文标题】:How can I invalidate AWS CloudFront Distribution cache using Terraform? 【发布时间】:2021-12-16 01:18:36 【问题描述】:我正在寻找一种使用 Terraform 使 CloudFront 分配缓存失效的方法。
我在docs 中找不到任何信息。
这可能吗?如果可以,怎么做?
【问题讨论】:
你也许可以运行一个local-exec
配置器来做到这一点,但这是我的想法。
local-exec 运行 aws cli 命令?
嗯,是的,如果你想用 Terraform 做这件事,我想不出别的办法。我也使用 AWS CLI 命令在 CI/CD 步骤之一中完成了缓存失效。也许你会得到比这更好的答案。 :) 我想知道是否有人做了不同的事情。 :)
我们是否计划在每次 TF 运行时使缓存中的所有文件失效?不确定我们使用的是什么来源,但是假设/如果您的来源是 S3 存储桶,您可以在 S3 事件通知和 Lambda 的帮助下自动设置一些东西,以便每当文件更改时触发 lambda 以使同一文件无效。更多信息 - medium.com/@yagonobre/… 否则,Marko 指出的 local-exec 是一个选项。
【参考方案1】:
aws_cloudfront_distribution
或 aws_cloudfront_cache_policy
资源中没有内置支持缓存失效。
作为最后的手段,可以使用local_exec
配置器。
根据我的经验,通常情况下,缓存在 CI/CD 管道中使用 AWS CLI create-invalidation
命令无效。
但是,如果这必须在 Terraform 中完成,您可以在创建/更新资源后使用 local-exec
配置器在运行 Terraform 的本地计算机上运行命令。
我们可以使用它来运行上面的 CLI 失效命令来使分发缓存失效。
使用 self
对象访问 CloudFront 分配的所有属性,包括 self.id
引用 CloudFront 分配 ID 以进行失效
例子:
resource "aws_cloudfront_distribution" "s3_distribution"
# ...
provisioner "local-exec"
command = "aws cloudfront create-invalidation --distribution-id $self.id --paths '...'"
【讨论】:
以上是关于如何使用 Terraform 使 AWS CloudFront Distribution 缓存失效?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Terraform 将文件上传到 AWS Secrets Manager
如何使用 Terraform 配置 AWS EKS 自动扩缩器?
如何使 Terraform archive_file 资源获取对源文件的更改?