⚙️ Операции как код

Если операцию нельзя запустить дважды, это не процедура, а воспоминание

Разбираю, какие операции у вас выполняются руками по чьей-то памяти, и перевожу их в идемпотентные плейбуки: разворот окружения, обновление базы, проверка безопасности, бэкап с восстановлением, выкатка с откатом. Отсюда и название: не только dev и ops, а все операции — кодом.

Бесплатно — 20 минут разговора, чтобы понять, что у вас делается руками и что из этого стоит автоматизировать.

5 дней
Срок разбора эксплуатации
идемпотентно
Каждая процедура запускается повторно без последствий
1 инженер
Без менеджеров и посредников

Проверьте на своей эксплуатации

Восемь вопросов про операции, которые выполняются регулярно. Отвечать никому не нужно — это для себя

Разворот нового окружения — процедура или память?

Если поднять копию прода можно только руками и по памяти одного человека, то тестового контура у вас фактически нет, а любая проверка идёт на бою.

Обновление базы накатывается одинаково везде?

Когда на стейдже и на проде разные шаги, разница между ними накапливается молча и всплывает в худший момент.

Можно ли запустить процедуру дважды подряд?

Скрипт, который ломается при повторном запуске, нельзя применить после сбоя. А сбой случается именно в середине.

Проверка на безопасность — регулярная или по случаю?

Если hardening делался один раз руками при установке, то текущее состояние серверов не знает никто, включая того, кто их настраивал.

Сколько шагов между «смержили» и «работает на проде»?

Каждый ручной шаг в этой цепочке — место, где однажды ошибутся. Их количество стоит хотя бы посчитать.

Есть ли процедура отката?

«Откатимся из бэкапа» — это не откат, а восстановление. Разница в часах простоя и в том, теряются ли данные за последние сутки.

Что произойдёт, если сервер исчезнет целиком?

Если ответ начинается со слов «ну, надо будет вспомнить» — время восстановления измеряется памятью, а не документом.

Кто может выполнить эти процедуры, кроме одного человека?

Автоматизация нужна не ради красоты. Она переводит знание из головы в репозиторий, где оно доступно любому.

Каждое «делается руками по памяти» — это не лень, а нормальное состояние системы, которая росла быстрее, чем её успевали описывать. Вопрос только в том, сколько таких мест и какое из них выстрелит первым.

Что перевожу в код

Не «берём эксплуатацию на себя», а делаем так, чтобы её мог вести кто угодно

// 01

Разворот и провижининг

Поднятие сервера, базы, окружения с нуля — не инструкцией в вики, а плейбуком, который выполняется одной командой и даёт одинаковый результат на любой машине.

  • Ansible-роли под ваши сервисы
  • Разворот PostgreSQL с нужными расширениями и тюнингом
  • Повторный запуск ничего не ломает
  • Одна и та же роль на стейдже и на проде
// 02

Обновления и миграции

Накат версий и схемы — процедурой с проверкой состояния до и после, а не последовательностью команд, которую кто-то помнит.

  • Миграции схемы с проверкой применимости
  • Обновление пакетов и версий сервисов
  • Точка отката, зафиксированная до начала
  • Сухой прогон перед боевым запуском
// 03

Проверка безопасности

Hardening и аудит — не разовое действие при установке, а прогон, который можно повторить в любой момент и сравнить с прошлым результатом.

  • Конфигурации по CIS в виде проверяемых правил
  • Прогон по расписанию или по требованию
  • Отчёт с отличиями от эталона
  • Исправление тем же плейбуком, что и проверка
// 04

Бэкап и восстановление

Восстановление — такая же автоматизированная процедура, как и бэкап. Иначе первый её запуск случается в день аварии.

  • Снятие копий по расписанию
  • Восстановление одной командой на отдельный стенд
  • Регулярная проверка, что копия разворачивается
  • Замер реального времени восстановления
// 05

Выкатка и откат

Путь от коммита до прода, описанный целиком, вместе с обратной дорогой. Откат — отдельная процедура, а не «поднимем из бэкапа».

  • Сборка и выкатка в вашем CI
  • Откат на предыдущую версию без потери данных
  • Одинаковая процедура для всех сервисов
  • Журнал того, что и когда выкатывалось
// 06

Наблюдаемость

Метрики и алерты, заведённые кодом вместе с сервисом, а не накликанные в интерфейсе после того, как что-то упало.

  • Дашборды и правила алертов в репозитории
  • Новый сервис приходит со своими метриками
  • Алерты, у которых есть адресат
  • Отсутствие алертов, на которые все привыкли не смотреть

Общее правило у всех шести: процедуру можно запустить повторно, и она не сломает то, что уже сделано. Это и есть идемпотентность — разница между плейбуком и скриптом, который «работает, если запускать в правильном порядке».

Что остаётся у вас

Артефакты, а не обещания: всё перечисленное лежит в вашем репозитории

Реестр
Список операций: какие руками, какие уже в коде
Плейбуки
Ansible-роли под ваши процедуры
Runbook
Что запускать в каком случае и чего ожидать
Прогон
Каждая процедура выполнена при вас хотя бы раз

Последний пункт важнее остальных: плейбук, который никто не запускал, ничем не отличается от инструкции в вики. Приёмка этапа — это запуск процедуры на вашей инфраструктуре, а не демонстрация кода.

Тарифы

Подписка на эксплуатацию с фиксированным SLA. Прозрачно, помесячно, без «человеко-часов»

Консультация

Консультация и второе мнение

3 500 ₽ / час

Посмотреть на вашу эксплуатацию со стороны, ответить на конкретный вопрос. Без обязательств продолжать

  • Созвон с разбором вашей ситуации
  • Письменное резюме после разговора
  • Ответ на вопрос «что делать прямо сейчас»
  • Оплата по фактическому времени
Задать вопрос
Реализация

Перевод операций в код

от 180 000 ₽

Пишу плейбуки по утверждённому плану и прогоняю каждый на вашей инфраструктуре. Этапами, приёмка — запуск процедуры, а не показ кода

  • Ansible-роли в вашем репозитории
  • Идемпотентность проверена повторным запуском
  • Runbook: что запускать в каком случае
  • Прогон каждой процедуры при вас
  • Оплата по принятым этапам
Обсудить реализацию

Что я не беру

Чтобы не тратить ваше и своё время на созвон, который кончится отказом

Круглосуточное дежурство

Одним инженером оно не закрывается. Если вам нужна гарантированная реакция в три часа ночи, нужна смена из нескольких человек, и честнее сказать это сразу.

Абонентское обслуживание

Ежемесячный платёж за готовность — не моя модель. Я беру конкретную работу, довожу её до результата и передаю. Возвращаться можно, зависеть от меня — не нужно.

Работа в штате с подчинением

Беру задачу и отвечаю за результат. Позиция внутри чужой иерархии с согласованием каждого шага подходит плохо обеим сторонам.

Ручные операции на постоянной основе

Если задача звучит как «делай это каждую неделю руками», мой ответ — «давайте я это автоматизирую один раз». Если автоматизировать нельзя, задача не моя.

Автоматизация того, что не понято

Нельзя описать кодом процесс, который никто не может объяснить словами. Сначала разбор, потом плейбук — в обратном порядке получается закреплённый в коде беспорядок.

Как идёт работа

От «эксплуатация как получится» к предсказуемому сервису под SLA

01

Разбор

Составляю реестр операций и смотрю, как каждая выполняется сейчас. Без этого автоматизировать нечего — можно только закрепить в коде существующий беспорядок

02

План

Фиксирую, что переводим в код первым: по частоте, по цене ошибки и по тому, сколько людей завязано. Прозрачная смета и сроки

03

Автоматизация

Пишу плейбуки и прогоняю каждый на вашей инфраструктуре. Этап принят тогда, когда процедура отработала при вас, а не когда написан код

04

Передача

Отдаю репозиторий, runbook и реестр. Дальше процедуры запускает ваша команда — в этом и смысл работы

Инструменты, с которыми работаем

Открытый стек и индустриальные стандарты — без вендор-лока

Docker Kubernetes k3s Terraform Ansible GitLab CI GitHub Actions ArgoCD Helm Prometheus Grafana Loki Nginx / Angie PostgreSQL Yandex Cloud Selectel AWS Linux

Частые вопросы

Штатный инженер решает задачи по мере поступления, и знание о том, как всё устроено, остаётся у него в голове. Я делаю обратное: превращаю операции в код, который лежит у вас в репозитории и работает независимо от того, кто его запускает. После моей работы вам нужно меньше людей на эксплуатацию, а не больше. Абонемента, на котором вы бы от меня зависели, нет.

Ни то, ни другое. Я не занимаю его место и не встаю рядом на дежурство. Я забираю у него рутину: те процедуры, которые он выполняет руками каждую неделю, после автоматизации запускаются командой и перестают есть его время. Обычно это и есть причина, по которой он не успевает делать более важные вещи.

Работаю по минимально необходимым правам, через именованный доступ, без общих паролей. Для разбора обычно хватает доступа только на чтение. Всё, что я делаю на этапе реализации, лежит в вашем репозитории в виде кода — то есть проверяется до запуска и откатывается после. При необходимости подписываем NDA.

SLA у меня нет, и это осознанно: гарантировать время реакции круглосуточно один инженер не может, а обещать то, что не выдержишь, хуже, чем сразу сказать «нет». Моя работа — сделать так, чтобы реакция требовалась реже: процедура восстановления запускается одной командой, и для этого не нужен именно я.

Да, и обычно так и стоит. Начните с консультации на час: разберём одну конкретную операцию, которая больше всего раздражает. Если после этого разговора станет понятно, что таких мест много, есть смысл делать полный разбор.

Тем лучше — значит, часть пути пройдена и ломать это незачем. В разборе я смотрю не на то, есть ли инструменты, а на то, какие операции всё ещё выполняются мимо них. Обычно это разворот окружений, работа с базой и всё, что связано с восстановлением.

Снимем с вас эксплуатацию

Оставьте контакт — разберём вашу инфраструктуру, честно скажем, что берём на себя, и предложим подходящий тариф

Отвечу в ближайшее время. Без спама и навязчивых звонков.