Терраформировать локальную среду. переменные против облачных переменных
Сейчас я изучаю терраформирование и обнаружил ситуацию, которая мне не понятна.
Я настроил свой проект TF на использование облака TF для хранения файла состояния. Очевидно, это хорошая практика, поскольку я не хочу хранить файл локально. У меня есть пара переменных, которые я хотел бы объявить как env. переменные; т.е. TF_VAR_region="xyz".
Проблема в том, что когда я хочу использовать эту переменнуюtf plan
говорит, что переменная неизвестна (даже если она установлена локально). Когда я устанавливаю переменную в рабочей области облака TF или как набор переменных, назначенный рабочей области. это работает, но показывает мне:
│ Warning: Value for undeclared variable
│
│ The root module does not declare a variable named "region" but a value was
│ found in file
│ "/home/tfc-agent/.tfc-agent/component/terraform/runs/run-XXXX/terraform.tfvars".
│ If you meant to use this value, add a "variable" block to the
│ configuration.
│
│ To silence these warnings, use TF_VAR_... environment variables to provide
│ certain "global" settings to all configurations in your organization. To
│ reduce the verbosity of these warnings, use the -compact-warnings option.
Я не хочу устанавливать переменные в файлеvariable.tf, потому что одна из этих переменных является конфиденциальной, и я не хочу фиксировать ее в репозитории. Кроме того, я как бы не хочу объявлять переменные вручную в облаке TF, поскольку... ну, это ручное действие, при котором я могу просто забыть, что где-то что-то установил. Для меня было бы лучше, если бы все было в «одном месте», так сказать (т.е. в readme у меня было бы описание того, что мне нужно установить переменные env, чтобы процесс работал).
Есть ли способ использовать облако TF для хранения файла состояния, но в то же время иметь возможность использовать локальные переменные? т.е. при запуске локального terraform применяется.
1 ответ
Вам не нужно устанавливать значения переменных внутриvariables.tf
файл
variable "var_name" {
description = "Secret variable"
type = string
sensitive = true
}
предложит вам установить значение переменной, если оно не установлено еще где:
$ terraform plan
var.var_name
Secret variable
Enter a value:
С другой стороны, определение переменных внутри конфигурации является хорошим стилем и четко описывает terraform, какие переменные следует установить перед этим.plan
илиapply
ну, это ручная работа, когда я могу просто забыть, что где-то что-то установил
И это еще одна причина определять переменную внутри конфигурации.terraform
вызовет ошибку, если вы забудете установитьsomething
это описано в конфигурацииsomewhere
. Потому что ошибку легче отладить, чем молчание
Вот статья о переменных, которая может быть полезна