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

Terraform: метрики внедрения для infra-команд

· 7 мин. чтения
Artur Pan
CTO & Co-Founder at PanDev

Команда внедрила Terraform 18 месяцев назад. Деплои медленнее, чем при старом click-ops, ревью занимают больше, и трое ваших лучших инженеров теперь тратят по полному дню в неделю на чтение вывода terraform plan. Старшее руководство спрашивает, окупилась ли миграция, и никто не может дать чистого ответа. Честный: вы никогда не определили, как «окупилась» выглядит в метриках. HashiCorp State of Cloud Strategy 2024 говорит, что 76% enterprise-компаний внедрили IaC, но только 31% меряют результаты против пред-внедренческого baseline. CNCF Annual Survey 2023 зафиксировал аналогичный gap по IaC-тулингу в целом.

Эта статья — фреймворк измерений для infra-команд, которые уже используют Terraform, OpenTofu или Pulumi. Мы не спорим, нужен ли IaC — этот корабль ушёл. Мы определяем шесть метрик, которые покажут, здорово ли идёт внедрение или деградирует, плюс бенчмарки по 37 компаниям в нашем датасете, у которых Terraform работает в проде.

{/* truncate */}

Проблема

Большинство заявлений об «успешном» IaC строятся на конечных состояниях («у нас теперь модули!»), а не на траекториях. Траектория важнее. Команда с 200 модулями и 15% reuse-rate в худшей позиции, чем команда с 40 модулями и 80% reuse, хотя на слайде первая выглядит «более внедрённой».

Самый частый failure mode: Terraform sprawl без консолидации. Через 18-24 месяца у команды копятся сотни .tf-файлов, десятки слабо-разделённых модулей, а apply-time выходит за 20 минут. В этой точке IaC тормозит команду вместо того, чтобы ускорять. Thoughtworks Technology Radar отмечал «Terraform sprawl» как антипаттерн с 2022 года.

6 метрик, которые надо трекать

Метрика 1 — Module reuse rate

Процент ресурсов, созданных внутри общего модуля vs. inline в root-конфиге. Низкий reuse = каждая команда переизобретает aws_s3_bucket с немного разными тегами и lifecycles.

Цель: 65-80% на инфраструктуре старше 12 месяцев. Красный флаг: ниже 40% после 18 месяцев внедрения.

Как мерить: считать блоки resource, смотреть, находится ли каждый внутри module. path или в root. Скриптуется за ~30 строк парсера.

Метрика 2 — Plan-to-apply ratio

Соотношение terraform plan к terraform apply за неделю. Планы, никогда не доходящие до apply = усталость ревьюеров, чрезмерно осторожные процессы или проблемы с plan-timeout.

Здоровый диапазон: 3:1 — 5:1 (планов больше, чем apply — нормально). Красный флаг: выше 10:1 (планы — шум, не сигнал) или ниже 1.5:1 (вы применяете слишком много без ревью).

Метрика 3 — Длительность apply (p50 + p95)

Медиана и хвост prod-apply. Это ваша частота деплоя инфраструктуры — метрика deployment frequency из DORA, применённая к IaC. Apply на 45 минут превращается в политику «батчить изменения» — так вы и оказываетесь с рискованными пятничными изменениями.

Размер командыЗдоровый p50Здоровый p95Красный p95
<10 infra-инженеров2-5 мин10 мин30+ мин
10-30 инженеров5-10 мин20 мин45+ мин
30+ инженеров5-15 мин25 мин60+ мин

Метрика 4 — Plan failure rate

Доля планов, которые не запускаются (state lock, ошибки провайдера, drift). Это IaC-эквивалент change failure rate. Небольшой стабильный процент (2-5%) здоров. Растущий тренд — инфра дрейфует от кода.

Наши данные по 37 Terraform-компаниям:

Этап внедренияМедианный plan failure rate90-й перцентиль
Первые 6 месяцев8.2%18%
6-18 месяцев4.1%11%
18+ месяцев (зрело)2.7%7%
18+ месяцев (sprawl)9.4%22%

Сегмент «sprawl» — неприятный: команды на 18+ месяцах, у которых стало хуже, а не лучше. Причина почти всегда одна — модули плодились быстрее, чем консолидировались.

Bar-chart с module reuse rate по пяти командам из нашего датасета Module reuse rate отделяет здоровое внедрение Terraform от sprawl. Команда на 12% не получает выгоды от IaC — они пишут многословный boilerplate на HCL вместо реального языка.

Метрика 5 — Каденс drift-детекции

Как часто вы сканируете прод на state drift (terraform plan без ожидаемых изменений, ловит неожиданные диффы). Команды без drift-детекции узнают реальность инфры во время инцидента.

Здорово: ежедневный drift-скан с алертами в команду-владельца. Допустимо: раз в неделю. Красный флаг: on-demand / по случаю.

Drift-сканы — feedback loop, который держит Terraform честным. Без них кто-то сделал console-change во вторник — код врёт до пятницы, когда следующий релиз ломается.

Метрика 6 — Инженеро-время на infra-задачу

Вот где IDE-телеметрия полезна. Трекайте время в .tf, .hcl, .tfvars — наше language-distribution разбирает это автоматически. Если IaC-работа выросла с 8% времени infra-команды (до внедрения) до 45% (1-й год) до 22% (3-й год), у вас здоровая S-кривая. Если застряла на 45% или полезла выше — sprawl.

ФазаОжидаемая доля времени infra-команды на IaC
До внедрения (click ops)<5%
Внедрение год 130-50%
Внедрение год 220-30%
Зрелое состояние10-20%

Цифра стабильного состояния важна. IaC-внедрение, которое не вернулось под 30%, не окупается. Либо кодовая база слишком сложна для масштаба команды, либо модули так и не консолидировались.

Типичные ошибки внедрения

ОшибкаПочему больноКак чинить
Один гигантский state-файлApply-time взрывается, одно изменение блочит всёРазделить по env + сервисам, remote state + data sources
Копипаст модулей вместо шарингаReuse падает, security-hardening не доезжаетОбщий module-registry, блок новых resource-блоков вне модулей в CI
Нет drift-детекцииРеальность прода расходится с кодом, следующий деплой ломаетсяЕжедневный drift-скан, alert на diffs
terraform apply с локальных машинНет audit-trail, расползание креденшловApply только из CI/CD с OIDC, не long-lived keys
Модули без версийBreaking changes тихо попадают в даунстримОбязательный version = pin во всех вызовах

Как мерить успех через PanDev Metrics

Infrastructure-инженеры показываются в нашей IDE-heartbeat дате иначе, чем feature-инженеры. Их язык — HCL-heavy, активное coding-time ниже (планы идут), context-switching часто триггерится алертами, а не задачами. Language-distribution view в PanDev Metrics отделяет HCL / YAML / Starlark от Python / Go / Terraform-module-Go, чтобы вы видели реальную долю IaC в инженерных усилиях.

Три view, которые важны:

  • Доля HCL-времени в времени infra-команды — сигнал метрики 6 выше.
  • Context switching на infra-инженера — высокие значения коррелируют с firefighting из-за дрифта.
  • Cost per infrastructure change — используя cost-per-feature view на infra-проектах, получаем долларовые цифры на IaC-время.

Чеклист

  • Module reuse rate измеряется ежемесячно, цель ≥65% к месяцу 18
  • Plan-to-apply ratio видим лидам, alert на >10:1
  • Apply p50 и p95 — per environment
  • Plan failure rate в тренде; расследовать любой рост после месяца 12
  • Drift-детекция ежедневно, unexpected diffs — инциденты
  • HCL-время infra-команды ограничено; рост триггерит sprint консолидации
  • Новые модули требуют version pin, README и владельца
  • Apply только из CI, локальных credentials нет

Когда Terraform — не тот инструмент

Фреймворк предполагает, что Terraform (или OpenTofu, один шаблон) подходит команде. Не всегда. Случаи пересмотреть:

  • Single-cloud, в основном serverless, маленькая команда (<5 инженеров): AWS CDK или Pulumi на реальном языке часто выигрывает. Ценность Terraform растёт с multi-cloud и reuse модулей между командами.
  • Быстро меняющаяся прототип-фаза: click ops — не грех при <3 месяцев. Преждевременный IaC сжигает недели на абстракции, которые потом удаляются.
  • Только Kubernetes: ArgoCD + Helm + Kustomize обычно покрывает 90% того, для чего вы бы взяли Terraform. Terraform поверх — это второй источник правды.

Контрарианский тейк: внедрение Terraform часто продаётся как монотонный выигрыш. Это не так. Команды в нашем датасете, которые внедрили Terraform и 2+ года остались на низком module-reuse, продуцировали больше инфра-багов, чем команды, которые не внедряли вовсе. Инструмент без дисциплины модулей — результат хуже baseline click-ops.

Связанные материалы

Попробуйте сами — бесплатно

Подключите IDE-плагин за 2 минуты и увидьте свои реальные метрики. Без карты, без обязательств.

Попробовать бесплатно