Terraform 从环境中读取变量

Terraform to read variables from environment

我写了一个带有变量定义的 terraform 配置,如:

variable "GOOGLE_CLOUD_REGION" {
  type = string
}

当我 运行 terraform plan 我被要求填写这个变量,即使这个变量是在我的环境中设置的。

有没有办法告诉 terraform 使用当前的环境变量?还是我必须导出它们并以某种方式手动将它们逐一传递?

您可以定义环境变量 TF_VAR_GOOGLE_CLOUD_REGION 来设置该变量。

如果您使用的是 bash,它可能看起来像这样:

export TF_VAR_GOOGLE_CLOUD_REGION="$GOOGLE_CLOUD_REGION"
terraform apply ...

From Environment Variables under Configuration Language: Input Variables.

As a fallback for the other ways of defining variables, Terraform searches the environment of its own process for environment variables named TF_VAR_ followed by the name of a declared variable.

This can be useful when running Terraform in automation, or when running a sequence of Terraform commands in succession with the same variables. For example, at a bash prompt on a Unix system:

$ export TF_VAR_image_id=ami-abc123 $ terraform plan ...

You can create a file that ends with .tfvars or .tfvars.json 然后当你 运行 a plan 你指定那个文件:

terraform apply -var-file="example.tfvars"

如果您将文件命名为 terraform.tfvarsterraform.tfvars.json 或者文件名以 .auto.tfvars.auto.tfvars.json 结尾 然后 Terraform 自动 加载变量定义文件,当你 运行 a plan.

时你不必手动指定它

terraform.tfvars 文件的示例:

first_env_var = "environment_variable_one"
second_env_var = "environment_variable_two"

terraform.tfvars.json 文件的示例:

{
  "image_id": "ami-abc123",
  "availability_zone_names": ["us-west-1a", "us-west-1c"]
}

我会通过在项目目录中创建一个 variables.tf 文件来解决这个问题。使用所需的变量块,您可以指定默认值:

variable "GOOGLE_CLOUD_REGION" {
type = string
default = "us-west1"
}

这将用作每个 运行 期间的默认值,并且不会提示您。