Что такое инфраструктура как код (IaC)?
Инфраструктура как код (IaC) использует методологию DevOps и управление версиями с описательной моделью для определения и развертывания инфраструктуры, такой как сети, виртуальные машины, подсистемы балансировки нагрузки и топологии подключений. Так же, как один и тот же исходный код всегда создает один и тот же двоичный файл, модель IaC создает одну и ту же среду при каждом развертывании.
IaC является ключевой практикой DevOps и компонентом непрерывной поставки. С помощью IaC команды DevOps могут работать вместе с единым набором методик и инструментов для быстрой и надежной доставки приложений и их вспомогательной инфраструктуры в большом масштабе.
Избегайте ручной настройки для обеспечения согласованности
IaC эволюционировал для решения проблемы смещения среды в конвейерах выпуска. Без IaC команды должны поддерживать параметры среды развертывания по отдельности. Со временем каждая среда становится "снежинкой", уникальной конфигурацией, которую невозможно воспроизвести автоматически. Несоответствие сред может привести к проблемам с развертыванием. Администрирование и обслуживание инфраструктуры включают ручные процессы, которые подвержены ошибкам и трудно отслеживать.
IaC избегает ручной настройки и обеспечивает согласованность, представляя требуемые состояния среды с помощью хорошо задокументированного кода в таких форматах, как JSON. Развертывания инфраструктуры с помощью IaC повторяются и предотвращают проблемы со средой выполнения, вызванные смещением конфигурации или отсутствием зависимостей. Конвейеры выпуска выполняют описания среды и модели конфигурации версий для настройки целевых сред. Чтобы внести изменения, команда изменяет источник, а не целевой объект.
Идемпотентность, способность данной операции всегда давать один и тот же результат, является важным принципом IaC. Команда развертывания всегда задает для целевой среды одну и ту же конфигурацию, независимо от начального состояния среды. Идемпотентность достигается путем автоматической настройки существующего целевого объекта или путем отмены существующего целевого объекта и повторного создания новой среды.
Полезные инструменты
Быстрое предоставление стабильных тестовых сред в большом масштабе
IaC помогает командам DevOps тестировать приложения в рабочих средах в начале цикла разработки. Teams может надежно подготавливать несколько тестовых сред по требованию. Облако динамически подготавливает и удаляет среды на основе определений IaC. Сам код инфраструктуры можно проверить и протестировать, чтобы предотвратить распространенные проблемы с развертыванием.
Использование файлов декларативного определения
По возможности IaC следует использовать декларативные файлы определений. Файл определения описывает компоненты и конфигурацию, необходимые среде, но не обязательно способ достижения этой конфигурации. Например, файл может определять требуемую версию сервера и конфигурацию, но не указывать процесс установки и настройки сервера. Такая абстракция обеспечивает большую гибкость при использовании оптимизированных методов, которые предоставляет поставщик инфраструктуры. Декларативные определения также помогают сократить технический долг по поддержанию императивного кода, например скриптов развертывания, который может накапливаться со временем.
Стандартного синтаксиса для декларативного IaC не существует. Синтаксис описания IaC обычно зависит от требований целевой платформы. Различные платформы поддерживают форматы файлов, такие как YAML, JSON и XML.
Развертывание IaC в Azure
Azure предоставляет встроенную поддержку IaC с помощью модели azure Resource Manager. Teams может определять декларативные шаблоны ARM , указывающие инфраструктуру, необходимую для развертывания решений.
Сторонние платформы, такие как Terraform, Ansible, Chef и Pulumi , также поддерживают IaC для управления автоматизированной инфраструктурой.