Вы когда-нибудь мечтали о службе, которая неоднократно проверяет и пингует вас, как только обнаруживает определенное событие? — Научитесь его создавать и развертывать.

Вы когда-нибудь неоднократно нажимали f5, чтобы увидеть, стал ли какой-либо предмет или билет доступным на веб-сайте? Вы когда-нибудь лихорадочно проверяли API, чтобы увидеть, превышает ли скорость пороговое значение? Если да, то эта статья может быть для вас.

Эта статья предоставит вам инструменты для создания и развертывания полностью автоматизированной сверхлегкой службы уведомлений. Статья задумана как руководство по коду. Мы рассмотрим избранные варианты использования для мониторинга (веб-сайт, криптовалюта, API), рассмотрим типичные каналы уведомлений (электронная почта, SMS и Slack) и объясним, как развернуть сервис с помощью бессерверной среды. Вы можете найти финальное репо здесь. Поверьте мне, когда я говорю, что это НАМНОГО проще, чем вы думаете.

Статья построена следующим образом:

  1. Настраивать
  2. Мониторинг
  3. Уведомления
  4. Развертывание

Предварительные запросы:

Некоторый опыт работы с Python полезен, но большинство компонентов довольно просты. В нашем примере мы будем использовать бессерверную структуру с AWS, поэтому в идеале у вас должен быть некоторый опыт работы с AWS. В идеале у вас также должна быть учетная запись в AWS, если нет, вы можете создать учетную запись бесплатного уровня.

Кроме того, мы можем быстро перенастроить службу для использования GCP, Azure или одного из других поддерживаемых поставщиков. Мы развернем наш сервис как лямбда-функцию. Стоимость запуска лямбда-функции находится в пределах бесплатного уровня (если только вы не запускаете свои проверки несколько раз в минуту).

① Настройка

Поскольку serverless будет докеризировать наш проект под капотом, нам понадобится структура проекта, которая не является просто блокнотом Jupyter. Мой любимый редактор — Pycharm, но вы можете использовать любой.

Структура нашего проекта будет выглядеть так:

monitoring
|-api.py
|-crypto.py
|-website.py
notifier
|-sms.py
|-email.py
|-slack.py
|-telegram.py
handler.py
.env (includes all relevant variables)
serverless.yml (serverless config file)
requirements.txt (specifies dependencies)
package.json (configures our node dependencies - think of it like a more powerful requirements.txt but for node)
.gitignore

Прежде чем мы начнем, пожалуйста, установите node, npm и serverless (вам не нужно настраивать учетную запись панели управления). Хотя это и не является строго необходимым, я настоятельно рекомендую использовать некоторую форму управления средой Python. Я использую среды conda, но pipenv, pipex или pyenv тоже подойдут. Выбор в основном сводится к личному знакомству и вкусу. Сделав это, измените свой package.json на следующий (или создайте его, если у вас его нет).

{
  "devDependencies": {
    "serverless-python-requirements": "5.2.2"
  }
}

Затем, и это последний шаг настройки, запустите npm install (который установит serverless-python-requirements — бессерверный плагин должен связать наши зависимости Python).

② Мониторинг

Хорошо, давайте перейдем к мясу, не так ли?

Извлечение данных из API

Давайте начнем с мониторинга обменных курсов, чтобы узнать, когда будет отличное время, чтобы собрать все вещи и спонтанно вылететь в Таиланд. Мы собираемся запросить официальную бесплатную конечную точку, предоставленную ЕЦБ (Европейский центральный банк). К сожалению, данные, которые мы возвращаем, представляют собой XML, поэтому нам нужно проанализировать их, чтобы работать с ними.

Кроме того, нам понадобится requests для отправки этих запросов, поэтому запустите pip install requests.

Если последний обменный курс выше 35 тайских бат, мы распечатаем сообщение, чтобы сообщить нам об этом.

Мониторинг веб-страницы

Допустим, вы хотите отслеживать веб-страницу, когда продукт снова будет доступен. Для обработки HTML нам понадобится парсер. К счастью, Python предлагает beautifulsoup, парсер HTML. Итак, давайте продолжим и запустим pip install beautifulsoup4. Если вы хотите узнать больше о BeautifulSoup, ознакомьтесь со следующей статьей:



Хорошо, теперь предположим, что мы хотим купить эту красивую кисть.

Однако мы не хотим подписываться на рассылку новостей. Итак, давайте возьмем HTML с красивым супом и найдем кнопку add-to-cart. Если мы можем найти кнопку add-to-cart, это означает, что продукт доступен. Мы можем легко сделать это следующим образом:

Занимаюсь криптовалютой

Так недавно мне стало известно о сумасшедшей крипто-ДАО (децентрализованной автономной организации) под названием Страна чудес. Честно говоря, Страна чудес — довольно дикая финансовая конструкция, и, скорее всего, она лопнет, но мне она показалась интересной. Это работает так: как только кто-то ставит свой токен Time, он получает другой токен (wMemos), который можно использовать в качестве залога на Абракадабре для заимствования MIMтокена, который затем можно снова превратить в токен Time для создания высокозаемного капитала. позиция. Моя главная проблема заключалась в том, что обычно в кредитном пуле не было MIM токенов, и они периодически пополнялись. Поэтому я решил автоматизировать проверку. Я создал только службу мониторинга, но также вполне возможно взаимодействовать с блокчейном при определенных условиях (например, eth-brownie).

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

③ Уведомления

Теперь нам нужно уведомить себя (или других) о событиях, которые мы ранее отслеживали. Начнем с самого простого. Электронная почта.

Электронная почта

В этом примере я предполагаю, что вы используете Gmail для простоты. Кроме того, поскольку теперь мы используем конфиденциальные учетные данные для входа, я начну помещать их в файл .env и получать через os.getenv. Если вы хотите воспроизвести это, вам нужно указать свой пароль, адрес электронной почты и SMTP-сервер в файле .env. Обратите внимание: если вы используете Gmail, вам, скорее всего, придется создать пароль для конкретного приложения (инструкции здесь). Вы даже можете зайти так далеко и развернуть свой собственный SMTP-сервер, но я думаю, что это выведет лямбда-функцию из равновесия.

SMS

Далее СМС. SMS (служба коротких сообщений) немного вышла из моды с появлением WhatsApp, но по-прежнему работает довольно хорошо. Например, очень просто настроить отправку SMS через Twillio. Следует отметить, что отправка каждого SMS стоит денег. Однако Twilio предлагает бесплатную пробную учетную запись, которую вы можете использовать изначально. Теоретически вы можете просто создать неограниченное количество пробных учетных записей, используя функцию автоматической переадресации Gmail (или какую-либо другую службу мусорной почты). Предположим, что ваш адрес электронной почты — [email protected], тогда Gmail будет автоматически пересылать все электронные письма на адрес [email protected] в вашу исходную учетную запись.

Затем функция отправки становится до глупости простой. Однако не забудьте сначала запустить pip install twilio.

Слабый

И, наконец, Слэк. В наши дни практически каждая компания использует Slack, поэтому имеет смысл автоматизировать отправку сообщений в канал Slack.

Чтобы начать это, вам нужно быть администратором вашего рабочего пространства slack, а затем перейти на slack.com/apps. Нажмите Создать приложение, выберите С нуля, назовите службу и выберите правильное рабочее пространство. После того, как вы создали приложение, нажмите Входящие веб-перехватчики, переключите переключатель активации и нажмите Добавить новый веб-перехватчик в рабочую область.

Круто, мы закончили. Теперь у нас есть собственный URL-адрес веб-перехватчика, мы также поместили этот URL-адрес в наш файл .env, так как все, у кого есть этот URL-адрес, могут использовать его для публикации сообщений. Отправка сообщения очень проста и выглядит так:

Удивительный! Теперь мы успешно написали некоторые функции мониторинга и некоторые функции уведомлений. Давайте развернем это!

④ Развертывание

Для развертывания мы будем использовать бессерверную структуру. Предполагая, что вы следовали этому руководству и сделали все, что было описано в шаге ①, это должно означать, что вы готовы к работе. Однако вам потребуется настроить свои локальные учетные данные AWS. Вы можете проверить наличие своих учетных данных, запустив cat ~/.aws/credentials , вы должны увидеть что-то вроде этого:

[default]
aws_access_key_id=YOUR_KEY
aws_secret_access_key=YOUR_KEY
...

Если вы этого не видите, установите AWS-CLI и настройте свои учетные данные. Если у вас еще нет учетных данных, войдите в свою консоль AWS (веб) и выберите IAM. Сейчас есть два варианта, один немного сложнее другого.

Вариант 1 — Права root:

В целях тестирования я рекомендую использовать этот подход, потому что он намного быстрее. Войдите в консоль AWS -> найдите IAM -> выберите «Пользователи» -> нажмите на пользователя root -> «Учетные данные безопасности» -> «Создать ключ доступа», и все готово.

Вариант 2 — Новый пользователь:

Давайте создадим нового пользователя, назовем его notification-service-deployer и поставим галочку в поле Access key — Programmatic access.

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

Окончательный сценарий

Давайте быстро соберем наш окончательный сценарий:

Не стесняйтесь раскомментировать все, что вы хотите использовать. Вам придется настроить скрипт под свои нужды.

бессерверная конфигурация

Теперь последнее, чего не хватает, это то, что нам нужно настроить наш serverless.yml следующим образом (комментарии объясняют, что делает каждая часть):

И вуаля. Мы закончили, теперь мы готовы развернуть нашу службу уведомлений, просто запустив: sls deploy (которая создаст zip-файл и загрузит его на S3, откуда zip-файл можно использовать для создания лямбда-функции).

Удивительный! Вы развернули собственную службу уведомлений. И поверьте мне, когда я говорю вам, что это открывает еще одну новую банку червей. Вскоре вы сможете начать писать свои собственные API и ботов.

О, и если вам нравится читать подобные истории и вы хотите поддержать меня как писателя, подумайте о том, чтобы стать участником Medium. Это 5 долларов в месяц, что дает вам неограниченный доступ к историям на Medium. Если вы зарегистрируетесь по моей ссылке, я даже сделаю немного 🍩.