Распил большого state
Вопрос
Интервьюер: «У вас один state на 2000 ресурсов, plan идёт 15 минут, все боятся apply. Как будете разбирать?»
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Цель: небольшие 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 ошибок.