Infrastructure as Code: обзор
Описываем серверы, сети и базы текстовым файлом вместо кликов в консоли.
Infrastructure as Code (IaC) — подход, при котором инфраструктура (серверы, сети, базы) описывается текстовыми файлами и создаётся автоматически, а не вручную через консоль.
Зачем описывать инфраструктуру кодом
Создавать ресурсы кликами в консоли удобно для одного эксперимента, но плохо масштабируется. Через полгода никто не вспомнит, что и зачем настроено, а воссоздать ту же среду для тестов — мучение. IaC решает это: вся инфраструктура — это файл, который лежит в Git. Его можно читать, ревьюить, версионировать и применять одинаково в любом окружении.
Преимущества IaC
- Повторяемость — одна и та же среда разворачивается одной командой.
- Версионирование — история изменений в Git, видно, кто и что менял.
- Документация — код и есть актуальное описание инфраструктуры.
- Откат — сломали — вернулись к прошлой версии файла.
CloudFormation против Terraform
Два самых популярных инструмента IaC для AWS.
| CloudFormation | Terraform | |
| Чей | родной сервис AWS | сторонний (HashiCorp) |
| Облака | только AWS | много провайдеров |
| Формат | JSON/YAML | язык HCL |
Простой шаблон CloudFormation, создающий один бакет S3, выглядит так:
AWSTemplateFormatVersion: "2010-09-09"
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-iac-demo-bucketТо же на Terraform (язык HCL):
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-iac-demo-bucket"
}Как работает под капотом
IaC-инструмент сравнивает желаемое состояние (то, что описано в файле) с текущим (что реально создано в AWS) и вычисляет разницу. Затем он вызывает те же API AWS, что и консоль, чтобы привести реальность к описанию: создаёт недостающее, меняет изменённое, удаляет лишнее. CloudFormation хранит состояние внутри AWS в виде stack, а Terraform — в отдельном файле состояния (state). Благодаря этому повторный запуск без изменений в файле ничего не делает: система уже в нужном состоянии. Такой подход называется декларативным — вы описываете «что хотите получить», а не «какие шаги выполнить».
Частые ошибки
- Менять ресурсы вручную поверх IaC. Ручная правка создаёт «дрейф» (drift): файл и реальность расходятся, и следующий запуск может всё сломать.
- Не хранить state Terraform надёжно. Потеря файла состояния делает управление инфраструктурой хаотичным; его кладут в защищённое общее хранилище.
- Класть секреты прямо в шаблон. Пароли и ключи в IaC-файле утекут в Git; используйте Secrets Manager и параметры.
Итог
- IaC описывает инфраструктуру текстом, давая повторяемость, версионирование и откат.
- CloudFormation — родной для AWS (JSON/YAML), Terraform — мультиоблачный (язык HCL).
- Подход декларативный: вы описываете желаемое состояние, инструмент приводит реальность к нему.