【问题标题】:Getting an Environment Variable in Terraform configuration?在 Terraform 配置中获取环境变量?
【发布时间】:2016-08-06 09:03:00
【问题描述】:

我有两个环境变量。一个是TF_VAR_UN,另一个是TF_VAR_PW。然后我有一个看起来像这样的 terraform 文件。

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_UNTF_VAR_PW 替换的两个值是用户名和密码。我尝试了上面显示的内容,但没有成功,我还玩弄了其他一些东西,但总是遇到语法问题。

【问题讨论】:

标签: configuration terraform


【解决方案1】:

我会尝试更多类似的东西,这似乎更接近documentation

variable "UN" {
  type = string
}

variable "PW" {
  type = string
}

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

  master_auth {
    username = var.UN
    password = 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"
    ]
  }
}

CLI 命令如下。

TF_VAR_UN=foo TF_VAR_PW=bar terraform apply

【讨论】:

  • 结尾的 terraform apply 部分让我对 TF_VARS 感到困惑`您也可以只使用 export TF_VAR_your_var 或在像 .profile 这样的点文件中使用
  • 这是让你的 shell 为单个命令设置环境变量的正常语法
  • ${var.UN} --> "${var.UN}" ${var.PW} --> "${var.PW}"
  • @Jeremy Curious,有什么问题?
【解决方案2】:

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

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

variable "hello" { type=string }

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

【讨论】:

    【解决方案3】:

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

    1.在 terraform 配置中声明要用作环境变量的变量。 -->变量“db_password”{类型=字符串}

    1. 在要使用此变量的资源部分中,将其更改为 -->"db_password":"${var.db_password}"

    3.导出环境变量。 -->导出 TF_VAR_db_password="##password##"

    4.terraform 计划或申请

    【讨论】:

      【解决方案4】:
      【解决方案5】:

      为了使用一个变量,它需要用“”包裹 例如:

      用户名 = "${var.UN}"

      【讨论】:

      • 原始发帖人指的是环境变量,而不是 Terraform 变量。因此,您的回答是不够的。
      • HCL 2 不再需要此语法。在 HCL 2 中,您可以省略引号而只使用var.<variable_name>
      猜你喜欢
      • 2019-07-29
      • 2021-08-08
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2021-01-14
      • 2021-02-26
      • 2011-11-27
      • 2018-01-17
      相关资源
      最近更新 更多