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-resource-lifecycle

how/resources

lifecycle: четыре рычага управления ресурсом

create_before_destroy для zero-downtime, prevent_destroy для критичного, ignore_changes для дрейфа, replace_triggered_by для каскадной пересборки. Что каждый делает на практике.

Блок lifecycle внутри resource - это мета-блок. Он не описывает, что ресурс делает в облаке, он описывает, как Terraform должен с этим ресурсом обращаться: в каком порядке создавать и удалять, разрешать ли менять, что пересоздавать при смене зависимостей.

Четыре аргумента, каждый для своего сценария. Жми ▶ - пройдём по ним и посмотрим, что меняется в поведении apply и destroy.

step 1/6·00 · дефолт: destroy → create
обычный resource - без lifecycle-блокаaws_instance.webami-oldDESTROYaws_instance.webami-new (downtime!)NEWdefault: destroy old → create new. Между ними сервиса нет.дефолт: destroy → create. Простейший случай - без lifecycle

§ шаги

  1. Без блока lifecycle Terraform ведёт себя предсказуемо: если изменился атрибут, который требует replace (force-new), он сначала уничтожает старый инстанс, потом создаёт новый.

    Между этими двумя моментами ресурса нет. Для EC2-инстанса под балансировщиком это секундный пинок. Для базы данных - потеря коннектов и кэша. Для уникального IP - окно без сервиса.

    Дальше - четыре способа повлиять на это поведение.

итого

Краткий гид «когда что»:

  • create_before_destroy = true - нужен zero-downtime. Подходит для замены EC2-инстансов, AMI, контейнерных задач. Не подходит, если у ресурса уникальное имя или уникальный IP/порт, который не может одновременно существовать в двух копиях (классический ботлнек: aws_security_group с одинаковым именем).
  • prevent_destroy = true - для продакшн-БД, S3 с данными пользователей, IAM-ролей с историей. Это «отказ apply'у», если он попытается удалить ресурс. Чтобы реально снести - нужно сначала руками снять флаг и сделать новый apply, а потом только destroy.
  • ignore_changes = [...] - когда дрейф ожидаем. Например, auto-scaling меняет desired_capacity, облако ставит свои timestamp-теги, кто-то прикручивает теги другим инструментом. Список путей-полей, где дрейф разрешён. Не использовать как «временный костыль» - забудешь, и поле тихо отстанет.
  • replace_triggered_by = [...] - когда смена одного ресурса обязательно требует пересоздания другого. Типичный кейс: меняется aws_launch_template, и нужно, чтобы все aws_instance, использующие его, тоже перезапустились (иначе они будут жить на старой версии).

Подводный камень общий: lifecycle нельзя задать через variable. Все четыре поля принимают только литералы. То есть create_before_destroy = var.zero_downtime - не сработает. Это дизайн-решение HashiCorp, потому что граф зависимостей строится до evaluation.

Дальше: tf-variable-precedence про то, откуда Terraform берёт значения переменных.

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

  • tf-resource-lifecyclelifecycle: полный референс
  • tf-depends-ondepends_on vs replace_triggered_by
  • tf-drift-detectionDrift detection: когда ignore - плохая идея
  • tf-moved-blockmoved: рефакторинг без пересоздания

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

  • ›tf-beginner-09-lifecycle- Lifecycle на практике
  • ›tf-advanced-05-blue-green-migration- Blue-green миграция через CBD
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки