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-state-anatomy

how/state

Анатомия terraform.tfstate

Что лежит внутри state-файла, зачем там serial и lineage, и почему пароль из HCL в нём оказывается открытым текстом. Развёрнутый JSON по слоям.

State-файл - это частная база данных Terraform про твою инфраструктуру. Не транзакционная Postgres, а просто JSON, обычно terraform.tfstate.

Зачем он нужен:

  • сопоставить ресурс из HCL (по имени aws_s3_bucket.demo) с реальным объектом в облаке (по id = "linuxlab-3f4a"). Без этого Terraform не знал бы, какой именно бакет он создавал.
  • запомнить зависимости - что от чего зависит, в каком порядке создавать и сносить.
  • закэшировать атрибуты ресурсов, чтобы plan не дёргал облако без нужды.

Жми ▶ - пройдём по файлу слой за слоем. Эталон - tf-state.

step 1/6·00 · файл закрыт
TERRAFORM.TFSTATEjson · source of truthфайл закрыт. дальше - что внутри.

§ шаги

  1. terraform.tfstate в корне проекта рядом с main.tf. По дефолту - обычный JSON на диске. После apply в нём появляется запись о каждом ресурсе. Открываем.

итого

Главное про state:

  • Это source of truth. Не файл в облаке, не консоль AWS, а именно terraform.tfstate. Если state поломан или потерян - Terraform теряет связь с реальностью (см. tf-state-import).
  • serial растёт на каждом apply. lineage - UUID, который не меняется никогда (генерируется при первом создании state). Эти два поля защищают от конфликтов при remote backend.
  • dependencies записаны в state, а не вычисляются на лету. Если ты сделал terraform state rm - забыл и про зависимости. Поэтому state rm опасен.
  • Любой sensitive в HCL оказывается в state в открытом виде. Это не баг, это устройство. Защищается шифрованием remote backend и контролем доступа (см. tf-secrets-in-state, tf-remote-backend-s3).

Дальше: tf-drift - что бывает, когда state и реальность расходятся.

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

  • tf-stateterraform state - общая картина
  • tf-state-manipulationterraform state mv/rm/list - операции на state
  • tf-state-importterraform import - всасываем существующий ресурс
  • tf-remote-backend-s3Remote backend на S3 с DynamoDB lock
  • tf-secrets-in-stateСекреты в state: что хранится открыто

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

  • ›tf-beginner-04-state- State: что это и зачем
  • ›tf-intermediate-06-remote-backend- Remote backend на S3
  • ›tf-intermediate-07-state-manipulation- Операции над state: mv, rm, list
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки