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-drift

how/state

Drift: когда state и реальность разошлись

Кто-то ткнул тег в AWS Console - и Terraform внезапно показывает изменения. Что такое drift, почему он бывает, и три способа с ним жить.

Дрейф - это когда реальное состояние ресурса в облаке расходится с тем, что Terraform держит у себя в state.

Бывает по разным причинам:

  • кто-то с правами в AWS Console исправил «на минуточку».
  • auto-scaling сам подкрутил параметр.
  • другой инструмент (kubectl, ansible, скрипт) поменял ресурс параллельно.
  • провайдер AWS обновил атрибут, которого Terraform не контролирует.

Жми ▶ - посмотрим жизненный цикл одного дрейфа: как он появился, как Terraform его увидел, и три способа разрешить.

step 1/6·00 · после apply - инвариант собран
MAIN.TFчто ты хочешьTERRAFORM.TFSTATEчто terraform знаетAWSчто есть на самом делеaws_s3_bucket.demoOwner = "student"aws_s3_bucket.demoOwner = "student"aws_s3_bucket.demoOwner = "student"после apply: HCL = state = cloud. Инвариант соблюдён.

§ шаги

  1. Сразу после успешного terraform apply все три источника правды совпадают: HCL описывает бакет с тегом Owner = "student", state знает про этот тег, в AWS висит ровно такой бакет.

    Это базовое состояние Terraform. Любой повторный plan чистый.

итого

Три стратегии работы с дрейфом:

  1. Откатить через apply. terraform apply приведёт облако к HCL. Подходит, когда HCL - правда, а в облаке - ошибка.
  2. Подхватить в HCL. Если изменение в облаке было правильным, правишь main.tf так, чтобы он отражал новую правду, и делаешь apply (или refresh + ручной правкой state-блока).
  3. Игнорировать через [[tf-resource-lifecycle|lifecycle.ignore_changes]]. Если поле естественно дрейфует (auto-scaling меняет desired_count, облако само ставит timestamp), помечаешь его как игнорируемое - и Terraform перестанет считать его расхождением.

Какую стратегию когда:

  • ручной фикс в облаке для тушения инцидента → стратегия 2 (подхватить в HCL post-mortem'ом, чтобы инвариант снова собирался).
  • auto-scaling, теги, наложенные облаком → стратегия 3.
  • всё остальное → стратегия 1, через CI и pull-request.

Регулярная проверка на drift в CI (см. tf-drift-detection) - обязательна в продакшне. Дрейф, который никто не видит, превращается в инцидент.

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

  • tf-drift-detectionDrift detection в CI/CD
  • tf-resource-lifecyclelifecycle: ignore_changes, prevent_destroy
  • tf-stateЧто такое state и почему он source of truth
  • tf-planterraform plan - как видит дрейф

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

  • ›tf-garden-02-state-drift- Сломанный сад: state drift
  • ›tf-beginner-09-lifecycle- Lifecycle: ignore_changes на практике
  • ›tf-production-10-drift-detection- Drift detection в GitHub Actions
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки