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

IaC, деплой и наблюдаемость: карта раздела

Краткая версия учебника показала, что инфраструктура — это тоже код, а деплой и наблюдаемость — обязанность инженера, а не опция. За один урок ты поднял сервер Terraform’ом, настроил его Ansible-плейбуком, поставил Nginx с сертификатом от Certbot и подключил Prometheus с Grafana. Этого хватает, чтобы задеплоить pet-проект за вечер. Но этого не хватает, чтобы ответить на вопросы, которые начнутся, когда проект вырастет: кто правил инфраструктуру в обход кода? Почему terraform apply предлагает пересоздать сервер после чужого «быстрого фикса» в веб-консоли? Почему алерт приходит через десять минут после падения? Что вообще считать «нормальной» латентностью?

Этот раздел — глубокое погружение в то, что отличает «сервер, на котором крутится приложение», от продакшена как инженерной системы. Мы разберём Terraform под капотом: как HCL превращается в граф ресурсов, зачем нужен state и почему его потеря страшнее утечки исходников, как устроен remote backend с блокировкой, чем модуль отличается от workspace и как наводить порядок в уже существующей инфраструктуре через import. Параллельно соберём полный Ansible-пайплайн: инвентари, роли, шаблоны Jinja2, vault для секретов, идемпотентность как принцип, а не багфикс. Отдельно посмотрим на Pulumi — тот же IaC, но на TypeScript, с циклами, условиями и тестами.

Вторая половина раздела — путь трафика, сигналы системы и работа с инцидентами. Nginx разберём архитектурно: master/worker-процессы, жизненный цикл соединения, upstream-балансировка (ngx_http_upstream_module) со всеми стратегиями, сжатие, кэширование, rate limiting, TLS по всем канонам (протоколы, шифры, HSTS, OCSP stapling) и три стратегии выкатки — rolling, blue-green и canary — с честной ценой каждой. Отдельно разберём управление секретами и конфигурацией: от дисциплины env-переменных и SOPS до Vault с динамическими секретами и OIDC в CI вместо долгоживущих ключей. Завершим раздел наблюдаемостью и реакцией: структурированные логи и Loki-стек, метрики Prometheus с PromQL-практикой, распределённый трейсинг на OpenTelemetry, алертинг как инженерная дисциплина со SLO, error budget и on-call — и инцидент-менеджмент: severity, роли, таймлайн, коммуникации и blameless postmortem с corrective actions.

  1. Terraform в деталях: state, модули, workspaces — фундамент. HCL-основы, ресурсы и data-источники, локалы и выводы, local vs remote state с блокировкой, весь цикл init → plan → apply → destroy, модули и их версионирование, workspaces, dynamic blocks, count и for_each, drift-detection в CI, импорт существующей инфраструктуры. Финал — полный пример: сервер, DNS-запись и вывод IP.

  2. Ansible и Pulumi — настройка и альтернатива. Инвентари и ad-hoc команды, полный плейбук (Docker, деплой приложения, Nginx через template, handlers, tags), роли и ansible-galaxy, vault для секретов, идемпотентность, --check/--diff. Затем Pulumi: стеки, конфиг, ресурсы на TypeScript и честное сравнение с Terraform.

  3. Управление секретами и конфигурацией — 12-factor config, валидация env через Zod, опасности .env и git, SOPS/age для репозиториев, Vault и динамические секреты, External Secrets Operator в Kubernetes, OIDC в CI вместо долгоживущих ключей, ротация и аудит.

  4. Nginx, TLS и стратегии деплоя — периметр. Архитектура master/worker, полный конфиг reverse proxy с upstream-балансировкой (least_conn, ip_hash, взвешенная), gzip/brotli, кэширование статики, rate limiting-зоны, certbot standalone/webroot, production-grade SSL-блок, HTTP→HTTPS редирект, blue-green/rolling/canary и Cloudflare как CDN/WAF перед origin.

  5. Логирование и метрики — первые два столпа наблюдаемости. Структурированные JSON-логи на pino, уровни и сэмплирование, Loki-стек с Promtail и LogQL, Grafana-дашборды, кратко про ELK. Метрики: scrape-конфиги Prometheus, Node Exporter, cAdvisor, собственные метрики через prom-client и практический PromQL — rate, increase, histogram_quantile.

  6. Трейсинг и алертинг: SLO, error budget, on-call — третий столп и реакция. OpenTelemetry: trace/span, propagation контекста, развёртывание Jaeger, инструментация Node.js, связывание логов и трейсов. Alertmanager: routes, inhibit_rules, receivers в Telegram/webhook, полные примеры правил (CPU, down, latency, error rate), SLI/SLO и error budget, основы on-call ротации.

  7. Инцидент-менеджмент и postmortem — дисциплина реакции. Что считать инцидентом, severity SEV1–SEV4, роли incident commander/comms/ops, таймлайн инцидента, коммуникации, blameless postmortem с corrective actions, связь error budget с инцидентами, on-call ротация и учения.

Иди строго по порядку: Ansible-плейбуки бессмысленны без серверов от Terraform, секреты должны лежать в хранилище раньше, чем их первым потребует плейбук, Nginx-конфиги деплоит Ansible, а метрики, алерты и инцидент-менеджмент имеют смысл только после того, как приложение реально ходит через Nginx. Не пропускай «Типичные ошибки и грабли» — это концентрат инцидентов: state в git, ручные правки в консоли облака, секреты в репозитории, алерты без действия, включённый HSTS на полгода до отладки HTTPS.

После седьмой главы у тебя будет: инфраструктура, полностью описанная Terraform-модулями с remote state и drift-контролем в CI; Ansible-роли, идемпотентно настраивающие сервер от Docker до Nginx; секреты в Vault/SOPS с ротацией и аудитом вместо файлов на серверах; production-grade TLS-терминация с HSTS и авто-продлением; выкатка без даунтайма; структурированные логи в Loki, метрики в Prometheus с RED-дашбордом, трейсы в Jaeger и алертинг с SLO и error budget; плюс отрепетированный порядок действий на инцидент — от severity и ролей до blameless postmortem с corrective actions. Это полный ответ на вопрос «расскажите о вашем продакшене» — не набор слов, а работающая система.