Какой приоритет использования переменных (variables) в Terraform?

«Какой приоритет использования переменных (variables) в Terraform?» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Приоритет переменных в Terraform (от высшего к низшему):

  1. Переменные окружения (TF_VAR_<имя>): Наивысший приоритет. Удобно для секретов или значений, специфичных для среды CI/CD.
    export TF_VAR_instance_type="t2.large"
    terraform apply
  2. Аргумент командной строки (-var или -var-file): Имеет приоритет над файлами, загружаемыми автоматически.
    terraform apply -var="instance_type=t2.large"
  3. Файлы переменных, загружаемые автоматически: Файлы с именами terraform.tfvars или *.auto.tfvars (в алфавитном порядке).
  4. Значения по умолчанию в блоке variable: Используются, если значение не предоставлено ни одним из вышеперечисленных способов.

Пример для наглядности:

variables.tf:

variable "region" {
  description = "AWS region"
  default     = "us-east-1" # Самый низкий приоритет (4)
}

terraform.tfvars:

region = "eu-west-1" # Приоритет (3), переопределит default

Если теперь выполнить команду с переменной окружения:

export TF_VAR_region="ap-southeast-1"
terraform apply # Будет использовано "ap-southeast-1" (приоритет 1)