Infrastructure as Code: обзор

Описываем серверы, сети и базы текстовым файлом вместо кликов в консоли.

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

Зачем описывать инфраструктуру кодом

Создавать ресурсы кликами в консоли удобно для одного эксперимента, но плохо масштабируется. Через полгода никто не вспомнит, что и зачем настроено, а воссоздать ту же среду для тестов — мучение. IaC решает это: вся инфраструктура — это файл, который лежит в Git. Его можно читать, ревьюить, версионировать и применять одинаково в любом окружении.

Преимущества IaC

  • Повторяемость — одна и та же среда разворачивается одной командой.
  • Версионирование — история изменений в Git, видно, кто и что менял.
  • Документация — код и есть актуальное описание инфраструктуры.
  • Откат — сломали — вернулись к прошлой версии файла.

CloudFormation против Terraform

Два самых популярных инструмента IaC для AWS.

CloudFormationTerraform
Чейродной сервис 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).
  • Подход декларативный: вы описываете желаемое состояние, инструмент приводит реальность к нему.
Проверьте себя
1. В чём главное преимущество Infrastructure as Code перед кликами в консоли?
AКрасивее выглядит
BПовторяемость и версионирование: ту же среду можно развернуть одной командой и хранить историю в Git
CРаботает быстрее интернет
DДелает ресурсы бесплатными
2. Чем CloudFormation отличается от Terraform?
AНичем
BCloudFormation — родной сервис только для AWS, Terraform — сторонний и мультиоблачный
CTerraform работает только с AWS
DCloudFormation платный, а Terraform нет всегда
3. Что такое «дрейф» (drift) в контексте IaC?
AКогда сервер ездит между регионами
BРасхождение между описанием в файле и реальным состоянием из-за ручных изменений
CСкидка на сервисы
DТип балансировщика