Интеграция Yandex Cloud Postbox с внешними системами с помощью вебхуков
Важно
Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.
В этом руководстве вы настроите передачу событий Yandex Cloud Postbox в Yandex Data Streams и вызов вебхуков
Реализовать предлагаемое решение можно с помощью консоли управления
Чтобы настроить передачу событий и их обработку:
- Подготовьте облако к работе.
- Создайте сервисные аккаунты.
- Создайте статический ключ доступа.
- Создайте базу данных Managed Service for YDB.
- Создайте поток данных Data Streams.
- Подготовьте ресурсы Yandex Cloud Postbox.
- Подготовьте ресурсы Cloud Functions.
- Протестируйте работу решения.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- плата за операции с YDB и хранение данных (см. тарифы Yandex Managed Service for YDB);
- плата за хранение данных Data Streams (см. тарифы Yandex Data Streams);
- плата за количество вызовов функции, вычислительные ресурсы, выделенные для выполнения функции, и исходящий трафик (см. тарифы Cloud Functions);
- плата за использование Yandex Cloud Postbox (см. тарифы Yandex Cloud Postbox).
Создайте сервисные аккаунты
Создайте два сервисных аккаунта:
yds-functions— от его имени будет вызываться функция Cloud Functions и будут записываться события в поток данных Data Streams;postbox-user— от его имени будут отправляться письма через Yandex Cloud Postbox.
-
Создайте сервисный аккаунт
yds-functions:Консоль управления- В консоли управления
выберите каталог, в котором вы будете создавать инфраструктуру. - В списке сервисов выберите Identity and Access Management и нажмите кнопку Создать сервисный аккаунт.
- В поле Имя укажите имя
yds-functions. - Нажмите кнопку
Добавить роль и выберите ролиyds.editorиfunctions.functionInvoker. - Нажмите кнопку Создать.
- В консоли управления
-
Аналогичным образом создайте сервисный аккаунт
postbox-userи назначьте ему рольpostbox.sender.
Создайте статический ключ доступа
Создайте статический ключ доступа, который будет использоваться для отправки писем:
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Identity and Access Management и в списке сервисных аккаунтов выберите
postbox-user. В открывшемся окне:-
На панели сверху нажмите кнопку
Создать новый ключ и выберите Создать статический ключ доступа. -
Нажмите кнопку Создать.
-
Сохраните идентификатор и секретный ключ.
Внимание
После закрытия диалога значение ключа будет недоступно.
-
Создайте базу данных Managed Service for YDB
Чтобы создать поток данных, в который будут отправляться события Yandex Cloud Postbox, потребуется база данных Managed Service for YDB. Создайте бессерверную базу данных Managed Service for YDB:
- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Managed Service for YDB и нажмите кнопку Создать базу данных.
- В поле Имя укажите
postbox-events-ydb. - В поле Тип базы данных выберите
Serverless. - Другие параметры базы данных оставьте без изменений и нажмите кнопку Создать базу данных.
Дождитесь запуска БД. В процессе создания база данных будет находиться в статусе Provisioning, а когда станет готова к использованию, ее статус изменится на Running.
Создайте поток данных Data Streams
Создайте поток данных, в котором будут регистрироваться события Yandex Cloud Postbox:
- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Data Streams и нажмите кнопку Создать поток.
- В поле База данных выберите созданную ранее базу данных
postbox-events-ydb. - В поле Имя укажите имя потока данных
postbox-events-stream. - В поле Режим тарификации выберите
По фактическому использованию. - Другие параметры потока данных оставьте без изменений и нажмите кнопку Создать.
Дождитесь запуска потока данных. Когда поток станет готов к использованию, его статус изменится с Creating на Active.
Подготовьте ресурсы Yandex Cloud Postbox
В сервисе Yandex Cloud Postbox настройте конфигурацию для регистрации событий в Data Streams, создайте адрес для отправки писем и пройдите проверку прав на домен.
Создайте конфигурацию Yandex Cloud Postbox
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Cloud Postbox.
-
На панели слева выберите
Конфигурации и нажмите кнопку Создать конфигурацию. -
В поле Имя укажите имя конфигурации
postbox-events-config. -
В блоке Подписки нажмите кнопку Добавить и в появившейся форме:
- В поле Название укажите название подписки
postbox-events-subscribe. - В поле Поток данных выберите поток данных
postbox-events-stream. - Включите опцию Включено, чтобы активировать подписку.
- В поле Название укажите название подписки
-
Другие параметры конфигурации оставьте без изменений и нажмите кнопку Создать конфигурацию.
Создайте адрес Yandex Cloud Postbox
-
На вашем компьютере сгенерируйте ключ
privatekey.pemдля создания DKIM-подписи. Для этого в терминале выполните команду:openssl genrsa -out privatekey.pem 2048Примечание
В операционных системах Linux и macOS утилита
opensslпредустановлена. В Windows эту утилиту необходимо предварительно установить. Подробнее см. на сайте проекта. -
Создайте адрес Yandex Cloud Postbox:
Консоль управления- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Cloud Postbox.
- На панели слева выберите
Адреса и нажмите кнопку Создать адрес. - В поле Домен укажите домен, с которого вы будете отправлять письма. Домен может быть любого уровня и должен принадлежать вам.
- В поле Селектор укажите селектор, например
postbox. Указанный селектор должен использоваться только в одной ресурсной записи — той, которую необходимо создать при прохождении проверки прав на домен. - В поле Конфигурация выберите созданную ранее конфигурацию
postbox-events-config. - В поле Приватный ключ вставьте содержимое файла приватного ключа
privatekey.pem, созданного на предыдущем шаге. - Другие параметры адреса оставьте без изменений и нажмите кнопку Создать адрес.
- В открывшемся списке адресов нажмите на строку с вновь созданным адресом.
- На странице с информацией об адресе в блоке Подтверждение подписи из поля Значение скопируйте и сохраните значение TXT-записи.
- В консоли управления
Пройдите проверку владения доменом
Чтобы отправлять письма, подтвердите владение доменом. После создания адреса на его странице сформируются настройки DKIM-подписи. Их нужно указать в качестве значений ресурсной записи, которую необходимо добавить в вашу доменную зону. Вы можете добавить запись у вашего регистратора или в сервисе Yandex Cloud DNS, если вы делегировали ваш домен Yandex Cloud.
Пример создания ресурсной записи в Yandex Cloud DNS
-
В консоли управления
выберите каталог, в котором находятся адрес и ваша доменная зона.Если у вас еще нет публичной зоны DNS, создайте ее.
-
Выберите сервис Cloud DNS.
-
Выберите вашу доменную зону.
-
Нажмите кнопку Создать запись.
-
В поле Имя укажите часть имени, сгенерированного при создании адреса, без домена в формате
<селектор>._domainkey. Напримерpostbox._domainkey.Примечание
Для других DNS-сервисов может потребоваться скопировать запись целиком. Итоговая запись должна иметь вид
<селектор>._domainkey.<домен>., напримерpostbox._domainkey.example.com.. -
В поле Тип выберите
TXT. -
В поле Значение скопируйте содержимое поля Значение из блока Подтверждение подписи. Обратите внимание, что значение записи нужно взять в кавычки, например:
"v=DKIM1;h=sha256;k=rsa;p=M1B...aCA8" -
Нажмите кнопку Создать.
-
Перейдите в сервис Cloud Postbox.
-
Выберите созданный адрес.
-
Нажмите кнопку Проверить адрес. Если запись верна, статус проверки на странице адреса изменится на
Success.
Ответы DNS-сервера кешируются, поэтому возможны задержки при обновлении ресурсной записи.
Подготовьте ресурсы Cloud Functions
Создайте функцию, которая будет отправлять вебхук, а также триггер, который будет вызывать эту функцию при регистрации событий в потоке данных.
Создайте функцию
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Cloud Functions.
-
Создайте функцию:
- Нажмите кнопку Создать функцию.
- В поле Имя укажите имя функции
postbox-webhook. - Нажмите кнопку Создать.
-
Создайте версию функции:
-
В открывшемся окне Редактор выберите
Python 3.12. -
Отключите опцию Добавить файлы с примерами кода.
-
Нажмите кнопку Продолжить.
-
В поле Способ выберите
Редактор кода. -
Создайте 2 файла:
-
файл
requirements.txt, содержащий список необходимых зависимостей:requests -
файл
index.py, содержащий код функции:import requests # Адрес webhook'а который будет вызван WEBHOOK_URL = "<URL_вебхука>" def handler(event, context): requests.post(WEBHOOK_URL, json=event) return { "statusCode": 200, }Где
WEBHOOK_URL— адрес вебхука, на который будет отправлен запрос.
-
-
В поле Точка входа укажите
index.handler. -
В блоке Параметры укажите:
- Таймаут —
10 секунд. - Память —
128 МБ.
- Таймаут —
-
Другие параметры версии функции оставьте без изменений и нажмите кнопку Сохранить изменения.
-
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Cloud Functions.
-
Создайте функцию:
- Нажмите кнопку Создать функцию.
- В поле Имя укажите имя функции
postbox-webhook. - Нажмите кнопку Создать.
-
Создайте версию функции:
-
В открывшемся окне Редактор выберите
Node.js 22. -
Отключите опцию Добавить файлы с примерами кода.
-
Нажмите кнопку Продолжить.
-
В поле Способ выберите
Редактор кода. -
Создайте файл
index.jsс кодом функции:// Адрес webhook'а который будет вызван const WEBHOOK_URL = '<URL_вебхука>' module.exports.handler = async function (event, context) { await fetch(WEBHOOK_URL, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(event), }); return { statusCode: 200, }; };Где
WEBHOOK_URL— адрес вебхука, на который будет отправлен запрос. -
В поле Точка входа укажите
index.handler. -
В блоке Параметры укажите:
- Таймаут —
10 секунд. - Память —
128 МБ.
- Таймаут —
-
Другие параметры версии функции оставьте без изменений и нажмите кнопку Сохранить изменения.
-
Создайте триггер
- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Cloud Functions.
- На панели слева выберите
Триггеры и нажмите кнопку Создать триггер. - В поле Имя введите имя триггера
postbox-events-trigger. - В поле Тип выберите
Data Streams. - В поле Запускаемый ресурс выберите
Функция. - В блоке Настройки Data Streams выберите поток данных
postbox-events-streamи сервисный аккаунтyds-functions. - В блоке Настройки функции выберите функцию
postbox-webhookи сервисный аккаунтyds-functions. - Нажмите кнопку Создать триггер.
Протестируйте работу решения
-
Удобным вам способом отправьте несколько тестовых писем с использованием адреса Yandex Cloud Postbox и статического ключа доступа, созданных ранее.
-
Убедитесь, что письма доставлены. Для этого проверьте почту, на которую вы отправляли эти письма.
-
Убедитесь, что данные об отправке писем поступают в сервисы:
-
Проверьте поток данных:
Консоль управления-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Data Streams.
-
Выберите поток данных
postbox-events-stream. -
Перейдите на вкладку
Просмотр данных.На графиках должны отобразиться события отправки писем.
-
-
Посмотрите логи функции и графики мониторинга триггера.
-
Убедитесь, что во внешней системе были вызваны вебхуки с данными о событиях по отправленным письмам.
-
В результате выполнения руководства вы сможете вызывать вебхуки внешней системы в ответ на события, связанные с отправкой писем через Yandex Cloud Postbox.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите триггер для вызова функции Cloud Functions.
- Удалите функцию Cloud Functions.
- Удалите поток данных Data Streams.
- Удалите базу данных Managed Service for YDB.
- Удалите адрес и конфигурацию Yandex Cloud Postbox.
- При необходимости удалите созданные сервисные аккаунты.
- При необходимости удалите ресурсную запись и публичную зону DNS.