← Все статьи

Что такое Infrastructure as Code (и почему ручная настройка серверов не масштабируется)?

Burncode Team 3 минуты чтения

Любая инфраструктура начинается одинаково: кто-то заходит в облачную консоль, заполняет несколько форм и создаёт сервер. Всё работает. А через полгода этот сервер нужно пересоздать — после сбоя или чтобы поднять такую же тестовую среду, — и никто уже точно не помнит все настройки, выбранные в первый раз. Infrastructure as Code существует, чтобы такой сценарий стал невозможен.

Основная идея

Infrastructure as Code, или сокращённо IaC («инфраструктура как код»), означает, что ваши серверы, сети, базы данных и другие облачные ресурсы описываются в конфигурационных файлах, которые хранятся в системе контроля версий точно так же, как код приложения, а не настраиваются вручную через веб-консоль. Вместо того чтобы нажимать «Создать инстанс» и выбирать параметры в выпадающих списках, вы пишете файл с точным описанием того, что должно существовать, а инструмент читает этот файл и приводит реальную инфраструктуру в соответствие с ним.

Самый распространённый инструмент для этого — Terraform: он работает со всеми крупными облачными провайдерами по одному и тому же принципу. У каждого крупного облака есть и собственное решение (AWS CloudFormation, шаблоны Azure Resource Manager). Суть не зависит от инструмента: источник истины — файл, а не то состояние, которое в данный момент случайно сложилось в консоли.

Почему это важнее, чем кажется

  • Воспроизводимость. Нужна идентичная тестовая среда или восстановить продакшен после аварии? Примените ту же конфигурацию ещё раз. Это не надежда на то, что вы вспомнили все настройки, — это гарантировано по определению.
  • Код-ревью для изменений инфраструктуры. Изменение правила файрвола или размера базы данных превращается в pull request, который коллега проверяет до применения, как и любое изменение кода приложения, — вместо клика в консоли, которого больше никто не видел.
  • Настоящий журнал аудита. Система контроля версий точно показывает, что изменилось, когда и кто это изменил. Вопрос «почему эта группа безопасности открыта всему интернету» решается через git blame, а не превращается в археологические раскопки.
  • Обнаружение дрейфа конфигурации. IaC-инструменты умеют сравнивать конфигурационный файл с тем, что реально работает, и отмечать расхождения. Так выявляется ручное «быстрое исправление», которое кто-то внёс прямо в консоли и которое так и не попало обратно в файлы: иначе его молча перезапишут или, что хуже, расхождение будет незаметно нарастать.

С чего обычно начинают команды

Никто не описывает всю инфраструктуру в Terraform с первого дня, и это нормально. Распространённый и разумный путь — начать с того, что больно потерять или долго восстанавливать вручную: сетевой конфигурации, базы данных, основных вычислительных ресурсов, — и постепенно расширять охват по мере того, как появляются новые болевые точки. Цель — не буквально ноль ручных действий в консоли, а то, чтобы ресурсы, которые вы действительно не можете позволить себе потерять или которые нужно надёжно воспроизводить, были описаны в файле, а не существовали только в чьей-то памяти о том, что и где было нажато.

Ловушка, которой стоит остерегаться

Чаще всего внедрение IaC проваливается не из-за инструментов, а из-за частичного внедрения, которое незаметно разлагается. Команда пишет Terraform для первоначальной настройки, затем во время инцидента вносит срочные исправления прямо в консоли (что в моменте часто правильно) и так и не возвращается, чтобы отразить эти изменения в файлах. Через полгода файлы описывают инфраструктуру, которая уже не соответствует действительности, и никто им до конца не доверяет, — а это ровно та проблема, которую IaC и должен был решить. Долговечным этот подход делает только одно: правило «файлы описывают реальность» должно быть постоянным, а не благим пожеланием.

Такая организация инфраструктуры с самого начала — стандартная практика в нашей работе с облаком и DevOps в Burncode. Благодаря ей пересоздание окружения, его масштабирование или передача другому инженеру становятся рутинной и спокойной задачей, а не игрой в угадайку.