Найчастіше джуни питають мене про одне й те саме, різними словами: як запускати 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.