Налаштування Ansible AWX/Semaphore для керування інвентарем і ролями
Ми часто бачимо, як команда впирається в проблему: хто запускав playbook у п'ятницю ввечері, під яким користувачем, з яким інвентарем? AWX та Semaphore вирішують саме це — дають GUI, RBAC, аудит-лог, планувальник та сховище credentials, щоб Ansible перестав бути інструментом одного інженера. Наш досвід показує, що правильно налаштована платформа прискорює роботу команди в 2–3 рази та виключає людські помилки при деплої.
Як вибрати між AWX та Semaphore?
AWX — upstream open-source проєкт Red Hat Ansible Automation Platform. Повнофункціональний, з API, workflow, динамічними інвентарями, інтеграцією з Vault. Вимагає Kubernetes (офіційно) або docker-compose (неофіційно). Споживає від 4 ГБ RAM на мінімальній інсталяції.
Semaphore — легковаговика альтернатива. Один бінарний файл на Go, PostgreSQL або MySQL, підтримка Git-репозиторіїв, базовий RBAC. Не закриває workflow та складні інтеграції, зате піднімається за 20 хвилин на VPS з 2 ГБ RAM.
| Критерій | AWX | Semaphore |
|---|---|---|
| Вимоги | Kubernetes / 8+ ГБ RAM | 1 бінарник / 2 ГБ RAM |
| RBAC | Детальний (org/team/user) | Базовий (admin/user) |
| Workflow (ланцюжки JT) | Так | Ні |
| Динамічний інвентар | Вбудований (AWS, GCP, Azure, NetBox...) | Через скрипт |
| Vault-інтеграція | Нативна | Через змінні середовища |
| API | Повний REST + WebSocket | Базовий REST |
AWX краще Semaphore в задачах з багаторівневим RBAC та складними workflow завдяки вбудованій підтримці workflow templates — це скорочує час налаштування ланцюжків плейбуків на 40–60%. Semaphore ж виграє в простоті та швидкості старту. Ми рекомендуємо AWX для продакшн-середовищ з командою від 5 осіб, Semaphore — для невеликих команд або експериментальних проєктів.
Розгортання AWX на K8s через AWX Operator
kubectl apply -f https://raw.githubusercontent.com/ansible/awx-operator/2.x.x/deploy/awx-operator.yaml
# awx-instance.yaml
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx-prod
spec:
service_type: ClusterIP
ingress_type: ingress
hostname: awx.internal
postgres_configuration_secret: awx-postgres-config
admin_user: admin
admin_password_secret: awx-admin-password
replicas: 1
task_replicas: 2
web_resource_requirements:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 2000m
memory: 4Gi
kubectl apply -f awx-instance.yaml -n awx kubectl get pods -n awx -w # чекаємо готовності Semaphore: швидкий старт
---
# docker-compose.yml services: semaphore: image: semaphoreui/semaphore:latest environment: SEMAPHORE_DB_HOST: postgres SEMAPHORE_DB_NAME: semaphore SEMAPHORE_DB_USER: semaphore SEMAPHORE_DB_PASS: ${DB_PASS} SEMAPHORE_ADMIN: admin SEMAPHORE_ADMIN_PASSWORD: ${ADMIN_PASS} SEMAPHORE_ADMIN_EMAIL: [email protected] SEMAPHORE_ACCESS_KEY_ENCRYPTION: ${KEY_ENCRYPTION} ports: - "3000:3000" depends_on: - postgres
---
# docker-compose.yml
services:
semaphore:
image: semaphoreui/semaphore:latest
environment:
SEMAPHORE_DB_HOST: postgres
SEMAPHORE_DB_NAME: semaphore
SEMAPHORE_DB_USER: semaphore
SEMAPHORE_DB_PASS: ${DB_PASS}
SEMAPHORE_ADMIN: admin
SEMAPHORE_ADMIN_PASSWORD: ${ADMIN_PASS}
SEMAPHORE_ADMIN_EMAIL: [email protected]
SEMAPHORE_ACCESS_KEY_ENCRYPTION: ${KEY_ENCRYPTION}
ports:
- "3000:3000"
depends_on:
- postgres
Як організувати інвентар в AWX?
В AWX інвентар — це ресурс з підтримкою джерел даних. Статичний інвентар імпортується з Git-репозиторію. Динамічний створюється через вбудовані inventory source:
- NetBox: підключається через плагін, синхронізує пристрої за тегами/статусом
- Amazon EC2: фільтрація за tags, регіонами, VPC
- VMware vCenter: інвентаризація всіх VM
Налаштування NetBox inventory source в AWX:
- Credentials → додати тип «NetBox» з URL та токеном
- Inventory → Sources → Add → Source: «NetBox»
- Вказати Credential, встановити «Update on launch»
- Налаштувати фільтри:
{"status": "active", "tag": "managed-by-ansible"}
При запуску Job Template інвентар автоматично оновлюється з NetBox — не потрібно тримати статичний файл.
RBAC та аудит
AWX підтримує Organizations → Teams → Users з детальними правами. Типова схема: команда розробки має доступ тільки до Job Templates своїх середовищ (dev/staging), не бачить production. Команда DevOps керує всім. Кожен запуск Job Template фіксується в Activity Stream із зазначенням користувача, часу, результату та повного виводу.
Credentials в AWX зберігаються в зашифрованому вигляді (AES-256) і ніколи не передаються у відкритому вигляді — користувач може запускати playbook з SSH-ключем, не бачачи його вмісту.
Що входить в роботу
Ми реалізуємо розгортання AWX або Semaphore під ключ. В результаті ви отримуєте:
- Робочий кластер / сервер з налаштованою платформою
- Інтеграцію з Git-репозиторіями (GitHub, GitLab, Bitbucket)
- Налаштовані інвентарі (статичний або динамічний)
- RBAC-ролі для ваших команд
- Документацію з адміністрування
- Навчання команди (2–3 години)
- Підтримку протягом місяця після впровадження
Ми гарантуємо стабільну роботу та безперебійне оновлення. Оцінимо ваш проєкт — просто напишіть нам.
Строки орієнтовно
Розгортання Semaphore з базовим проєктом, інвентарем та першими Job Templates — 1–2 дні. AWX на Kubernetes з динамічним інвентарем та RBAC — 3–5 днів. Інтеграція AWX з NetBox/VMware, налаштування Workflow Templates, підключення Vault — окремий блок 2–3 дні. Повний цикл впровадження для середнього проєкту займає до 8 робочих днів.
Чому варто автоматизувати Ansible?
Сертифіковані інженери з 5-річним досвідом в DevOps допоможуть вам уникнути типових помилок: зберігання credentials у відкритому вигляді, відсутність аудиту, хаотичне керування інвентарем. Ми провели понад 30 успішних проєктів з впровадження AWX та Semaphore. Наші гарантії — відсутність простоїв при деплої та прозорий процес. Зв'яжіться з нами для консультації — оцінимо вашу інфраструктуру та підготуємо пропозицію.







