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

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

Вступ

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

Автоматизація деплою через GitHub Actions

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

category DevOps person iron_will event 26/05/2026

Kubernetes для новачків: базові концепції

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

category Kubernetes person iron_will event 17/05/2026

Що таке RAID: рівні RAID, принцип роботи та навіщо він потрібен

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

category System administration person iron_will event 10/05/2026

Docker: як оптимізувати розмір контейнера з 50 ГБ до керованого рівня

Вступ Контейнери давно стали стандартом де-факто для доставки застосунків у production. Проте з ростом складності систем часто виникає нетривіальна проблема - неконтрольоване збільшення розміру Docker-образів. Сценарій, коли образ досягає 30–50 ГБ,...

category DevOps person iron_will event 06/05/2026

Як знайти головну IP-адресу джерела DDoS у лог-файлі на 10 млн рядків у Linux

Вступ Коли сервер потрапляє під DDoS-атаку, одним із перших завдань адміністратора є швидке визначення джерел аномального трафіку. На практиці це означає аналіз великих лог-файлів вебсервера, балансувальника, firewall або reverse proxy. Якщо файл мі...

category System administration person iron_will event 25/04/2026

Kubernetes: сучасна платформа оркестрації контейнерів для production-середовищ

Вступ Kubernetes став де-факто стандартом для запуску контейнеризованих застосунків у production-середовищах. Якщо Docker вирішив проблему пакування застосунку разом із залежностями, то Kubernetes вирішує значно складніше завдання - як масштабувати,...

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