在我的 CI 环境(Bitbucket 管道)中,我正在尝试使用新的 Terraform Cloud 远程状态管理。公告视频明确指出您可以使用环境变量而不是文件.terraformrc
来传递 API 令牌。但是,我找不到有关我必须使用的确切环境变量的任何文档。
我关注了入门有关 Terraform Cloud 的指南,但是他们也没有提及有关环境变量的任何内容。
我还查看了Terraform 文档,但也没有提到如何设置(或覆盖)cli 配置。
答案1
这可以通过以下形式的环境变量来完成TF_TOKEN_${sanitized_hostname}
。
例如对于 Terraform Cloud:
export TF_TOKEN_app_terraform_io=xxxxxx.atlasv1.zzzzzzzzzzzzz
terraform apply
这优先于任何terraform login
或.tfrc
文件。它记录在开发人员 CLI 配置页。
答案2
如果您使用Terraform 云/企业提供商,您可以设置TFE_TOKEN
环境变量。
或者,您可以在构建期间临时写入 terraform 配置文件,例如:
# Set environment variable
MY_TF_TOKEN='abc.123.abc123'
# Create .terraformrc with credential config for user
cat >~/.terraformrc <<EOL
credentials "app.terraform.io" {
token = "${TF_CLOUD_TOKEN}"
}
EOL
否则,你可以(但不推荐)操纵credentials.tfrc.json
in ~/.terraform.d
,但要注意,在运行 terraform 命令时,这可能会被覆盖。例如使用杰奇在bash中:
# Set environment variable
MY_TF_TOKEN='abc.123.abc123'
# Create json from environment variable and (over)write expected file
jq --arg token $MY_TF_TOKEN \
'{"credentials":{"app.terraform.io":{"token": $token}}}' \
> ~/.terraform.d/credentials.tfrc.json
例如运行时你应该得到以下信息cat ~/.terraform.d/credentials.tfrc.json
:
{
"credentials": {
"app.terraform.io": {
"token": "abc.123.abc123"
}
}
}
答案3
在视频中,他们没有指定 terraform 是否需要某个变量。但是,您可以做的一件事是使用该方法传递任意环境变量,只要它们的名称以 TF_VAR_ 开头(例如:TF_VAR_myvar)。然后在您的 terraform 文件(在此示例中为 terraformrc 文件)中使用此行声明变量:
variable myvar {}
然后,您可以使用以下语法来使用它,而不是硬编码的令牌值:${var.myvar}
答案4
我想通过两篇文章为这个主题做出贡献,这两篇文章帮助我配置 Azure Pipelines 以登录 Terraform Cloud 并下载托管在 Terraform Cloud 中的私有注册表中的模块。
https://blog.devgenius.io/how-to-configure-azure-devops-with-terraform-enterprise-cac1bbd9810b https://mikehacker.dev/blog/configuring-terraform-enterprise-credentials-to-work-with-azure-devops/