【问题标题】:How can I invalidate AWS CloudFront Distribution cache using Terraform?如何使用 Terraform 使 AWS CloudFront Distribution 缓存失效?
【发布时间】: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 是一个选项。

标签: amazon-web-services terraform amazon-cloudfront terraform-provider-aws


【解决方案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 '...'"
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 2012-10-23
    • 2019-04-25
    • 2022-01-23
    • 1970-01-01
    • 2018-11-17
    • 2021-01-19
    相关资源
    最近更新 更多