在 Terraform 远程后端使用变量

Posted

技术标签:

【中文标题】在 Terraform 远程后端使用变量【英文标题】:Use variable in Terraform remote backend 【发布时间】:2019-11-11 18:27:32 【问题描述】:
# Using a single workspace:
terraform 
  backend "remote" 
    hostname = "app.terraform.io"
    organization = "company"

    workspaces 
      name = "my-app-prod"
    
  

对于 Terraform 远程后端,是否可以使用变量来指定组织/工作区名称,而不是那里的硬编码值?

Terraform documentation 似乎也没有提到任何相关的事情。

【问题讨论】:

【参考方案1】:

backend configuration documentation 对此进行了一些详细介绍。主要需要注意的是:

只能指定一个后端,并且配置可能不包含插值。 Terraform 将对此进行验证。

如果您想让它易于配置,那么您可以将partial configuration 用于静态部分(例如后端的类型,例如 S3),然后在运行时通过环境变量或命令行标志以交互方式提供配置。

我个人将 Terraform 操作包装在一个小型 shell 脚本中,该脚本运行 terraform init 并带有命令行标志,该命令行标志使用适当的 S3 存储桶(例如,每个项目和 AWS 账户使用不同的存储桶)并确保状态文件位置与路径匹配到我正在处理的目录。

【讨论】:

【参考方案2】:

我遇到了同样的问题,并且对需要额外的初始化/包装脚本感到非常失望。前段时间我开始使用 Terragrunt。

值得一看 Terragrunt,因为它缩小了 Terraform 之间的差距,并且在某些方面缺乏使用变量,例如对于远程后端配置: https://terragrunt.gruntwork.io/docs/getting-started/quick-start/#keep-your-backend-configuration-dry

【讨论】:

以上是关于在 Terraform 远程后端使用变量的主要内容,如果未能解决你的问题,请参考以下文章

无法使用“terraform init -reconfigure”将 S3 后端中的 Terraform 远程状态转换为本地状态

Terraform 用户 TF_VAR 不工作的嵌套模块

Terraform 参考为远程后端创建了 S3 存储桶

远程 terraform 模块的输出变量

Terraform:使用封闭的网络连接

Terraform AWS 客户端***