【问题标题】:How to override remote backend with local backend in terraform?如何在 terraform 中用本地后端覆盖远程后端?
【发布时间】:2020-05-03 15:56:10
【问题描述】:

我一直在查看 terraform docs 和 udemy course 来寻找这个问题的答案,但找不到答案。我有一个 jenkins 管道,它正在使用 terraform 构建 AWS 基础设施。这是使用通过

配置的远程后端
terraform {
  backend "s3" {}
}

块。我想为本地开发覆盖它,以便使用terraform init 生成本地状态文件。我试过运行terraform init -backend=false,但我意识到这不是我想要的,因为它也没有创建本地后端。我已经看到terraform init -backend=<file> 是一个选项,但是如果我使用它,那么我不知道在文件中放入什么来指示默认的本地后端配置。我找到了这篇文章override files,但它并没有让我相信这个功能存在于这个特定用例的 terraform 中。我想确保我以正确的方式做到这一点。如何使用 terraform 中的默认本地后端配置覆盖远程后端配置?谢谢。

【问题讨论】:

  • 附言。我首先这样做的原因是我可以针对 localstack 运行 terraform 来创建 AWS 基础设施。
  • 为什么不直接删除后端配置块?
  • 我不能,因为那会破坏 terraform 管道。
  • 您的测试可以删除它,对吧?因此,在测试作业中,您只需删除包含后端配置的文件或将块从更大的文件中取出,但不要将该更改推回。然后您的测试使用本地状态文件针对 localstack 运行。或者,为什么不使用 S3 后端并将状态文件粘贴到 localstack 的 S3 后端?
  • @ydaetskcoR 你是说在测试代码中,删除后端文件?我不想那样做,因为它似乎有潜在的问题。此外,我们不能将 localstack 中的 s3 存储桶用于 tfstate 文件,因为 s3 在我们的 AWS 环境中是不受 terraform 管理的。

标签: terraform


【解决方案1】:

您提到的 Terraform override 概念确实适用于这个用例。

您可以创建带有_override.tf 的文件,添加到覆盖的末尾元素将优先于原始文件。例如<my_existing_file>_override.tf.

您可以使用它来覆盖现有的后端配置,覆盖现有的后端基础架构,以便您可以初始化本地状态文件以用于测试/开发目的。

我会创建一个脚本并将其别名为以下值:

echo "terraform {" > backend_override.tf
echo "  backend \"local\" {" >> backend_override.tf
echo "    path = \"./\"" >> backend_override.tf
echo "  }" >> backend_override.tf
echo "}" >> backend_override.tf

记得将 *.override.tf 添加到您的 .gitignore 文件中,以免意外破坏 CI。

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 2019-11-11
    • 2020-05-17
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2019-10-22
    相关资源
    最近更新 更多