如何使用 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_distributionaws_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 资源获取对源文件的更改?

如何 Terraform 创建和验证 AWS 证书

如何使用 AWS Lambda 脚本通过 Terraform 部署 AWS 基础设施

如何在 local-exec 配置程序中从 terraform 继承 aws 凭据