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

24/02/2026
| DevOps | iron_will | 0 | 4 | |

Вступ

Автоматизація інфраструктури стала стандартом у сучасній розробці та експлуатації програмного забезпечення. Концепції 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

PowerShell: основні поняття та основи роботи з Windows та Active Directory

PowerShell - це потужне середовище автоматизації та керування системами, яке поєднує командний рядок, мову сценаріїв і доступ до .NET-екосистеми. Для IT-фахівців, що працюють із Windows-інфраструктурою, адмініструванням серверів або корпоративними ка...

DevOps iron_will 21/02/2026

Docker: що це таке, навіщо потрібен і чим відрізняється від віртуалізації

1. Що таке Docker Docker - це платформа контейнеризації, розроблена компанією Docker Inc., яка дозволяє упаковувати застосунок разом із залежностями в ізольоване середовище виконання - контейнер. Контейнер - це легковагова ізольована одиниця в...

IT Fundamentals iron_will 17/02/2026

Керівництво з роботи в Ubuntu: основи для системного адміністратора

Керівництво з роботи в Ubuntu: основи для системного адміністратора1. ВступUbuntu - це Linux-дистрибутив, який широко використовується як на серверних платформах, так і на робочих станціях. Для ефективної роботи з системою необхідно розуміти:структур...

IT Fundamentals iron_will 13/02/2026

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

Вступ Операційна система Linux спочатку проєктувалася як багатокористувацька. Це означає, що керування користувачами, групами та правами доступу є базовим механізмом безпеки системи. Коректне налаштування прав дозволяє обмежити доступ до ресурсів, м...

IT Fundamentals iron_will 24/01/2026

GitHub: призначення, можливості та правила роботи з гілками і комітами

Що таке GitHub GitHub — це хмарна платформа для зберігання, керування та спільної розробки програмного коду, яка базується на системі контролю версій Git. Вона використовується як індивідуальними розробниками, так і командами для ведення проєктів б...

DevOps iron_will 12/01/2026

SSH: що це таке, навіщо використовується та як налаштувати на Linux

1. Що таке SSH SSH (Secure Shell) — це криптографічний мережевий протокол, який використовується для безпечного віддаленого доступу до операційних систем, серверів і мережевих пристроїв через незахищені мережі. Основні функції SSH: шифрування...

instruction iron_will 12/01/2026

Comments (0)

Commenting is available to authorized users only.

This website uses cookies to improve your experience. Learn more