linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • База знаний
  • Шпаргалка
  • Capstone
  • Собеседование
home/terraform/how/tf-variable-precedence

how/variables

Откуда Terraform берёт значение переменной

Шесть источников значения для одной variable, выстроенные в очередь. Кто кого перебивает, и почему ваш .tfvars иногда «не применяется».

У переменной в Terraform может быть шесть источников значения. Каждый из них необязателен. Если значение пришло из нескольких, выигрывает тот, что выше в иерархии.

Это не магия - порядок зафиксирован в official docs и применяется в каждом terraform plan и apply. Если ты правил terraform.tfvars, а Terraform упорно использует другое значение - почти всегда причина в том, что что-то выше по иерархии его перебивает.

Жми ▶ - посмотрим, как одно и то же значение var.region ползёт вверх по лестнице приоритетов.

step 1/6·00 · default из variable-блока
PRIORITYSOURCEvar.region01-var "region=…"CLI-флаг, самый верх - 02-var-file=override.tfvarsявный флаг CLI - 03prod.auto.tfvarsавто-подхват, alpha - 04terraform.tfvarsавто-подхват - 05TF_VAR_regionпеременная окружения - 06variable { default = ... }HCL-объявление"us-east-1"WINNERтолько default из variable-блока - единственный источник

§ шаги

  1. В HCL:

    hcl
    variable "region" {
      type    = string
      default = "us-east-1"
    }

    Если больше ничего нет - Terraform использует "us-east-1". Это нижняя ступенька лестницы.

    Если default не задан и значение нигде не пришло - plan упадёт с No value for required variable. Это и есть «обязательная variable».

итого

Что важно запомнить:

  • -var на CLI выигрывает у всего. Удобно для разовых «прогони с другим значением, не правя файлы». Не складывать такие команды в скрипты - потом не найдёшь, откуда взялось значение.
  • *.auto.tfvars подхватываются автоматически, в алфавитном порядке. Часто используют для разделения по окружениям: prod.auto.tfvars, staging.auto.tfvars - но только один из них должен лежать в директории, иначе значения смешаются.
  • terraform.tfvars - единственный файл с этим именем, который Terraform подхватит без флага. Имена vars.tfvars или config.tfvars подхватываются только через -var-file=.
  • TF_VAR_<name> - особенно полезно для секретов в CI/CD: TF_VAR_db_password=$(vault read …) не остаётся ни в HCL, ни в .tfvars, ни в логах команды. См. tf-sensitive.
  • default = ... в variable - это fallback, не «значение по умолчанию для прода». Если variable должна быть обязательной, убери default - Terraform упадёт с No value for required variable, и ты сразу увидишь.

Подводный камень: если значение пришло из двух разных *.auto.tfvars файлов, выигрывает алфавитно последний. Не «последний по mtime» и не «прочитанный во время init» - просто сортировка по имени. z-override.auto.tfvars перебьёт prod.auto.tfvars.

Дальше: tf-sensitive про то, как Terraform обращается с секретами в этих source'ах.

§ копнуть в базу знаний

  • tf-variablevariable: объявление и типы
  • tf-variable-sourcesВсе источники значений в одном месте
  • tf-tfvarstfvars-файлы: terraform.tfvars и auto
  • tf-sensitivesensitive значения и секреты

§ попробовать руками

  • ›tf-beginner-02-variables- Variables: первое знакомство
  • ›tf-intermediate-12-multi-env-layout- Multi-env через .tfvars-файлы
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки