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

时间:2019-03-07 20:18:15

标签: terraform terraform-provider-azure

尽管我已经遍历了Hashicorp网站上的所有教学模块,但我对Terraform还是很陌生。

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

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

4 个答案:

答案 0 :(得分:3)

某些提供商都需要您直接通过环境变量设置提供商凭据/配置。例如,对于AWS提供程序,您可以使用AWS SDK environment variables中提到的AWS provider documentation

  

您可以通过AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY这两个环境变量(分别代表您的AWS Access Key和AWS Secret Key)提供凭据。

示例用法如下:

$ export AWS_ACCESS_KEY_ID="anaccesskey"
$ export AWS_SECRET_ACCESS_KEY="asecretkey"
$ export AWS_DEFAULT_REGION="us-west-2"
$ terraform plan

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

$ export ARM_CLIENT_ID="aclientid"
$ export ARM_SUBSCRIPTION_ID="asubscriptionid"
$ export ARM_TENANT_ID="atenantid"
$ terraform plan

在更一般的情况下,Terraform将自动加载任何以TF_VAR_为前缀的已定义变量。

所以,如果您有这样的事情:

variable "foo" {}

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

export TF_VAR_foo=bar

答案 1 :(得分:0)

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

export AWS_ACCESS_KEY_ID="anaccesskey"
export AWS_SECRET_ACCESS_KEY="asecretkey"

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

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

[myprofile]
aws_access_key_id     = anaccesskey
aws_secret_access_key = asecretkey

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

此外,您还可以按照以下步骤使用AWS Provider代码:

provider "aws" {
  profile = "myprofile"
  region  = "${var.region}"
}

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

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

希望这会有所帮助。

答案 2 :(得分:0)

Terraform使用环境变量的方式,从而为Terraform的所有好东西使用任意值,方法是在变量{em> any environment 之前加上TF_VAR_,然后Terraform会自动使用它。

对于您的特定用例,这意味着您可以通过设置** environment *变量access_key来设置 Terraform 变量TF_VAR_access_key

这项技术内置于Terraform本身,因此独立于任何特定的提供程序。

文档可以在https://www.terraform.io/docs/commands/environment-variables.html#tf_var_name上找到,它也适用于较旧的 Terraform版本(我已经用0.11对其进行了测试)。

答案 3 :(得分:0)

  1. 当我开始学习tf时,我使用了terraform.tfvars文件,放在其中:
aws_access_key="myaccesskey"
aws_secret_key="mysecertkey"
region='aws-region'

main.tf中:


variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "private_key_path" {}

provider "aws" {
  access_key = var.aws_access_key
  secret_key = var.aws_secret_key
  region     = var.region
}

确保两个文件都位于同一目录中。

  1. 然后我开始在Mac中使用env变量:
$ export AWS_ACCESS_KEY_ID="AWS_ACCESS_KEY_ID"
$ export AWS_SECRET_ACCESS_KEY="AWS_SECRET_ACCESS_KEY"
$ terraform plan
  1. 使用个人资料~/.aws/credentials
aws configure
AWS Access Key ID: yourID
AWS Secret Access Key: yourSecert
Default region name : aws-region
Default output format : env

希望对您有帮助!

祝你好运,地形是一件令人惊奇的事情!