Terraform可以使用bash环境变量吗?

时间:2018-11-16 01:10:31

标签: terraform

在Terraform中定义 aws 提供程序时,

provider "aws" {
    access_key = "<AWS_ACCESS_KEY>"
    secret_key = "<AWS_SECRET_KEY>"
    region = "<AWS_REGION>"
}

我希望能够使用已经定义的系统变量

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY

有什么方法可以让tf文件读取环境变量? 做类似的事情,

provider "aws" {
    access_key = env.AWS_ACCESS_KEY_ID
    secret_key = env.AWS_SECRET_KEY_ID
    region = env.AWS_REGION
}

2 个答案:

答案 0 :(得分:6)

是的,可以在Terraform中读取环境变量。有一种非常特定的方法必须完成。您需要使环境变量成为terraform中的变量。

例如,我想将super_secret_variable传递给terraform。我需要在terraform文件中为其创建一个变量。

variable "super_secret_variable" {
    type = "string
}

然后根据约定,我必须在环境变量前添加 TF_VAR _ 像这样:

TF_VAR_super_secret_variable

然后,terraform将自动检测并使用它。 Terraform处理器基于特定顺序的变量,该顺序为-var选项,-var-file选项,环境变量,如果在tf文件中定义,则为默认值。

或者,您也可以通过CLI传递环境变量以像这样在terraform中设置变量。

> terraform apply -var super_secret_variable=$super_secret_variable

这不需要您给它加上前缀,因此,如果它们不能更改,则可能是您的最佳做法。

您可以在文档中阅读更多here

答案 1 :(得分:2)

您可以像这样使用裸露的提供程序:

provider "aws" {}

并确保环境变量在您的Shell会话中可用:

$ export AWS_ACCESS_KEY_ID="your-key-id"
$ export AWS_SECRET_ACCESS_KEY="your-secret-key"
$ export AWS_DEFAULT_REGION="your-region"

然后,检查以上各项是否有效:

terraform plan

如果您满足计划要求,则可以执行terraform apply进行更改。

有关更多详细信息:https://www.terraform.io/docs/providers/aws/#environment-variables