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

jma*_*ori 5 terraform

Terraform中定义AWS提供程序时,

provider "aws" {
    access_key = "<AWS_ACCESS_KEY>"
    secret_key = "<AWS_SECRET_KEY>"
    region = "<AWS_REGION>"
}
Run Code Online (Sandbox Code Playgroud)

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

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
Run Code Online (Sandbox Code Playgroud)

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

provider "aws" {
    access_key = env.AWS_ACCESS_KEY_ID
    secret_key = env.AWS_SECRET_KEY_ID
    region = env.AWS_REGION
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*mie 8

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

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

variable "super_secret_variable" {
    type = "string
}
Run Code Online (Sandbox Code Playgroud)

然后根据约定,我将必须在我的环境变量前加上TF_VAR_作为前缀:

TF_VAR_super_secret_variable
Run Code Online (Sandbox Code Playgroud)

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

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

> terraform apply -var super_secret_variable=$super_secret_variable
Run Code Online (Sandbox Code Playgroud)

这不需要在其前面加上前缀,因此,如果它们不能更改,则可能是最好的做法。

你可以阅读更多这里的文档。