Уведомления Ansible по SMS с Twilio

Автор: | 29.07.2026

Ничто так не портит рабочий день разработчика, как возвращение с обеда и обнаружение сломанного развертывания приложения. Но кто захочет брать ноутбук на обед, чтобы проверить ход развертывания? Жизнь была бы намного проще, если бы вы могли получать SMS-сообщения на телефон при успешном завершении развертывания или если что-то пошло катастрофически не так и требует исправления.

К счастью, если вы используете инструмент управления конфигурацией Ansible в процессе развертывания вашего приложения, существует новый основной модуль уведомлений под названием Twilio для отправки критических обновлений о развертывании по SMS, так что вам нужен только мобильный телефон во время поездок к тако-фудтраку.

Ansible — это инструмент с открытым исходным кодом для управления конфигурацией и развертывания приложений. Разработчики пишут инструкции по развертыванию в файлах, известных как плейбуки, которые инструктируют Ansible автоматизировать установку пакетов, настройку пользователей, извлечение исходного кода из системы контроля версий и выполнение множества других задач развертывания на удаленных узлах. Развертывания могут быть полностью автоматизированы от одного узла до тысяч, требующих подготовки и конфигурации.

Однако даже полностью автоматизированные развертывания могут столкнуться с непредвиденными проблемами. Например, во время развертывания на удаленном сервере может оборваться подключение к Интернету. Когда что-то ломается, вы хотите знать об этом немедленно, чтобы начать решать проблему. Вот где вступают в игру модули уведомлений Ansible. Уведомления оповещают соответствующих лиц о проблемах с развертыванием или о чем-то необычном.

В Ansible 1.6 существует пятнадцать основных модулей уведомлений. Шесть из этих пятнадцати модулей были добавлены после предыдущего релиза Ansible 1.5 в конце февраля. Каждый модуль уведомлений упрощает интеграцию внешней службы в плейбук, требуя всего несколько строк YAML. Многие из этих служб, такие как Flowdock, Campfire, Hipchat и Slack, отлично подходят для трансляции сообщений всей команде разработчиков, пока они находятся за своими компьютерами.

Однако SMS-сообщение — это самый простой способ получить уведомление, когда вы находитесь вдали от компьютера и развертывание с помощью Ansible идет не так. Здесь может быть полезен новый основной модуль уведомлений Twilio для Ansible. Модуль уведомлений Twilio позволяет плейбуку Ansible отправлять SMS-сообщения через API Twilio.

Давайте пройдемся по примеру плейбука развертывания Ansible, чтобы увидеть, как использовать модуль уведомлений Twilio. Есть пример репозитория плейбуков на GitHub, которому вы можете следовать в ходе статьи. Обратите внимание на три тега в репозитории. Шаг 1 примера — простой плейбук, который использует модуль get_url для загрузки файла с GitHub, шаг 2 демонстрирует реализацию, когда get_url выходит из строя и необходимо отправить уведомление о сбое загрузки необходимого файла, а шаг 3 исправляет проблему с загрузкой файла и пропускает выполнение модуля Twilio, поскольку шаг загрузки файла успешен.

Мы начнем с первого примера тега примера-шага-1, чтобы показать структуру примера плейбука.

В базовом каталоге есть несколько важных файлов:

— ansible-twilio.yml применяет роль «common» ко всем узлам, указанным в файле hosts.

— Файл hosts настроен с localhost в качестве значения по умолчанию для целей тестирования. Вы также можете указать один или несколько удаленных серверов.

— Файл requirements.txt предназначен для менеджера установки Python pip.

— group_vars/all указывает две переменные: URL для загрузки файла и место назначения. В качестве примера мы загрузим tarball (.tar.gz расширение) ветки gh-pages книги развертывания Full Stack Python, которую я написал.

— roles/common/tasks/main.yml содержит модуль get_url, который мы будем использовать для загрузки файла .tar.gz.

Мы можем запустить плейбук Ansible командой `ansible-playbook ansible-twilio.yml`, и мы увидим следующее успешное выполнение:

Теперь у нас есть файл .tar.gz, загруженный на все узлы, указанные в нашем файле hosts.

Давайте добавим модуль Twilio в плейбук, чтобы мы могли получать уведомления в случае сбоя загрузки файла get_url.

Необходимо изменить пару файлов. Сначала мы добавим два модуля в файл `roles/common/tasks/main.yml`. Мы также добавим опцию `ignore_errors: yes` к задаче `get_url`, чтобы, если загрузка файла не будет успешной, плейбук не завершался немедленно при сбое.

Мы видим в теге примера-шага-2, что теперь мы проверяем, существует ли файл, и если нет, модуль Twilio отправляет SMS-уведомление с URL, вызвавшего сбой.

Файл `group_vars/all` также нуждается в нескольких дополнительных переменных, чтобы их можно было использовать в плейбуке.

Прежде чем мы сможем выполнить улучшенный плейбук и использовать модуль уведомлений Twilio, вам нужно будет зарегистрироваться в Twilio, приобрести номер телефона и получить учетные данные из страницы сведений об учетной записи. Если у вас уже есть учетная запись Twilio с номером телефона, вы можете перейти к следующему разделу.

Сначала зарегистрируйтесь для бесплатной учетной записи Twilio.

После регистрации Twilio быстро проверит, что вы человек, а не злонамеренный спам-бот, отправив вам SMS или совершив голосовой вызов.

Если вы выберете проверку по SMS, вы получите сообщение, подобное этому, для ввода в форму регистрации.

Twilio назначит случайный номер телефона после завершения процесса регистрации. Вы также можете найти другой номер через веб-интерфейс Twilio или приобрести его программно через API.

Ответы на дополнительные вопросы о номерах телефонов можно найти на странице часто задаваемых вопросов о номерах телефонов.

Нам нужно только получить учетные данные с панели управления учетной записью или страницы сведений об учетной записи и включить их в переменные среды. Файл `set_envs.sh` в примере-шаге-2 включает заполнители для этих необходимых переменных:

Теперь мы можем повторно запустить измененный плейбук с нашим новым номером и учетными данными, экспортированными в среду. Убедитесь, что вы удалили существующий загруженный файл, полученный на шаге 1, перед выполнением этого шага, иначе Ansible предположит, что модуль get_url выполнился успешно. Мы увидим следующий вывод:

Телефон с номером, указанным в переменной `alert_number`, теперь должен увидеть SMS-сообщение с указанием URL, который не удалось успешно загрузить.

В качестве последнего шага исправим проблему с URL, чтобы показать, что плейбук Ansible не отправляет SMS-сообщение при успешной загрузке файла.

Теперь, когда мы снова запустим скрипт сборки, файл .tar.gz будет загружен, а плейбук пропустит уведомление SMS от Twilio о сбое загрузки.

Вот как вы можете использовать новый модуль Twilio Ansible 1.6 для уведомления вас о важных событиях при развертывании.

Напишите мне по адресу mmakai@twilio.com, в Twitter @mattmakai или на GitHub makaimc с дальнейшими вопросами, комментариями или улучшениями плагина уведомлений Twilio или репозитория примеров.