在 Terraform 远程后端中使用变量
Use variable in Terraform remote backend
# Using a single workspace:
terraform {
backend "remote" {
hostname = "app.terraform.io"
organization = "company"
workspaces {
name = "my-app-prod"
}
}
}
对于 Terraform 远程后端,是否有一种方法可以使用变量来指定组织/工作区名称而不是那里的硬编码值?
Terraform documentation
似乎也没有提及任何相关内容。
backend configuration documentation 对此进行了详细介绍。主要需要注意的是:
Only one backend may be specified and the configuration may not contain interpolations. Terraform will validate this.
如果你想让它易于配置,那么你可以对静态部分使用 partial configuration(例如后端类型,如 S3),然后在 运行 时间以交互方式提供配置,通过环境变量或通过命令行标志。
我个人将 Terraform 操作包装在一个小的 shell 脚本中,该脚本 运行s terraform init
带有命令行标志,该标志使用适当的 S3 存储桶(例如,每个项目都有不同的存储桶和AWS 帐户)并确保状态文件位置与我正在处理的目录的路径匹配。
我遇到了同样的问题,对额外 init/wrapper 脚本的需求感到非常失望。前段时间开始使用Terragrunt
Terragrunt 值得一看,因为它缩小了 Terraform 与在某些点上不使用变量之间的差距,例如对于远程后端配置:
https://terragrunt.gruntwork.io/docs/getting-started/quick-start/#keep-your-backend-configuration-dry
# Using a single workspace:
terraform {
backend "remote" {
hostname = "app.terraform.io"
organization = "company"
workspaces {
name = "my-app-prod"
}
}
}
对于 Terraform 远程后端,是否有一种方法可以使用变量来指定组织/工作区名称而不是那里的硬编码值?
Terraform documentation 似乎也没有提及任何相关内容。
backend configuration documentation 对此进行了详细介绍。主要需要注意的是:
Only one backend may be specified and the configuration may not contain interpolations. Terraform will validate this.
如果你想让它易于配置,那么你可以对静态部分使用 partial configuration(例如后端类型,如 S3),然后在 运行 时间以交互方式提供配置,通过环境变量或通过命令行标志。
我个人将 Terraform 操作包装在一个小的 shell 脚本中,该脚本 运行s terraform init
带有命令行标志,该标志使用适当的 S3 存储桶(例如,每个项目都有不同的存储桶和AWS 帐户)并确保状态文件位置与我正在处理的目录的路径匹配。
我遇到了同样的问题,对额外 init/wrapper 脚本的需求感到非常失望。前段时间开始使用Terragrunt
Terragrunt 值得一看,因为它缩小了 Terraform 与在某些点上不使用变量之间的差距,例如对于远程后端配置: https://terragrunt.gruntwork.io/docs/getting-started/quick-start/#keep-your-backend-configuration-dry