Перейти к содержимому

Infrastructure as Code (IaC)

Infrastructure as Code (IaC) — подход к управлению IT-инфраструктурой, при котором серверы, базы данных, сети и балансировщики описываются в конфигурационных файлах и разворачиваются автоматически, а не настраиваются вручную через веб-интерфейсы.

Ключевые составляющие IaC:

КомпонентРоль
Конфигурационные файлыОписание ресурсов (HCL, YAML, JSON или код на Python/TypeScript)
GitВерсионирование, audit trail, code review инфраструктуры
IaC-инструментЧитает конфигурацию и приводит реальную инфраструктуру к описанному состоянию
State-менеджментОтслеживание фактического состояния ресурсов, обнаружение drift
CI/CD-конвейерыАвтоматическое тестирование и применение инфраструктурного кода
МодулиПереиспользуемые компоненты (как библиотеки в программировании)
  • Декларативность — описывается желаемое состояние, а не пошаговые команды
  • Идемпотентность — повторное применение кода не ломает работающую инфраструктуру
  • Воспроизводимость — один и тот же код создаёт идентичные окружения (dev = staging = prod)
  • Контролируемость — все изменения в Git, всегда можно откатить
  • Policy-as-Code — политики безопасности проверяются автоматически (Open Policy Agent, Checkov)

Описывается конечное состояние инфраструктуры — инструмент сам решает, какие ресурсы создать, обновить или удалить.

Инструменты: Terraform, OpenTofu, AWS CloudFormation, Crossplane.

Пример (Terraform):

resource "yandex_compute_instance" "web" {
name = "web-server"
platform = "standard-v2"
resources {
cores = 2
memory = 4
}
}

Описываются пошаговые действия для достижения состояния.

Инструменты: Ansible, Chef, SaltStack.

Пример (Ansible):

- name: Установить Nginx
apt:
name: nginx
state: present

Программирование на реальных языках (Python, TypeScript, Go) с декларативной моделью инфраструктуры.

Инструменты: Pulumi, AWS CDK, CDK for Terraform.

  • Язык: HCL (HashiCorp Configuration Language)
  • Провайдеров: 4800+ (AWS, Azure, GCP, Yandex Cloud, VK Cloud, GitHub, Cloudflare и др.)
  • Подход: декларативный, планирование перед применением (planapply)
  • Лицензия: Terraform — BSL (ограничения для конкурентов); OpenTofu — MPL 2.0 (полностью открытый форк)
  • Лучше всего для: Enterprise multi-cloud, сложные облачные инфраструктуры
  • OpenTofu — форк Terraform, созданный после перехода на BSL-лицензию. Совместим с Terraform-провайдерами и активно используется в России как открытая альтернатива.
  • Языки: Python, TypeScript, Go, C#, Java
  • Провайдеров: 1500+ (включая совместимость с Terraform-провайдерами)
  • Подход: гибридный
  • Преимущества: автодополнение в IDE, unit-тесты, циклы и условия на реальном языке
  • Лучше всего для: команды разработчиков, которые хотят IaC без изучения DSL
  • Язык: YAML (playbooks)
  • Подход: императивный, agentless (не требует установки агентов на серверы)
  • Преимущества: простой порог входа, оркестрация, широкая поддержка модулей
  • Лучше всего для: конфигурация серверов, автоматизация рутинных задач
  • Подход: Kubernetes как control plane для облачной инфраструктуры
  • Модель: CRD (Custom Resource Definitions) — база данных становится таким же K8s-объектом, как и Pod
  • Статус: CNCF Incubating
  • Лучше всего для: платформенная инженерия, GitOps through Kubernetes
  • Фокус: пакетный менеджер для Kubernetes
  • Модель: Charts — упакованные K8s-приложения с версионированием
  • Интеграция: ArgoCD, Flux CD (GitOps)
  • Лучше всего для: управление жизненным циклом K8s-приложений
  • AWS CloudFormation — нативный IaC для AWS (только AWS, глубоко интегрирован)
  • Chef — configuration management на Ruby DSL (крутая кривая обучения)
  • SaltStack — event-driven конфигурация, высокая скорость на тысячах нод
  • Packer — создание образов виртуальных машин
  • Spacelift / env0 — специализированные платформы CI/CD для инфраструктурного кода

Все основные российские облачные платформы поддерживают управление через Terraform и предоставляют официальные провайдеры:

ПлатформаИнструментыЧто есть
Yandex CloudTerraform, Pulumi, CrossplaneОфициальный yandex-cloud provider, модули, документация
VK CloudTerraform, Ansible, Packer, PulumiПровайдер vkcs, примеры манифестов
SelectelTerraformПровайдер selectel (на базе OpenStack)
Cloud.ru (Сбер)TerraformПровайдер для облака Сбера
Timeweb CloudTerraformПровайдер для Timeweb Cloud
K2 Cloud (КРОК)Terraform, AnsibleПровайдер + внутренние DevOps-практики

Deckhouse — российская Kubernetes-платформа с встроенным IaC и GitOps. Ключевые особенности:

  • В реестре отечественного ПО с 2021 года
  • Сертификация ФСТЭК (октябрь 2024)
  • Deckhouse Virtualization Platform — управление до 50 000 VM на базе KubeVirt
  • Поддержка Astra Linux и air-gapped (изолированных) окружений
  • Секреты через IaC, встроенный мониторинг, SDN/SDS
  • NoOps-режим: автоматические обновления и исправление уязвимостей

Для организаций с требованиями импортозамещения Deckhouse — наиболее зрелое российское решение в сегменте платформенного IaC.

После смены лицензии Terraform на BSL многие российские команды переходят на OpenTofu — полностью открытый форк под лицензией MPL 2.0, совместимый со всеми Terraform-провайдерами (включая российские облака).

Быстрое создание идентичных окружений dev/staging/prod из кода. Один PR — и новое окружение готово.

Перенос инфраструктуры между облаками через единый код (Terraform с разными провайдерами).

Инфраструктурный код тестируется и применяется в пайплайне вместе с кодом приложения. Изменения проходят code review перед применением.

Вся инфраструктура описана в коде — при аварии она восстанавливается одной командой, а не многочасовым ручным восстановлением.

Все изменения инфраструктуры задокументированы в Git — полный audit trail.

  1. Весь код в Git — никаких ручных правок в продакшене
  2. Модульность — выделяйте переиспользуемые компоненты (VPC, кластер БД, балансировщик)
  3. GitOps — изменения инфраструктуры через PR и code review
  4. Тестирование инфраструктуры — Checkov для security-политик, Terratest для интеграционных тестов
  5. Drift detection — регулярная проверка расхождения кода и реальной инфраструктуры
  6. Минимальные привилегии — IaC-раннеры с минимально необходимыми правами
  7. Документируйте код — README для модулей, осмысленные имена ресурсов

IaC отличается от PaaS (хостинг и деплой) уровнем абстракции:

IaCPaaS (Railway, Vercel)
Уровень управленияИнфраструктура (VM, сети, диски)Приложение (код → работающий сервис)
ГибкостьПолный контрольОграничен платформой
Порог входаТребует DevOps-компетенцийМинимальный
Типичный пользовательDevOps/SRE/Platform EngineerРазработчик

На практике IaC и PaaS часто используются вместе: Terraform поднимает облачную инфраструктуру, а Railway или Vercel деплоят на неё приложение.