Пустая подписка. Горящий дедлайн. Команда, которая до этого 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, — и определяют, строишь ты платформу или мину замедленного действия.

Так что оставлю вопрос: сколько времени вы реально тратите на дизайн, прежде чем написать первую строку кода?