问题描述
想要了解如何从命令行设置Terraform Cloud的环境变量。他已经创建了一个项目,并希望能够通过命令行来设置这些环境变量。
解决方案
请注意以下操作可能会因版本差异而有所不同。使用前务必做好备份。
使用Terraform Cloud提供者管理工作区配置
您可以使用Terraform Cloud提供者来管理Terraform Cloud中的工作区配置,就像使用Terraform管理任何其他基础架构对象一样。虽然提供者的名称是tfe
,但它既适用于管理Terraform Enterprise,也适用于管理Terraform Cloud。以下是如何使用tfe_variable
资源类型管理工作区的Terraform变量和环境变量:
- 首先,您需要在您的Terraform配置中定义
provider "tfe"
块,用于指定Terraform Cloud的主机名。
hcl
provider "tfe" {
hostname = "app.terraform.io" # Terraform Cloud的主机名
}
- 然后,您可以使用
tfe_variable
资源类型来管理Terraform变量和环境变量。例如,您可以创建一个名为test
的变量:
“`hcl
variable “environment_variables” {
type = map(string)
}
variable “workspace_id” {
type = string
}
resource “tfe_variable” “test” {
for_each = var.environment_variables
key = each.key
value = each.value
category = “env”
workspace_id = var.workspace_id
}
“`
- 为了在命令行中使用这个配置,您可以将变量值编码为一个JSON文件(例如
azure.tfvars.json
),然后通过terraform apply
命令来应用配置:
json
{
"workspace_id": "organization/workspace",
"environment_variables": {
"ARM_CLIENT_ID": "...",
"ARM_CLIENT_SECRET": "...",
"ARM_SUBSCRIPTION_ID": "...",
"ARM_TENANT_ID": "..."
}
}
执行以下命令来应用配置:
sh
terraform apply -var-file=azure.tfvars.json
通过上述步骤,您可以使用Terraform Cloud提供者来管理工作区的变量和环境变量,实现从命令行设置Terraform Cloud环境变量的目标。
在考虑自动化这类操作时,需要考虑这个“早期” Terraform 配置的状态快照将保存在哪里。您可以为此特殊配置创建一个额外的Terraform Cloud工作区,并确保配置不使用远程操作,以便本地运行这个工作区可以安排其他工作区支持远程操作。
请注意,使用Terraform Cloud提供者进行管理时,如果项目已经存在,可能会出现一些困难。与其他Terraform资源不同,如果项目已经存在,它会导致错误。通常情况下,您期望能够覆盖现有变量的最新版本,因为对我来说,变量不像服务器那样。我期望只是更新/覆盖。与Azure DevOps类似的共享密钥或变量库的缺失使得完全利用这一点有点棘手。