Ansible: основи автоматизації, принципи роботи та приклади корисних playbook

event 24.02.2026 19:00
| category DevOps | person iron_will | comment 0 | visibility 103 | |

Вступ

Автоматизація інфраструктури стала стандартом у сучасній розробці та експлуатації програмного забезпечення. Концепції Infrastructure as Code (IaC), безперервної інтеграції та безперервного розгортання (CI/CD), керування конфігураціями та масштабування середовищ неможливо реалізувати ефективно без спеціалізованих інструментів. Одним із найпоширеніших рішень у цій сфері є Ansible.

Ansible - це агентless-система автоматизації, яка дозволяє керувати серверами, застосунками, мережевими пристроями та хмарною інфраструктурою за допомогою декларативних сценаріїв. Завдяки простому синтаксису на базі YAML та мінімальним вимогам до інфраструктури, він став популярним як серед DevOps-інженерів, так і серед backend-розробників та системних адміністраторів.

У цій статті розглянемо:

  • архітектуру та принципи роботи Ansible;

  • структуру playbook та ключові компоненти;

  • інвентаризацію, змінні, ролі;

  • приклади корисних playbook для реальних задач;

  • рекомендації щодо best practices;

  • типові помилки та підходи до масштабування.

Матеріал буде корисним як для junior-фахівців, які тільки починають працювати з автоматизацією, так і для middle/senior-інженерів, які хочуть систематизувати знання.

Що таке Ansible та як він працює

Ansible - це open-source інструмент автоматизації, написаний на Python, який працює за моделлю «control node → managed nodes».

Основні компоненти

  1. Control Node - машина, з якої виконується управління.

  2. Managed Nodes - сервери або пристрої, якими керують.

  3. Inventory - список хостів.

  4. Playbook - сценарій автоматизації.

  5. Module - атомарна операція (наприклад, встановлення пакета).

  6. Role - структурований набір задач, змінних і шаблонів.

Agentless-підхід

Ansible не потребує встановлення агентів на керовані сервери. Для Linux-хостів достатньо:

  • SSH-доступу

  • Python (зазвичай вже встановлений)

Для Windows використовується WinRM.

Принцип idempotency

Ansible модулі побудовані так, щоб бути ідемпотентними. Це означає:

  • Повторний запуск playbook не змінює систему, якщо вона вже у бажаному стані.

  • Конфігурація описує кінцевий стан, а не послідовність імперативних дій.

Встановлення та базова конфігурація

Встановлення (Linux)

sudo apt update
sudo apt install ansible

Перевірка версії:

ansible --version

Inventory-файл

Ansible за замовчуванням використовує файл /etc/ansible/hosts, але краще створити окремий inventory у проєкті.

Приклад inventory.ini:

[web]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11

[db]
db1 ansible_host=192.168.1.20

[all:vars]
ansible_user=deploy
ansible_ssh_private_key_file=~/.ssh/id_rsa

Перевірка доступності:

ansible all -i inventory.ini -m ping

Структура playbook

Playbook - це YAML-файл, який описує:

  • цільові хости

  • змінні

  • задачі

  • обробники (handlers)

Базовий приклад

---
- name: Install and start Nginx
hosts: web
become: true

tasks:
- name: Install nginx
apt:
name: nginx
state: present
update_cache: true

- name: Ensure nginx is running
service:
name: nginx
state: started
enabled: true

Запуск:

ansible-playbook -i inventory.ini nginx.yml

Модулі Ansible

Ansible має сотні вбудованих модулів:

  • apt / yum - керування пакетами

  • service - управління сервісами

  • copy - копіювання файлів

  • template - рендеринг Jinja2-шаблонів

  • user - створення користувачів

  • file - управління файлами та директоріями

Приклад з template

Файл templates/nginx.conf.j2:

server {
listen 80;
server_name {{ server_name }};

location / {
proxy_pass http://{{ backend_host }}:{{ backend_port }};
}
}

Playbook:

- name: Configure nginx
hosts: web
become: true

vars:
server_name: example.com
backend_host: 127.0.0.1
backend_port: 8080

tasks:
- name: Deploy nginx config
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: restart nginx

handlers:
- name: restart nginx
service:
name: nginx
state: restarted

Handlers запускаються лише у випадку змін.

Змінні та керування конфігурацією

Ansible підтримує багаторівневу систему змінних:

  • group_vars/

  • host_vars/

  • vars у playbook

  • extra-vars через CLI

Приклад структури

project/
inventory.ini
playbook.yml
group_vars/
web.yml

group_vars/web.yml:

nginx_worker_processes: 4
nginx_worker_connections: 1024

Roles: масштабована структура

Для продакшн-середовищ рекомендується використовувати roles.

Структура:

roles/
nginx/
tasks/
main.yml
handlers/
main.yml
templates/
defaults/
main.yml

Використання:

- hosts: web
become: true
roles:
- nginx


Roles дозволяють:

  • повторно використовувати код

  • розділяти відповідальність

  • створювати Galaxy-пакети

Корисні playbook для практичного використання

1. Розгортання LEMP-стеку

- name: Deploy LEMP stack
hosts: web
become: true

tasks:
- name: Install packages
apt:
name:
- nginx
- mysql-server
- php-fpm
- php-mysql
state: present
update_cache: true

2. Створення користувача з SSH-доступом

- name: Create deploy user
hosts: all
become: true

tasks:
- name: Create user
user:
name: deploy
groups: sudo
shell: /bin/bash
state: present

- name: Add SSH key
authorized_key:
user: deploy
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"

3. Автоматичне оновлення системи

- name: Update system packages
hosts: all
become: true

tasks:
- name: Upgrade packages
apt:
upgrade: dist
update_cache: true

Ansible та CI/CD

Ansible часто інтегрується з:

  • GitLab CI

  • GitHub Actions

  • Jenkins

Приклад використання в GitLab CI

deploy:
stage: deploy
script:
- ansible-playbook -i inventory.ini deploy.yml
only:
- main

Типовий сценарій:

  1. Merge у main.

  2. CI запускає ansible-playbook.

  3. Відбувається деплой на production.

Динамічний inventory та хмарні провайдери

Ansible підтримує:

  • AWS

  • GCP

  • Azure

  • Docker

  • Kubernetes

Приклад для AWS:

ansible-inventory -i aws_ec2.yml --graph

Це дозволяє автоматично отримувати список EC2-інстансів без ручного оновлення inventory.

Best Practices

1. Мінімізуйте логіку у playbook

Логіка повинна бути у ролях, не в основному файлі.

2. Використовуйте idempotent-модулі

Не застосовуйте shell/command без необхідності.

3. Використовуйте Ansible Vault

ansible-vault encrypt secrets.yml

4. Дотримуйтесь структури проєкту

  • окремий inventory для dev/stage/prod

  • змінні не хардкодити

  • використовувати roles

Типові помилки

  1. Використання shell замість модуля.

  2. Відсутність become там, де потрібні привілеї.

  3. Хардкод IP-адрес.

  4. Ігнорування idempotency.

  5. Запуск playbook без тестування на staging.

Висновки

Ansible - потужний та гнучкий інструмент автоматизації, який дозволяє:

  • керувати інфраструктурою як кодом;

  • стандартизувати конфігурацію серверів;

  • зменшити кількість ручних операцій;

  • інтегрувати деплой у CI/CD;

  • масштабувати інфраструктуру без втрати керованості.

Його ключові переваги - простота, відсутність агентів, читабельний синтаксис та багата екосистема модулів і ролей. Для невеликих проєктів достатньо базових playbook, але для production-середовищ рекомендовано використовувати ролі, структурувати inventory та впроваджувати контроль доступу через Vault.

Ansible не замінює повністю Terraform або Kubernetes, але чудово доповнює їх у задачах конфігураційного менеджменту та операційної автоматизації.

Грамотно організований Ansible-проєкт перетворює інфраструктуру на керовану, передбачувану та відтворювану систему.

Related posts

Zero Trust архітектура на практиці: принципи, впровадження та технічні кейси

Вступ Класичні моделі кібербезпеки, що базуються на периметрі мережі, давно втратили ефективність. Сучасні ІТ-інфраструктури характеризуються гібридністю, розподіленістю та активним використанням хмарних сервісів. У таких умовах концепція «довіряй,...

category Security person iron_will event 05/04/2026

Керування користувачами та правами доступу в Linux на enterprise-рівні

Вступ У сучасних корпоративних ІТ-інфраструктурах системи на базі Linux є критично важливими компонентами - від веб-серверів і контейнерних платформ до систем зберігання даних і DevOps-інструментів. У цьому контексті керування користувачами та права...

category Security person iron_will event 30/03/2026

Nmap: що це таке та як з ним працювати

Вступ У сучасному світі інформаційної безпеки та адміністрування мереж важливо мати інструменти, які дозволяють швидко отримувати інформацію про інфраструктуру, виявляти відкриті порти, служби та потенційні вразливості. Одним із найпотужніших і найп...

category Security person iron_will event 19/03/2026

Корисні команди Linux (Ubuntu): практичний довідник для системних адміністраторів та DevOps

Вступ Linux є основою більшості сучасної серверної інфраструктури. Веб-сервери, системи контейнеризації, хмарні платформи, CI/CD-пайплайни та мережеві сервіси у переважній більшості випадків працюють саме на Linux. Серед різних дистрибутивів особлив...

category CheatSheets person iron_will event 13/03/2026

PowerShell: Корисні скрипти, які знадобляться кожному

PowerShell уже давно перестав бути просто оболонкою для адміністрування Windows. Сьогодні це повноцінна платформа для автоматизації рутинних задач, управління інфраструктурою та інтеграції з різними сервісами. Незалежно від того, чи ви системний адмі...

category DevOps person iron_will event 09/03/2026

Systemd: розширені сценарії керування сервісами

Systemd давно перестав бути просто менеджером ініціалізації. Сьогодні це повноцінна екосистема для оркестрації процесів, управління ресурсами, налагодження залежностей і моніторингу сервісів у реальному часі. Незважаючи на це, більшість адміністратор...

category DevOps person iron_will event 03/03/2026
cookie
This website uses cookies to improve your experience. Learn more