Как организовать Terraform в команде
Вопрос
Интервьюер: «Как у вас был устроен Terraform: где state, кто и как применяет, как разделены окружения?»
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Удалённый state с блокировкой, версионированием и ограниченным доступом
Разделение по окружениям и компонентам: отдельные state, общие модули
Plan в merge request, apply только из CI после ревью
Фиксация версий Terraform, провайдеров и модулей
Обнаружение дрейфа: plan по расписанию
Секреты не в коде и по возможности не в state
Что могут спросить следом
- Что будете делать, если state повреждён?
- Как разбить огромный state на части?
- Как обновить мажорную версию провайдера?
Разбор
Образцовый ответ: «State лежал в S3-совместимом хранилище с версионированием и блокировкой, доступ только у роли CI и пары админов. Окружения в отдельных каталогах envs/dev, envs/prod, каждое из нескольких небольших state: сеть, кластер, базы, чтобы план шёл быстро и ошибка была локальной. Общие вещи в модулях с версиями по тегам. Любое изменение через MR: CI делает plan и кладёт его в комментарий, после ревью мерж и apply сохранённого плана. Версии Terraform и провайдеров зафиксированы, lock-файл в git. Ночью пайплайн делает plan по всем state и шлёт в чат, если есть дрейф. Пароли генерировали в Vault, а не в Terraform. Если state испорчен, восстанавливаю прошлую версию из версионирования бакета и сверяю с реальностью через plan».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.