如何使用环境变量提供 Terraform Cloud API 令牌?

如何使用环境变量提供 Terraform Cloud API 令牌?

在我的 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/

相关内容