AWS Lambda: Отправка уведомлений на сервер Discord с помощью SNS Темы


Введение

Во-первых, я хотел бы поблагодарить @josuebustos за его статью, которая дала мне идею придумать альтернативную версию.
Вы можете интегрировать Lambda и SNS для отправки уведомлений, касающихся ваших ресурсов, это дает много возможностей, и мы рассмотрим базовую из них. Такие уведомления будут содержать информацию из SNS Topic в AWS. Мы узнаем, как отправлять сообщения на канал discord с помощью webhooks.

Хотите узнать больше о Lambda?
Нажмите здесь

Хотите узнать больше о Discord Webhook?
Нажмите здесь

Начало работы

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

Необходимые условия:

  • Аккаунт AWS
  • Сервер Discord

Создание сервера Discord и вебхука

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

В панели Discord Dashboard.

  1. Нажмите на зеленую кнопку в левом нижнем углу, чтобы создать сервер.

  2. Выберите один из следующих вариантов. Я рекомендую вам выбрать опцию «Создать свой собственный».

  3. Выберите один из следующих вариантов. Я рекомендую вам выбрать опцию «Для меня и моих друзей».

  4. Настройте свой сервер с именем и изображением, если хотите.

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

  6. Настройте канал по своему усмотрению, но сохраните опцию Text.

Время настроить вебхук

  1. Нажмите на опцию ‘Gear’ на названии канала, который вы хотите отредактировать.

  2. Выберите опцию Integrations, чтобы перейти в меню webhooks.
    Затем нажмите кнопку Создать вебхук.

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

  4. Скопируйте URL webhook и сохраните его где-нибудь, потому что мы будем использовать его в нескольких разделах.

Создание темы SNS

Если у вас уже есть тема SNS, которую вы хотите использовать для отправки информации на ваш канал discord, пропустите этот раздел.

Мы создадим простую тему, а затем вы сможете подключить эту тему к любому другому ресурсу.

Давайте войдем в службу SNS, выбрав Simple Notification Service.

Выберите опцию темы на боковой панели, а затем опцию Создать тему.

Используйте следующие параметры для простой темы SNS и нажмите на кнопку создать тему.

Теперь пришло время подписаться на тему SNS.
После создания появится это окно. Если его нет, выберите недавно созданную тему в разделе тем.
Нажмите на опцию Создать подписку.

Выберите следующие опции для создания простой подписки по Email, измените поле email на email, на который вы хотите получать уведомления, и нажмите кнопку Создать подписку.

Вы получите письмо с просьбой подтвердить подписку, сделайте это и продолжите.

Теперь у вас есть тема SNS, которую вы можете связать с любым другим ресурсом AWS, вот пример использования тем SNS и триггеров Codecommit.

Подготовьте Zip для слоев AWS Lambda

Чтобы использовать пакеты python в нашей лямбда-функции, нам нужно загрузить zip-файл с содержимым наших пакетов в Lambda Layers, следуйте шагам по созданию своего zip или используйте мой и пропустите создание.
Вы можете выполнять большинство шагов из терминала или с помощью графического интерфейса.
Создайте каталог с именем python. Это имя крайне важно, если вы хотите избежать возможных проблем.
Вы можете воспользоваться этой инструкцией или создать папку вручную.

$ mkdir python
Войдите в полноэкранный режим Выйдите из полноэкранного режима


Для следующих шагов вам понадобится терминал, не волнуйтесь, это легко, и помните, если вы не уверены в этом, скачайте мой zip здесь. Откройте терминал в недавно созданном каталоге или перейдите в него по cd.

$ cd /d/Documents/python
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Используйте эту инструкцию для установки необходимых пакетов внутри папки. В данном случае мы будем устанавливать discord-webhook.

$ pip3 install -t . discord-webhook
Войти в полноэкранный режим Выйти из полноэкранного режима
  1. Следующим шагом будет удаление ненужных файлов с помощью этой команды.
$ rm -r *dist-info __pycache__
Войти в полноэкранный режим Выйти из полноэкранного режима

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

  1. Теперь пришло время застегнуть папку. Вы можете использовать эту команду или сделать это вручную.
$ zip -r layer.zip python
Войти в полноэкранный режим Выход из полноэкранного режима

Загрузка zip-файла в лямбда-службу

Сначала зайдем в лямбда-сервис.

Выберите опцию Layer на боковой панели и выберите Create Layer


Загрузите zip-файл и заполните параметры, как показано на рисунке ниже.

Создание функции лямбда

Теперь пришло время создать функцию. Выберем опцию Function на той же службе, а затем кнопку Create function.

Это очень важный шаг. Чтобы упростить задачу, вместо опции «Автор с нуля» мы выберем опцию «Использовать чертеж». Затем мы найдем sns blueprint для python и выберем его. Затем нажмите на кнопку Configure

Выберите следующие опции. Выберите имя для вашей функции.


Выберите вашу тему из списка тем SNS, а затем нажмите кнопку Создать функцию.

Импорт слоя

Внутри вашей функции нажмите кнопку Слои.

Затем нажмите Добавить слой

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

Код для функции

Теперь вы можете заменить код функции на следующий:

from discord_webhook import DiscordWebhook, DiscordEmbed
import json

print('Loading function')


def lambda_handler(event, context):
    message = event['Records'][0]['Sns']['Message']
    print("From SNS: " + message)

    webhook = DiscordWebhook(url="replace with your webhook url")
    embed = DiscordEmbed(
        title="AWS",
        description=message,
        color="00ff00")

    #Select an image if you want
    #embed.set_image(url="")

    webhook.add_embed(embed)
    webhook.execute()

    return message
Войти в полноэкранный режим Выйти из полноэкранного режима

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

from discord_webhook import DiscordWebhook, DiscordEmbed
import json

print('Loading function')


def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    message = event['Records'][0]['Sns']['Message']
    print("From SNS: " + message)
    message_str=str(message)
    ###If sentence to filter the messages you want to receive.
    if "New" in message:
        webhook = DiscordWebhook(url="replace with your webhook url")
        embed = DiscordEmbed(
            title="AWS",
            description=message,
            color="00ff00")

        #embed.set_image(url="")
        webhook.add_embed(embed)
        webhook.execute()
    else:
        pass
    return message
Войти в полноэкранный режим Выйти из полноэкранного режима

Настройка тестового события

Перед началом тестирования необходимо настроить тестовое событие.
Нажмите на опцию test, а затем на опцию Configure test event.

Выберите имя для тестового события. Шаблон для тестового события уже выбран. Если нет, найдите шаблон Sns notification.

В конце нажмите Сохранить.

Протестируйте код

Перед тестированием нажмите кнопку deploy.

Теперь у вас все готово. Нажмите на кнопку Test и проверьте ваш канал discord.

А вот как это выглядит при срабатывании от сообщения SNS.

Если у вас возникли проблемы, связанные с модулем во время тестирования, пожалуйста, обратитесь к официальной документации здесь. Или попробуйте использовать python.zip, который находится в моем репозитории.

Заключение

Теперь вы знаете, как настроить нотификатор discord, который прослушивает SNS Topic, используя Lambdas.
Надеюсь, вы нашли это полезным.

Продолжайте учиться.

Оцените статью
devanswers.ru
Добавить комментарий