Чаще всего джуны спрашивают меня об одном и том же, разными словами: как запускать terraform apply в проде так, чтобы ладони не потели каждый раз, когда жмёшь Enter? Ответ у меня жёсткий, и вырос он из самого страшного демо в моей карьере — живого, перед залом на 500 человек, без страховки.
Расскажу, что там случилось. А потом объясню, почему «terraform apply» вообще не должен быть самой страшной командой в твоём терминале.
500 студентов и никакого запасного плана
Я стоял на сцене IT-марафона. На бумаге план был простой: развернуть настоящую инфраструктуру в Azure вживую, прямо перед залом. Никаких записанных видео, никакого «а вот это я подготовил заранее». Только мой терминал на огромном экране и terraform plan, который 500 человек читали у меня из-за плеча.
Смысл был в том, чтобы доказать то, во что я искренне верю: настоящая инфраструктура — это не слайды с красивыми схемами. Это код, который можно повторить. Поэтому я и собрал всё как код — двадцать три ресурса, всё описано, всё воспроизводимо:
- Virtual networks с нормальной изоляцией по подсетям
- Network security groups с правилами deny-by-default
- Private DNS zones — чтобы наружу в интернет не торчало вообще ничего
- Автоматический провижининг VM
- MySQL за private endpoints, с шифрованием at rest
Потом я запустил terraform apply. И он упал.
Тот самый apply, который упал при всех
Конфликт сетевой политики. Пересёкся диапазон CIDR. Двадцать три ресурса — и самый первый apply выдал ошибку, пока 500 пар глаз смотрели в экран.
Вариантов было два. Переключиться на слайды и промямлить, что демо было «дополнительным». Или дебажить вживую, при всех, без всякой гарантии, что успею починить.
Я выбрал дебажить.
И произошло то, чего я не ждал: зал подался вперёд. Демо перестало быть вылизанным выступлением и стало настоящим — живой инженер решает живую проблему в реальном времени. Конфликт CIDR я нашёл секунд за 90, поправил блок, перезапустил apply — и все 23 ресурса поднялись зелёными.
Аплодисменты были громче, чем если бы всё прошло идеально.
Почему «terraform apply» не должен быть твоей самой страшной командой
Вот урок, который важнее самой байки. Если terraform apply — это команда, от которой обрывается что-то внутри, проблема не в Terraform. Проблема в пайплайне. Безопасный apply — это не про смелость. Это про guardrails, которые ты выстроил задолго до того, как нажал Enter.
Вот что на самом деле делает выкат в прод безопасным:
- Remote state с локом. State лежит в бэкенде (Azure Storage, S3 — неважно) с включённым state locking. Двое не смогут сделать apply одновременно и разнести стейт. Твой ноутбук — никогда не источник правды.
- Сначала plan, потом apply. Всегда.
terraform plan— это твой diff. Читай его. Ревьють, как ревьють pull request, потому что это он и есть — только для инфраструктуры. - Apply — через CI/CD, а не с ноутбука. Пайплайн гоняет plan, человек апрувит diff, и только потом идёт apply. Никто не набивает
applyпо проду со своей машины. - Deny by default. NSG сначала запрещают и только потом разрешают явно. Никаких public IP без реальной причины. Private endpoints вместо публичного доступа — всегда.
- Маленький blast radius. Модули и отдельный state на каждое окружение, чтобы ошибка в staging физически не могла дотянуться до прода.
Сделай это — и terraform apply станет скучным. А скука — это ровно то, что тебе нужно в проде.
Учи безопасности, а не только синтаксису
Что мне важнее всего: вместе с синтаксисом я преподаю security-first мышление. Потому что если учить плохим привычкам — public IP на каждом углу, стейт на чьём-то ноутбуке, правила allow-all «чтобы демо просто заработало» — ты выращиваешь плохих инженеров. Синтаксис забудется. Привычки останутся.
Если инфраструктуру нельзя пересобрать из кода меньше чем за час — у тебя не infrastructure as code. У тебя infrastructure as hope.
Собственно, поэтому я и дебажил вживую, а не прятался за слайдами. Учить — значит дать людям увидеть, как ты думаешь, а не показывать, какой ты умный. Идеальные демо скучны. Живой дебаг — образователен. Твоё спокойствие, когда всё ломается, и есть урок.
Если можешь дебажить перед 500 людьми — сможешь и в одиночку. А если в пайплайне выстроены правильные guardrails, тебе больше никогда не придётся быть смелым, чтобы запустить terraform apply.