Что такое Ansible: настройка серверов без агентов
Основы3 минРедакция Innovialabs
Коротко
Ansible — инструмент автоматизации, который по SSH выполняет на серверах описанные в YAML задачи; ничего ставить на серверы не нужно, а повторный запуск безопасен благодаря идемпотентности.
Что такое Ansible
Ansible — инструмент для автоматической настройки серверов (configuration management). Вы описываете в YAML-файле, каким должен быть сервер: какие пакеты установлены, какие пользователи созданы, какой конфиг у nginx. Ansible подключается к серверам по SSH и приводит их к этому состоянию.
Главная особенность — agentless: на управляемые серверы не нужно ставить никаких агентов. Достаточно SSH-доступа и Python, который есть почти в любом Linux-дистрибутиве. Ansible устанавливается только на машину, с которой вы запускаете команды (ноутбук или CI-сервер).
Четыре базовых понятия
Inventory
Список серверов, сгруппированных по ролям:
[web]
web1.example.com
web2.example.com
[db]
db1.example.com ansible_user=deploy
Группы позволяют сказать «выполни это на всех web-серверах» одной командой.
Модули
Модуль — готовый «кирпичик» для конкретного действия: apt ставит пакеты, copy и template кладут файлы, user управляет пользователями, service или systemd запускают сервисы. Модулей сотни, и большую часть задач можно решить без самописных shell-скриптов.
Playbook
Playbook — YAML-файл со сценарием: на каких хостах и какие задачи выполнить.
- name: Настроить web-серверы
hosts: web
become: true
tasks:
- name: Установить nginx
ansible.builtin.apt:
name: nginx
state: present
update_cache: true
- name: Положить конфиг сайта
ansible.builtin.template:
src: site.conf.j2
dest: /etc/nginx/sites-enabled/site.conf
notify: Перезапустить nginx
handlers:
- name: Перезапустить nginx
ansible.builtin.service:
name: nginx
state: reloaded
Запуск: ansible-playbook -i inventory.ini site.yml. Флаг --check покажет, что изменится, ничего не меняя.
Роли
Роль — способ упаковать задачи, шаблоны и переменные для одной цели (например, «nginx» или «postgres»), чтобы переиспользовать их в разных проектах.
Идемпотентность — главное свойство
Идемпотентность означает: повторный запуск даёт тот же результат и ничего не ломает. Задача state: present установит nginx, если его нет, и ничего не сделает, если он уже стоит. Ansible в отчёте помечает задачи как ok (уже в нужном состоянии) или changed (что-то изменено).
Поэтому playbook можно запускать регулярно — как проверку, что серверы не «уплыли» от эталона.
Важно: идемпотентность гарантируют модули, а не Ansible сам по себе. Задачи через shell или command выполняются каждый раз, и для них нужно самому прописывать условия (creates, when, changed_when).
Какую рутину убирает Ansible
- первичная настройка нового сервера: пользователи, SSH-ключи, firewall, обновления;
- установка и обновление ПО на десятках машин одновременно;
- раскатка конфигов nginx, PostgreSQL, systemd-сервисов из шаблонов;
- деплой приложения: забрать код, собрать, перезапустить сервис;
- массовые операции: смена ключа, ротация сертификата, патч безопасности;
- одинаковое окружение для staging и production.
Частые ошибки
- Всё через
shell. Теряется идемпотентность и читаемость. Сначала ищите подходящий модуль. - Пароли в открытом виде в переменных. Используйте Ansible Vault или внешний менеджер секретов.
- Запуск сразу на production. Сначала
--check --diffи staging. - Ручные правки на серверах после Ansible. Следующий запуск их перезапишет; любые изменения вносите в playbook.
- Огромный плоский playbook. Разбивайте на роли.
Ansible и Terraform: в чём разница
| Terraform | Ansible | |
|---|---|---|
| Основная задача | Создать инфраструктуру: серверы, сети, DNS | Настроить то, что внутри серверов |
| Подход | Декларативный, с state-файлом | Задачи по порядку, без отдельного state |
| Как работает | Через API облака | По SSH |
Их часто используют вместе: Terraform поднимает серверы, Ansible их настраивает.
Документация: docs.ansible.com.