Инфраструктура как код с Terraform и Ansible: практическое введение для небольших компаний
Задайте себе один вопрос: если основной сервер сегодня ночью исчезнет, сколько времени займёт собрать точно такой же? Если ответ начинается со слов «ну, сначала надо вспомнить, как он был настроен», инфраструктура как код для вас.
Идея
Инфраструктура как код (Infrastructure as Code, IaC) означает, что серверы, сети и их настройки описываются в текстовых файлах, а не настраиваются кликами в веб-консолях. Файлы лежат в Git, изменения проходят ревью, и по этим же файлам окружение можно пересобрать в любой момент. У инфраструктуры появляются история, документация и кнопка «отменить».
Terraform: создаём инфраструктуру
Terraform описывает, что должно существовать в облаке или на платформе виртуализации: виртуальные машины, сети, правила межсетевого экрана, DNS-записи, хранилища. Вы описываете желаемое состояние, Terraform сравнивает его с реальностью и показывает план изменений перед применением. Он работает с AWS, Azure, Google Cloud, Hetzner, DigitalOcean, Cloudflare, Yandex Cloud и сотнями других провайдеров.
resource "aws_lightsail_instance" "web" {
name = "web-1"
availability_zone = "eu-central-1a"
blueprint_id = "ubuntu_24_04"
bundle_id = "small_3_0"
}
OpenTofu это открытый форк Terraform с тем же языком, хороший вариант, если для вас важна лицензия.
Ansible: настраиваем то, что на нём работает
Ansible описывает, как должен быть настроен сервер: пакеты, пользователи, настройки SSH, межсетевой экран, Docker, файлы приложения. Он подключается по SSH, не требует агента и применяет один и тот же плейбук к одному серверу или к сотне. Повторный запуск меняет только то, что отклонилось от нужного состояния.
- hosts: web
become: true
tasks:
- name: Install Docker
apt:
name: docker.io
state: present
update_cache: true
Как они работают вместе
- Terraform создаёт сервер, сеть и DNS.
- Ansible устанавливает и настраивает программы.
- CI/CD-пайплайн разворачивает приложение.
Всё это код в одном репозитории. Новое тестовое окружение или замена сервера после аварии сводится к запуску нескольких команд.
Реалистичный первый проект
Не пытайтесь перевести всё сразу. Хороший первый шаг для небольшой компании:
- Описать в Terraform DNS-записи и один рабочий сервер.
- Написать плейбук Ansible для базовой настройки этого сервера: обновления, пользователи, защита SSH, межсетевой экран, агент мониторинга, Docker.
- Хранить секреты вне репозитория, например в менеджере паролей или сервисе секретов.
- Пересобрать сервер с нуля в тестовом аккаунте и убедиться, что всё работает.
Обычно это укладывается в 20-40 инженерных часов и сразу снимает риск «никто не знает, как собран этот сервер».
Когда это не нужно
Если вы пользуетесь только облачными сервисами и своих серверов нет, IaC даст мало. Если сервер один и меняется редко, на первое время хватит хорошей документации и надёжных бэкапов. IaC окупается, как только появляются несколько окружений, частые изменения или бизнес, который не может днями ждать восстановления.
Инфраструктура как код входит в наш тариф DevOps Growth. Вместе с CI/CD она превращает вашу инфраструктуру в то, что можно пересобрать за минуты.