Автоматизация инфраструктуры: Ansible, AWX, Rundeck, SaltStack
Задача звучит просто: обновить конфигурацию nginx на 200 серверах. Руками — это два дня и неизбежно несколько расхождений между серверами. Наша команда за 15 минут пишет Ansible playbook, прогоняет его и получает идентичную конфигурацию на каждом сервере с фиксацией изменений в git. Автоматизация не просто ускоряет — она убирает класс проблем, возникающий от ручного управления.
Мы автоматизируем инфраструктуру с 2019 года — более 5 лет, выполнили свыше 50 проектов: от стартапов с 10 серверами до enterprise-кластеров на 2000 машин. Стек — Ansible, AWX, Rundeck, SaltStack. Подход всегда один: идемпотентность, версионирование, RBAC, документация. Результат — время простоя сокращается на 80%, а количество инцидентов из-за человеческого фактора падает втрое.
Почему идемпотентность — главное требование production?
Начинающие пишут Ansible как bash-скрипты с command и shell везде. Production-grade Ansible — это идемпотентные задачи с правильными модулями, управлением переменными и разделением ролей. Идемпотентность гарантирует, что при повторном запуске playbook не внесёт лишних изменений. Без неё каждое выполнение рискует сломать конфигурацию, а откат становится лотереей.
Структура role вместо плоского playbook
roles/ nginx/ tasks/ main.yml install.yml configure.yml handlers/ main.yml templates/ nginx.conf.j2 vhost.conf.j2 defaults/ main.yml vars/ main.yml files/ ssl/ defaults/main.yml — переменные с низким приоритетом, которые легко переопределить. vars/main.yml — переменные с высоким приоритетом, редко переопределяемые. Это важно: Ansible имеет 22 уровня приоритета переменных, и путаница между ними — источник труднодиагностируемых багов.
Идемпотентность — основное требование
Модуль template изменяет файл только если он изменился — это корректно. command: sed -i 's/old/new/' /etc/app.conf — не идемпотентно, выполнится каждый раз. Правильно: модуль lineinfile или replace.
Handlers и notify
Nginx не нужно перезапускать, если конфиг не изменился:
# tasks/configure.yml - name: Deploy nginx config template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf owner: root mode: '0644' validate: 'nginx -t -c %s' notify: Reload nginx # handlers/main.yml - name: Reload nginx systemd: name: nginx state: reloaded validate с nginx -t проверит конфиг перед копированием. Если валидация упала — задача не выполнится, сервер не получит сломанный конфиг. Handler сработает один раз в конце play, даже если несколько задач его нотифицировали.
Секреты через Ansible Vault
ansible-vault encrypt_string 'секретный_пароль' --name db_password создаёт зашифрованную строку, которую можно хранить прямо в vars/main.yml. Vault password file через --vault-password-file или переменную окружения ANSIBLE_VAULT_PASSWORD_FILE — для CI/CD без интерактивного ввода.
Динамический inventory
Для AWS — aws_ec2 плагин:
# inventory/aws_ec2.yml plugin: amazon.aws.aws_ec2 regions: - eu-central-1 filters: tag:Environment: production instance-state-name: running keyed_groups: - key: tags.Role prefix: role - key: placement.availability_zone hostnames: - private-ip-address ansible-inventory -i inventory/aws_ec2.yml --graph покажет автоматически сгенерированную структуру групп по тегам EC2. Больше не нужно вручную обновлять hosts-файл при изменении инфраструктуры.
Как AWX масштабирует Ansible на команду?
Запускать ansible-playbook с ноутбука — нормально для одного инженера. Когда playbooks запускают 10 человек, нужна централизация: кто, что, когда запускал, с каким результатом. AWX (open‑source версия Ansible Tower) решает именно это.
Что даёт централизация Ansible через AWX?
Job Templates — это playbook + inventory + credentials + extra vars. Создаётся один раз, запускается сколько угодно раз с одинаковыми параметрами или с override через Survey.
Survey — форма с параметрами, которую заполняет оператор перед запуском. Например: выбор окружения (staging/production), версия приложения для деплоя, флаг run_migrations. Это позволяет отдать запуск плейбука команде без доступа к коду.
Credentials в AWX хранятся зашифрованными и никогда не передаются пользователю — только используются при запуске. SSH-ключ, AWS credentials, Vault password — всё это хранится в AWX и не копируется на рабочие станции.
Пример: AWX as code через Ansible Collection awx.awx
- name: Create Job Template awx.awx.job_template: name: "Deploy Application" job_type: run inventory: "Production Inventory" project: "Infrastructure" playbook: deploy.yml credentials: - "SSH Production" - "Vault Password" survey_enabled: yes survey_spec: name: "Deploy Survey" description: "" spec: - question_name: "Application version" variable: app_version type: text required: yes - question_name: "Run database migrations" variable: run_migrations type: multiplechoice choices: "yes\nno" default: "no" state: present Вся конфигурация AWX хранится в git и применяется через тот же Ansible. Infrastructure as code рекурсивно.
RBAC в AWX
Принцип минимальных привилегий через Organizations → Teams → Users:
- Команда разработчиков видит только Job Templates для деплоя своего приложения и не может изменять Credentials
- Команда DevOps видит все Job Templates, может изменять Inventories
- Только администраторы AWX управляют Credentials и системными настройками
Workflow Job Templates — цепочки Job Templates с ветвлением по результату. Workflow: run tests → (success) → deploy to staging → (success) → run smoke tests → (success) → wait for approval → deploy to production. Нода approval блокирует workflow до ручного подтверждения — удобно для production deploys.
Rundeck: операционные задачи без программирования
Rundeck занимает другую нишу — не конфигурационный менеджмент, а операционные задачи. Перезапустить сервис, очистить кэш, создать backup, запустить SQL-скрипт. Целевая аудитория — не только DevOps, но и DBA, разработчики, поддержка.
Job Options с валидацией — Rundeck позволяет задать regexp для входных параметров. Нельзя случайно написать prod вместо production в имени окружения — форма не пропустит.
Интеграция с ServiceNow, PagerDuty, Jira — Job запускается автоматически по webhook при создании тикета определённого типа. Стандартная схема: алерт в PagerDuty → webhook в Rundeck → автоматический runbook (перезапуск сервиса, освобождение диска).
SaltStack: когда нужна скорость реакции
Salt работает в push-режиме (как Ansible) и в pull-режиме через постоянное ZeroMQ-соединение между мастером и миньонами. Это даёт задержку 1–3 секунды вместо нескольких секунд на установку SSH-соединения.
salt '*' cmd.run 'systemctl status nginx' выполнится на всех миньонах одновременно и вернёт результаты за 1–3 секунды. На 500 серверах.
salt-run jobs.active покажет все текущие выполняемые задачи. Для аварийных ситуаций (нужно срочно что-то выполнить на всей инфраструктуре) Salt быстрее Ansible.
Сравнение инструментов автоматизации
| Инструмент | Архитектура | Лучший сценарий |
|---|---|---|
| Ansible | Agentless, push, SSH | Конфигурационный менеджмент, деплой |
| AWX/Tower | UI для Ansible, RBAC, API | Командная работа, self‑service операции |
| Rundeck | Agentless, runbooks, RBAC | Операционные задачи для non‑DevOps |
| SaltStack | Agent, push+pull, ZeroMQ | Большой масштаб, скорость реакции |
Что входит в работу по автоматизации
Мы предоставляем полный цикл — от аудита до сопровождения. Вот как строится проект:
- Аудит текущей инфраструктуры — инвентаризация серверов, ПО, зависимостей, ручных процессов.
- Проектирование архитектуры автоматизации — выбор инструмента, структура roles, CI/CD‑пайплайн.
- Написание playbooks / jobs — идемпотентно, с Vault, динамическим inventory, тестами.
- Настройка централизованного управления — AWX / Tower, Rundeck, RBAC, webhooks.
- Документация — runbook, описание workflows, инструкции для операторов.
- Обучение команды — воркшоп по Ansible / AWX / Rundeck (2–3 дня).
- Post‑production поддержка — 1 месяц сопровождения, исправление инцидентов, доработка.
Все артефакты передаём в git‑репозиторий. После завершения проекта вы получаете полностью воспроизводимую инфраструктуру как код.
Сроки типовых задач
| Задача | Срок |
|---|---|
| Написание Ansible roles для стека (nginx + app + db) | 3–7 дней |
| Развёртывание и настройка AWX с RBAC | 3–5 дней |
| Миграция ручных задач на Rundeck (10–20 задач) | 1–2 недели |
| Построение полного GitOps‑пайплайна (git → AWX → prod) | 2–4 недели |
| Рефакторинг legacy Ansible на roles + Vault + dynamic inventory | 1–3 недели |
Стоимость рассчитывается индивидуально после анализа текущей инфраструктуры и задач автоматизации. Гарантируем фиксированную цену и сроки — без скрытых доработок. Средняя экономия клиентов после внедрения составляет от $5k–20k в год за счёт сокращения простоев и снижения числа инцидентов.
Почему выбирают нас
- Более 5 лет автоматизации инфраструктуры, 50+ завершённых проектов.
- Сертифицированные специалисты Red Hat Ansible Automation (RHCE).
- 98% проектов сданы в срок, средний MTTR снижен на 70%.
- Работаем с AWS, GCP, Azure, Yandex Cloud, Selectel.
- Используем Ansible и AWX — open‑source инструменты без vendor‑lock.
Получите консультацию инженера — мы проанализируем текущую инфраструктуру и подготовим план автоматизации за один рабочий день. Закажите аудит автоматизации и оцените экономию для вашего проекта.







