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