Configuration 在Terraform配置中获取环境变量?

Configuration 在Terraform配置中获取环境变量?,configuration,terraform,Configuration,Terraform,我有两个环境变量。一个是TF\u VAR\u UN,另一个是TF\u VAR\u PW。然后我有一个地形文件,看起来像这样 resource "google_container_cluster" "primary" { name = "marcellus-wallace" zone = "us-central1-a" initial_node_count = 3 master_auth { username = ${env.TF_VAR_UN}

我有两个环境变量。一个是
TF\u VAR\u UN
,另一个是
TF\u VAR\u PW
。然后我有一个地形文件,看起来像这样

resource "google_container_cluster" "primary" {
    name = "marcellus-wallace"
    zone = "us-central1-a"
    initial_node_count = 3

    master_auth {
        username = ${env.TF_VAR_UN}
        password = ${env.TF_VAR_PW}
    }

    node_config {
        oauth_scopes = [
            "https://www.googleapis.com/auth/compute",
            "https://www.googleapis.com/auth/devstorage.read_only",
            "https://www.googleapis.com/auth/logging.write",
            "https://www.googleapis.com/auth/monitoring"
        ]
    }
}

我想用环境变量
TF_VAR_UN
TF_VAR_PW
替换的两个值是username和password。我尝试了上面所示的方法,但没有成功,我还尝试了其他一些方法,但总是遇到语法问题。

我会尝试类似的方法,这似乎更接近实际情况

CLI命令如下所示

TF_VAR_UN=foo TF_VAR_PW=bar terraform apply

要使用变量,它需要用“”包装 例如:

username=“${var.UN}”


使用插值语法会对terraform
v0.12.18
发出警告。现在不需要使用插值语法。您可以将其引用为
var.hello

注意事项: 从语言的角度理解的一件重要事情是,不能使用环境变量声明变量。只能使用环境变量为脚本中声明的变量赋值。例如,假设您有以下.tf脚本


变量“hello”{
类型=字符串
}


现在,如果环境中有一个变量TF_VAR_hello=“foobar”,那么在运行时,变量hello将具有值“foobar”。如果在未声明变量的情况下分配变量,则不会产生任何效果。

大多数提供程序使用:

DefaultFunc:schema.EnvDefaultFunc(“


您可以执行以下操作以使其正常工作

1.在terraform配置中声明要用作环境变量的变量。 -->变量“db_password”{type=string}

  • 在要使用此变量的资源部分,将其更改为 -->“db_密码”:“${var.db_密码}”
  • 3.导出环境变量。 -->导出TF_VAR_db_password=“###password#”


    4.terraform plan或apply

    后面的
    terraform apply
    部分让我对TF_VARS感到困惑`你也可以
    导出TF_VAR_你的_VAR
    或者在一个点文件中,比如
    .profile
    ,这是让shell为单个命令${VAR.UN}>“${VAR.UN}”${VAR.PW}>“${VAR.PW}”设置环境变量的正常语法“@Jeremy好奇,有什么问题吗?原始海报指的是环境变量,而不是地形变量。因此,您的答案是不够的。HCL 2不再需要这种语法。在HCL 2中,您可以省略引号,只需在
    TF_VAR_UN=foo TF_VAR_PW=bar terraform apply