Ответ
IaC (Infrastructure as Code) — это практика DevOps, при которой инфраструктура (серверы, сети, базы данных, балансировщики) описывается и управляется с помощью файлов конфигурации, а не через ручные действия в GUI. Эти файлы являются кодом, который можно версионировать, ревьюить, тестировать и развертывать.
Основные принципы и преимущества:
- Идемпотентность: Применение конфигурации несколько раз даёт один и тот же результат. Инфраструктура приводится в желаемое состояние независимо от её начального состояния.
- Версионность и контроль изменений: Код инфраструктуры хранится в Git. Любое изменение проходит через pull request, code review и историю коммитов.
- Повторяемость и консистентность: Идентичные среды (dev, staging, prod) создаются из одного и того же кода, устраняя дрейф конфигураций (configuration drift).
- Автоматизация и скорость: Развертывание сложной инфраструктуры становится быстрым и предсказуемым, что критично для CI/CD.
Подходы и инструменты:
- Декларативный (Terraform, AWS CloudFormation, Pulumi): Вы описываете желаемое конечное состояние инфраструктуры, а инструмент сам определяет, как его достичь.
# Пример Terraform для создания виртуальной машины в Yandex Cloud resource "yandex_compute_instance" "app" { name = "my-app-server" platform_id = "standard-v3" resources { cores = 2 memory = 4 } boot_disk { initialize_params { image_id = "fd8vmcue7aajpmeo39kk" # Ubuntu 22.04 } } network_interface { subnet_id = yandex_vpc_subnet.my-subnet.id nat = true } } - Императивный (Ansible, Chef, Puppet): Вы пишете последовательность команд или шагов ("плейбуки", "рецепты"), которые изменяют систему, чтобы привести её к нужному состоянию. Часто используется для конфигурации уже существующих серверов (Configuration Management).
В DevOps-практике Terraform стал стандартом для оркестрации облачной инфраструктуры, а Ansible — для её последующей конфигурации. Их совместное использование обеспечивает полный цикл управления инфраструктурой как кодом.