Что такое configuration drift?

«Что такое configuration drift?» — вопрос из категории Архитектура и DevOps-практики, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Configuration drift (конфигурационный дрейф) — это постепенное расхождение между фактическим состоянием инфраструктуры (серверов, сетевых правил, конфигураций ПО) и её желаемым состоянием, описанным в декларативном коде (Infrastructure as Code, IaC). Это одна из ключевых проблем, которую решает DevOps-подход.

Как возникает дрейф на практике:

  1. Ручные "быстрые фиксы" на продакшене: "Зайти по SSH и перезапустить службу, попутно изменив параметр в конфиге."
  2. Автоматические обновления ОС или ПО, не отраженные в коде инфраструктуры.
  3. Действия других команд или систем, влияющие на общую инфраструктуру.
  4. Ошибки в скриптах или CI/CD, которые вносят изменения, не соответствующие основному коду (Terraform, Ansible).

Пример: В Terraform описана security group, разрешающая порт 22 только с офисного IP. Инженер вручную через AWS Console добавляет правило для своего домашнего IP для удобства и забывает удалить. Состояние инфраструктуры (AWS) теперь не соответствует коду (Terraform).

Стратегии борьбы с дрейфом:

  • Строгий принцип "Everything as Code": Все изменения в инфраструктуре, конфигурациях и политиках должны вноситься через систему контроля версий (Git) и применяться через CI/CD.
  • Регулярное применение IaC: Плановое выполнение terraform apply или ansible-playbook для приведения инфраструктуры к желаемому состоянию.
  • Использование детекторов дрейфа: Инструменты вроде driftctl для Terraform или aws config для постоянного аудита.
    # Проверка дрейфа в Terraform (возвращает код 2 при наличии изменений)
    terraform plan -detailed-exitcode
  • Immutable Infrastructure: Подход, при котором вместо изменения существующих серверов разворачиваются новые, полностью сконфигурированные из образа (AMI, Docker image), а старые уничтожаются. Это устраняет саму возможность дрейфа на уровне сервера.
  • Запрет прямого доступа (SSH/RDP) к продакшен-серверам или строгий аудит таких сессий.

Последствия неконтролируемого дрейфа: невоспроизводимость окружений, сложность отладки, проблемы с безопасностью и нарушение compliance-требований.