Содержание
Инфраструктура как код (Infrastructure as Code, IaC) — это подход, при котором серверы, сети, базы данных, DNS и доступы описываются в текстовых файлах и создаются инструментом автоматически, а не настраиваются вручную в панели провайдера. Так инфраструктура становится воспроизводимой, проверяемой на ревью и восстанавливаемой после аварии. Самый распространённый инструмент — Terraform и его открытый форк OpenTofu.
Разберём, какие проблемы решает IaC, как работает Terraform, как хранить состояние и секреты и с чего начать.
Какие проблемы решает инфраструктура как код?
Ручная настройка через веб-панели плохо масштабируется: никто точно не помнит, какие настройки и почему были сделаны, окружения расходятся, а пересоздать всё после аварии или для нового клиента оказывается неделей работы.
Что даёт IaC:
- воспроизводимость — тестовое окружение создаётся точной копией продакшена;
- история изменений — каждое изменение видно в репозитории: кто, когда и зачем;
- ревью — изменения инфраструктуры проходят проверку, как обычный код;
- восстановление — после аварии инфраструктура поднимается командой, а не по памяти;
- документация — код и есть актуальное описание того, что развёрнуто.
Как работает Terraform?
В Terraform вы описываете желаемое состояние: какие ресурсы должны существовать и с какими параметрами. Инструмент сравнивает описание с реальностью, показывает план изменений и после подтверждения создаёт, изменяет или удаляет ресурсы через API провайдера.
resource "yandex_compute_instance" "app" {
name = "app-1"
platform_id = "standard-v3"
resources {
cores = 2
memory = 4
}
boot_disk {
initialize_params {
image_id = var.ubuntu_image_id
size = 30
}
}
network_interface {
subnet_id = yandex_vpc_subnet.main.id
nat = true
}
}
Основной цикл работы:
- Изменить описание в коде.
- Выполнить
planи посмотреть, что именно изменится. - Пройти ревью вместе с планом.
- Выполнить
apply— лучше из CI, а не с ноутбука.
Подробнее о пайплайнах — статья CI/CD на GitHub Actions.
Фото: Unsplash
Как хранить состояние и секреты?
Terraform хранит файл состояния — соответствие между кодом и реальными ресурсами. Его нельзя держать на ноутбуке или в репозитории: состояние хранят в удалённом хранилище с блокировкой, чтобы два человека не применили изменения одновременно, и с шифрованием, потому что в нём могут оказаться секреты.
| Что | Где хранить | Почему |
|---|---|---|
| Код инфраструктуры | Git-репозиторий | История и ревью |
| Состояние | Объектное хранилище с блокировкой | Общий доступ, защита от параллельных изменений |
| Секреты | Менеджер секретов или переменные CI | Не попадают в код и историю |
| Переменные окружений | Отдельные файлы или рабочие пространства | Разделение тестового и боевого окружения |
О работе с секретами подробнее — в статье секреты в проекте.
Как организовать код инфраструктуры?
Код инфраструктуры организуют так же, как обычный: повторяющиеся части выносят в модули, окружения разделяют, а изменения проходят ревью. Важно разделять состояния — чтобы ошибка в тестовом окружении не могла задеть продакшен.
- модули для повторяющихся блоков: сеть, кластер базы данных, сервер приложения;
- отдельные каталоги или рабочие пространства для тестового окружения и продакшена;
- фиксированные версии провайдеров и модулей;
- автоматический
planв каждом пулл-реквесте; - запрет ручных изменений в панели провайдера для ресурсов, описанных в коде.
С чего начать небольшой команде?
Небольшой команде не нужно описывать всё сразу. Начните с ресурсов, которые сложнее всего восстановить вручную и которые чаще меняются: DNS, сети, база данных, объектное хранилище и серверы приложения. Остальное можно переносить постепенно.
- Опишите в коде новое тестовое окружение — так безопаснее учиться.
- Импортируйте существующие ресурсы продакшена по одному.
- Настройте удалённое состояние с блокировкой.
- Добавьте
planв CI и применяйте изменения только через пайплайн. - Для настройки самих серверов используйте Docker или Ansible — подробнее в статье Docker для разработки и продакшена.
Про выбор между облаком и своими серверами — статья VPS, облако или managed-сервисы.
Коротко
- IaC описывает инфраструктуру в коде, а не в ручных настройках панели.
- Это даёт воспроизводимость, историю, ревью и быстрое восстановление.
- Terraform сравнивает описание с реальностью и применяет изменения по плану.
- Состояние хранят удалённо, с блокировкой и шифрованием, секреты — отдельно.
- Начинайте с тестового окружения и самых критичных ресурсов.
Частые вопросы
Нужна ли инфраструктура как код для одного сервера?
Для одного VPS полноценный Terraform может быть избыточен, но описать настройку сервера в скрипте или Ansible всё равно полезно: так сервер можно быстро пересоздать после аварии.
Чем Terraform отличается от Ansible?
Terraform создаёт и удаляет ресурсы — серверы, сети, базы, DNS-записи. Ansible настраивает уже существующие машины — ставит пакеты и меняет конфигурацию. Их часто используют вместе.
Что делать, если кто-то поменял инфраструктуру вручную?
Команда plan покажет расхождение между кодом и реальностью. Дальше либо переносят изменение в код, либо применяют код и откатывают ручную правку. Главное — договориться, что изменения идут только через код.



