如何在 Hashicorp Terraform 中配置环境变量

Nea*_*eal 7 terraform terraform-provider-azure

我对 Terraform 还是很陌生,尽管我已经浏览了 Hashicorp 网站上提供的所有教学模块。

目前,我正在努力理解如何设置环境变量。我知道如何在 main.tf config ( access_key = "${var.access_key}") 中引用变量,并且我知道如何将该访问密钥保存到一个单独的文件并引用它,但是我不明白(并且找不到任何文档/说明) 是如何设置环境变量,因此我不必将访问密钥保存到文件中。

有谁知道如何最好地做到这一点?

yda*_*coR 11

有些提供商允许您直接通过环境变量设置提供商凭据/配置。例如,对于 AWS 提供商,您可以使用AWS 提供商文档中提到的AWS 开发工具包环境变量

您可以通过环境变量 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 提供凭证,分别代表您的 AWS 访问密钥和 AWS 密钥。

示例用法如下所示:

$ export AWS_ACCESS_KEY_ID="anaccesskey"
$ export AWS_SECRET_ACCESS_KEY="asecretkey"
$ export AWS_DEFAULT_REGION="us-west-2"
$ terraform plan
Run Code Online (Sandbox Code Playgroud)

对于Azure 提供程序,大多数提供程序配置可以通过环境变量设置,而无需在提供程序配置中定义:

$ export ARM_CLIENT_ID="aclientid"
$ export ARM_SUBSCRIPTION_ID="asubscriptionid"
$ export ARM_TENANT_ID="atenantid"
$ terraform plan
Run Code Online (Sandbox Code Playgroud)

在更一般的情况下,Terraform 将自动加载任何以TF_VAR_.

所以如果你有这样的事情:

variable "foo" {}
Run Code Online (Sandbox Code Playgroud)

您可以通过导出环境变量来设置该值TF_VAR_foo

export TF_VAR_foo=bar
Run Code Online (Sandbox Code Playgroud)


pra*_*eep 8

Terraform 可以为 AWS 推断以下环境变量

export AWS_ACCESS_KEY_ID="anaccesskey"
export AWS_SECRET_ACCESS_KEY="asecretkey"
Run Code Online (Sandbox Code Playgroud)

参考:https : //www.terraform.io/docs/providers/aws/#environment-variables

但我建议尝试使用AWS Profile. 您可以将凭据添加到~/.aws/credentials文件中,例如

[myprofile]
aws_access_key_id     = anaccesskey
aws_secret_access_key = asecretkey
Run Code Online (Sandbox Code Playgroud)

然后你可以设置环境变量export AWS_PROFILE=myprofile。现在,如果您从此 shell 运行 terraform,它应该选择myprofile.

此外,您可以让您的AWS Provider代码如下:

provider "aws" {
  profile = "myprofile"
  region  = "${var.region}"
}
Run Code Online (Sandbox Code Playgroud)

根据我的经验,使用 AWS 进行交互profile比在每个 shell 上设置环境变量更容易且更好。

您可以在此处参考示例https://github.com/pradeepbhadani/tf-examples/blob/master/ex2/provider.tf

希望这可以帮助。