Ответ вслух Senior Terraform и IaC обновлено

Распил большого state

Вопрос

Интервьюер: «У вас один state на 2000 ресурсов, plan идёт 15 минут, все боятся apply. Как будете разбирать?»

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Сначала договорюсь о границах: сеть и DNS отдельно, кластеры отдельно, базы отдельно, приложения командам. Связь между state через outputs и terraformremotestate или лучше через data sources по тегам, чтобы не связывать state напрямую.

Что должно прозвучать в ответе

  • Цель: небольшие state по слоям и командам с понятными границами

  • Определить границы: сеть, общие сервисы, кластеры, приложения; связь через outputs или data sources

  • Перенос без пересоздания: removed/import или state mv между state, проверка пустого плана

  • Поэтапно, по одному компоненту, с бэкапом state и заморозкой изменений

  • Автоматизация: CI на каждый state, порядок применения, проверка дрейфа

Что могут спросить следом

  • Как передавать значения между state?
  • Что сделаете, если после переноса план показывает пересоздание?

Разбор

Образцовый ответ: «Сначала договорюсь о границах: сеть и DNS отдельно, кластеры отдельно, базы отдельно, приложения командам. Связь между state через outputs и terraform_remote_state или лучше через data sources по тегам, чтобы не связывать state напрямую. Переношу по одному компоненту: замораживаю изменения, делаю бэкап state, в новом каталоге описываю ресурсы и импортирую их блоками import, в старом убираю блоками removed без удаления. Критерий успеха: в обоих state план пустой. Если план показывает пересоздание, значит, код не совпадает с реальностью, правлю код до пустого плана, а не применяю. В конце у каждого state свой пайплайн, plan идёт за минуту, а команды не мешают друг другу».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.