Порожня підписка. Гарячий дедлайн. Команда, яка до того Azure і в очі не бачила. Ось так виглядав день нуль — а завдання звучало просто: зібрати інфраструктуру в Azure з нуля. Не демку, не proof of concept. Такий фундамент, що переживе аудит безпеки, розтягнеться на кілька регіонів і пересобереться з коду швидше, ніж вистигне кава.
Я досі пам'ятаю той перший terraform apply по порожній підписці. Ресурси з'являються в реальному часі, кожен — рішення, зашите в код. Водночас захопливо і страшно. Але до цього моменту ми дійшли пізніше, ніж усім хотілося.
Три дні біля дошки — і жодного рядка Terraform
Усі рвалися писати код першого ж дня. Я сказав: ні.
Три дні ми займалися лише мережею. Тільки дизайном мережі. Hub-spoke топологія, сегментація за принципом zero trust, ланцюжки резолву DNS — усе це малювалося на дошках, обговорювалося до хрипоти, стиралося і малювалося заново. Три дні і нуль рядків Terraform. Люди вирішили, що я тягну час.
Через три тижні, коли кожен модуль ліг рівно в ту топологію, яку ми накидали, — так думати перестали. Ці три дні дизайну зекономили тижнів зо три переробок далі по проєкту. Найкраща угода за весь проєкт.
Вимоги не обговорювалися
Це була не контора в стилі «давайте швидко напишемо абияк, а потім розберемося». Обмеження зафіксували ще до мене:
- Multi-region HA по availability zones — жодних єдиних точок відмови.
- Zero trust як реальний дизайн мережі, а не слайд у презентації.
- 100% Terraform — жодних кліків по порталу, взагалі жодних.
- Hub-spoke топологія, бо пласка мережа в ентерпрайзі — це інцидент безпеки, який терпляче чекає свого часу.
Фундамент: модулі, landing zones, guardrails
Базовий шар — Terraform-модулі під кожен тип ресурсу: перевикористовувані, версіоновані, покриті тестами. Зверху — landing zones з subscription vending, щоб нова команда отримувала безпечне середовище за години, а не за тижні.
Azure Policy лежала зверху як guardrails: не документація з проханням поводитися пристойно, а правила, які просто не дають накосячити. І сама інфраструктура їхала через CI/CD pipeline — plan, review, apply. Ніхто не запускає Terraform з ноутбука. Ніколи. Pipeline — єдині двері.
Безпека — не «допилимо потім»
Безпека була фундаментом, а не шаром фарби, який наносять наприкінці.
- Private endpoints на всьому. Жодних публічно стирчащих ресурсів у бекенді.
- NSG-правила під контролем версій і з аудитом — кожна зміна видима й відкочується.
- Key Vault під кожен секрет. Без винятків, без «ну один раз можна».
- RBAC за принципом least privilege, рев'ю раз на місяць, бо розповзання доступів тихе — рівно до моменту, коли перестає бути тихим.
Помилки, які били найболючіше
Не вдаватиму, що все пройшло гладко. Три речі вжалили по-справжньому.
DNS у hub-spoke — це окреме пекло. Я його недооцінив, а воно ж it's always DNS. Private DNS zones, форвардери, умовний резолвинг між споками — закладеш пізно, дошиватимеш через біль.
Дефолти Azure небезпечні. Зовсім. Вважати інакше — надійний спосіб потім пояснювати security-команді, звідки взявся публічний storage account.
Governance, прикручений заднім числом, — це governance, який ти видираєш і переробляєш. Теж перевірили на власній шкурі. Або закладаєш з першого дня, або закладай час на переробку.
Infrastructure as code, а не infrastructure as hope
Підписка, що починалася порожньою, врешті отримала multi-region HA по availability zones, private endpoints на кожному ресурсі й повний шлях пересборки з коду — менш ніж за годину.
І ось це останнє — суть усього. Якщо твою інфраструктуру в Azure не можна пересобрати з коду менш ніж за годину, у тебе не infrastructure as code. У тебе infrastructure as hope — інфраструктура на чесному слові.
Хмара — це не магія. Це інженерія з кредиткою в руці. Архітектурні рішення, які ти ухвалюєш у перші три дні — до того, як хтось напише рядок Terraform, — і визначають, будуєш ти платформу чи міну сповільненої дії.
Тож залишу питання: скільки часу ви реально витрачаєте на дизайн, перш ніж написати перший рядок коду?