runcommand и cloudwatch (новости из AWS)

21 марта в AWS появилась возможность запускать команды на серверах EC2 RunCommand через CloudWatch.

Run Command

Как вы, наверное, уже догадались, этот сервис позволяет запустить любой код на инстансах под управлением linux или windows. Установка и активация агента достаточно проста и описана здесь.

Cloud Watch

Этот сервис состоит из нескольких компонентов: метрики и алерты, реагирование на разные AWS события и логи.

Какие юзкейсы?

Свои балансеры перед автоскейлинг группой

В cloudwatch есть такой источник событий, как autoscalling. То есть каждый раз, когда в группу добавляется или удаляется инстанс, cloudwatch запускает на другой группе серверов скрипт, который сможет обновить список серверов, например, в апстриме nginx.

Remediation по метрикам

Cloudwatch умеет делать чеки по метрикам и складывать результат в SNS топик. Также события из SNS топика можно выбрать как источник событий в Cloudwatch. Сложив 2+2 мы изобретём достаточно гибкий механизм ремедиации событий на группе серверов.
Дополнительно стоит отметить, что 22 марта в AWS появилась возможность делать трансформацию входящих событий (то есть можно запустить скрипт с параметрами, которые буду определены входящим сообщением).
Из минусов — скрипт всё равно будет запущен на группе инстансов, а не только на проблемном. Для того чтобы скрипт отработал только на нужном сервере, надо делать дополнительную проверку (например, ip адреса) в самом скрипте локально на инстансах. Это неудобно и костыльно.

Внешние события

Сообщения можно добавлять в SNS топики через API Gateway или напрямую. То есть можно запускать код на серверах по какому-то вебхуку. Примеры:
Действия по хуку из опсжини: вам ночью приходит алерт, вы нажимаете прямо в мобильном приложении опсжини кнопку «перезагрузить сервер», и он перезагружается.
Какой-то простой CI\CD: гитхаб дёргает api gateway, и все сервера идут на гитхаб за новым кодом или конфигом.
Chatops: аналогично, слак дергает api gateway и на серверах запускается какая-то команда.
Хочу заметить, что пусть сам api gateway относительно недорогой, но на каждый запрос аутентификации будет дёргаться достаточно дорогая лямбда.

Бесплатный крон

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

Обновление кода\картинок на инстансах из s3

По событиям в s3 можно вытаскивать на инстансы код\картинки\что угодно.

Выводы

Штука достаточно интересная, и у меня уже чешутся руки где-то её заюзать. Только я пока не знаю, где она может быть к месту в тех компаниях, с которыми я сейчас работаю. В любом случае, я советовал бы осторожно относиться к какой-то автоматической ремедиации, так как иногда это может принести больше проблем, чем пользы.

P.S. Спасибо Антону Кошевому и Диме Леоненко за рецензии на статью 😃