Terraform - Использование переменных среды в файлах TF

Я хотел бы использовать переменные среды в своих файлах TF. Как я могу упомянуть их в этих файлах?

Я использую облако Terraform и определяю переменные в разделе переменных среды. Это означает, что я не использую cli для выполнения команд команд терраформирования (без экспорта TF_VAR и без параметра -var или -var-file).

Я не нашел ответа на этот вопрос ни на форумах, ни в документации.

Изменить: Может быть, если я уточню то, что я сделал, это будет намного яснее.

Итак, у меня есть 2 переменные среды с именами "имя пользователя" и "пароль".

Эти переменные определены в разделе переменных среды в Terraform Cloud.

В моем файле main.tf я создаю кластер mongo, который должен быть создан с этими переменными имени пользователя и пароля. В основном файле variables.tf я определил эти переменные как:

variable "username" {
  type = string
}

variable "password" {
  type = string
}

Мой файл main.tf выглядит так:

module "eu-west-1-mongo-cluster" {
...
...
  username = var.username
  password = var.password
}

В подмодуле mongo я определил их в файле variables.tf как строку типа, а в файле mongo.tf в подмодуле я назвал их var.username и var.password

Спасибо!

3 ответа

Я не думаю, что то, что вы пытаетесь сделать, поддерживается Terraform Cloud. Вы устанавливаете Environment Variables в пользовательском интерфейсе, но вам нужно установить Terraform Variables(см. снимок экрана). Для бэкэнда Terraform Cloud вам нужно динамически создавать, ни один из обычных -var="myvar=123" или же TF_VAR_myvar=123 или же terraform.tfvarsв настоящее время поддерживаются удаленным сервером. Приведенное ниже сообщение об ошибке создается из интерфейса командной строки при запуске terraform 1.0.1 с -var значение:

      │ Error: Run variables are currently not supported
│ 
│ The "remote" backend does not support setting run variables at this time. Currently the
│ only to way to pass variables to the remote backend is by creating a '*.auto.tfvars'
│ variables file. This file will automatically be loaded by the "remote" backend when the
│ workspace is configured to use Terraform v0.10.0 or later.
│ 
│ Additionally you can also set variables on the workspace in the web UI:
│ https://app.terraform.io/app/<org>/<workspace>/variables

Мой вариант использования находится в конвейере CI / CD с CLI с использованием удаленного бэкэнда Terraform Cloud, поэтому я создал *.auto.tfvars например:

      # Environment variables set by pipeline
TF_VAR_cloudfront_origin_path="/mypath"

# Dynamically create *.auto.tfvars from environment variables
cat >dev.auto.tfvars <<EOL
cloudfront_origin_path="$TF_VAR_cloudfront_origin_path"
EOL

# Plan the run
terraform plan

Согласно https://www.terraform.io/docs/cloud/workspaces/variables.html, terraform экспортирует все предоставленные переменные.

Итак, если вы определили переменную среды TF_VAR_name тогда вы сможете использовать как var.name в коде terraform.

Надеюсь это поможет.

Мне удалось обойти это в моем конвейере devops, скопировав файл terraform.tfvars из моего подкаталога в рабочий каталог как file.auto.tfvars

Например:

      cp $(System.DefaultWorkingDirectory)/_demo/env/dev/variables.tfvars  $(System.DefaultWorkingDirectory)/demo/variables.auto.tfvars
Другие вопросы по тегам