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/kb/Основы Terraform/tf-cli-config

kb/core ── Основы Terraform ── beginner

Конфигурация Terraform CLI: terraformrc, env vars, TF_LOG

Поведение Terraform CLI настраивается через файл ~/.terraformrc и переменные окружения TF_*. Здесь, кеш плагинов, TF_LOG для дебага, TF_VAR_* для переменных, TF_CLI_ARGS для глобальных флагов.

view as markdownaka: terraformrc, tf-env-vars

Где Terraform читает настройки

Поведение CLI настраивается в двух местах:

  1. Файл ~/.terraformrc (Linux/macOS) или %APPDATA%\terraform.rc (Windows). HCL-формат. Читается один раз при запуске любой команды.
  2. Переменные окружения TF_*. Читаются при каждом запуске terraform. Имеют приоритет над terraformrc там, где значения пересекаются.

Эти файлы, про CLI, не про конфигурацию проекта. В них нет ресурсов и нет state. Это «как мне удобно работать с terraform», а не «что terraform создаёт».

~/.terraformrc, что туда обычно кладут

hcl
plugin_cache_dir   = "$HOME/.terraform.d/plugin-cache"
disable_checkpoint = true
credentials "app.terraform.io" {
  token = "..."
}
  • plugin_cache_dir, общая папка для скачанных плагинов на все проекты. Без неё каждый terraform init скачивает провайдеры заново в локальную .terraform/, и у тебя дублируются гигабайты. С кешем init для нового проекта занимает секунды.
  • disable_checkpoint = true отключает фоновую проверку «есть ли новая версия Terraform». Не критично, но в офлайн-сетях избавляет от шума.
  • credentials, токен для приватных registry (Terraform Cloud, Spacelift). В учебном курсе обычно не нужно.

Папку под plugin_cache_dir нужно создать самому: mkdir -p ~/.terraform.d/plugin-cache.

Переменные окружения

Управление выводом и поведением

  • TF_LOG, уровень логирования. Значения: TRACE, DEBUG, INFO, WARN, ERROR. При DEBUG видны все HTTP-вызовы к провайдеру. Главный инструмент дебага, когда apply падает с непонятной ошибкой:
    bash
    TF_LOG=DEBUG terraform apply 2> debug.log
  • TF_LOG_PATH, куда писать лог. Если не задан, лог идёт в stderr.
  • TF_INPUT=0, отключить интерактивные вопросы (для CI).
  • TF_IN_AUTOMATION=true, сообщает terraform, что он в pipeline. Сокращает вывод и убирает подсказки про следующие шаги.

Передача переменных в HCL

  • TF_VAR_имя, задать значение переменной variable "имя" из HCL. Пример:
    bash
    export TF_VAR_bucket_name="my-bucket-from-env"
    terraform plan
  • TF_CLI_ARGS, добавить флаги к любой команде. Пример: чтобы всегда передавать -input=false в любой запуск, не дописывая в каждом вызове:
    bash
    export TF_CLI_ARGS="-input=false"
  • TF_CLI_ARGS_plan, TF_CLI_ARGS_apply и т.д. То же самое, но только для конкретной команды.

Управление кешем и backend

  • TF_DATA_DIR, где терраформ создаёт .terraform/. По умолчанию, рядом с .tf-файлами; можно вынести в /tmp/, если проект на read-only ФС.
  • TF_CLI_CONFIG_FILE, путь к альтернативному terraformrc-файлу. Полезно, если в CI нужен один файл конфигурации, а локально, другой.

TF_LOG, как пользоваться

Самый ходовой сценарий: terraform apply падает с «Error: failed to get versions...» без подробностей. Запускаешь то же самое с DEBUG:

bash
TF_LOG=DEBUG TF_LOG_PATH=./tf.log terraform apply

В tf.log будет полный HTTP-разговор: на какой URL пошёл, какой ответ получил, на каком этапе провайдер сломался. Часто видно, что упёрся в прокси, упёрся в DNS или получил 429 от регистра.

Уровни:

УровеньКогда использовать
ERRORтолько ошибки. Дефолт без флага.
WARN+ warnings (deprecated, retries).
INFO+ базовые шаги (init, plan, apply фазы).
DEBUG+ HTTP-вызовы. Самый полезный для повседневной отладки.
TRACE+ внутренности (раскрытие graph, parsing). Многословный, нужен редко.

Подводные камни

  • TF_VAR_имя чувствителен к регистру. TF_VAR_Region подставится в переменную Region, а не region. Лучше держать имена переменных строчными.
  • TF_CLI_ARGS склеивается с реальными флагами. Если в env стоит TF_CLI_ARGS="-no-color", и ты запускаешь terraform plan -no-color, провайдер увидит два -no-color, это обычно безвредно, но при дубликате значимых флагов поведение непредсказуемо.
  • plugin_cache_dir не лочит версии. Кеш просто избавляет от скачивания. Версии всё равно фиксирует [[tf-lockfile|lockfile]].
  • TF_LOG может вывести секреты. В DEBUG-логе видны заголовки и тела HTTP-запросов. Не публикуй сырой лог в issue, фильтруй Authorization, *_token, *_key.
  • ~/.terraformrc и проектная provider-конфигурация, про разное. В terraformrc нет регионов и не указываются ресурсы; регион ставится в [[tf-provider-block|блок provider]].

§ команды

bash
TF_LOG=DEBUG terraform apply 2> tf-debug.log

Запустить apply с детальным логом в файл. Самый частый дебаг-приём.

bash
export TF_VAR_region=eu-central-1 && terraform plan

Передать переменную через env. Удобно для CI и одноразовых запусков, не загромождая -var-flags.

bash
mkdir -p ~/.terraform.d/plugin-cache

Создать папку под общий кеш плагинов перед тем, как прописать `plugin_cache_dir` в terraformrc.

bash
terraform -version

Показывает версию terraform и список текущих провайдеров. Первое, что просят в любом issue.

§ см. также

  • tf-initterraform init: первая команда в любом проектеterraform init скачивает плагины-провайдеры (AWS, GCP и т.д.), создаёт файл с зафиксированными версиями (lockfile) и подготавливает рабочую директорию. Без этого ни plan, ни apply не запустятся.
  • tf-lockfile.terraform.lock.hcl: фиксация версий провайдеровLockfile фиксирует точные версии провайдеров и их хеши, чтобы у тебя и у CI всегда стояла та же сборка. Создаётся при terraform init, обновляется через init -upgrade. Коммитится в git.
  • tf-init-backendsBackend в Terraform: где живёт stateBackend, это место хранения state-файла. По умолчанию local, рядом с HCL. Remote backends (S3, GCS, Terraform Cloud, http) дают совместный доступ и блокировку. В этом курсе используется только local; remote, обзорно.
  • tf-version-constraintsVersion constraints в Terraform: required_version и провайдерыrequired_version фиксирует, какие версии terraform запускают этот код. required_providers.version, то же для провайдеров. Pessimistic оператор ~> 5.60, стандарт, разрешает минорные апдейты, запрещает мажорные.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки