Настройка SMTP-сервера для отправки уведомлений по электронной почте
Важно
Руководство тестировалось на кластерах с версией Apache Airflow™ ниже 3.0.
Вы может настроить SMTP-сервер для отправки уведомлений по электронной почте с помощью направленного ациклического графа (DAG). Данные для подключения к БД хранятся в Yandex Lockbox и автоматически подставляются в граф.
Чтобы реализовать настройку SMTP-сервера для отправки уведомлений по электронной почте:
- Подготовьте инфраструктуру.
- Создайте секрет Yandex Lockbox.
- Подготовьте DAG-файл и запустите граф.
- Проверьте результат.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
- Кластер Managed Service for Apache Airflow™: вычислительные ресурсы компонентов кластера (см. тарифы Managed Service for Apache Airflow™).
- Бакет Yandex Object Storage: использование хранилища и выполнение операций с данными (см. тарифы Object Storage).
- Секрет Yandex Lockbox: количество хранимых версий секрета и запросы к ним (см. тарифы Yandex Lockbox).
Подготовьте инфраструктуру
-
Создайте сервисный аккаунт
airflow-saс ролями:managed-airflow.integrationProvider;lockbox.payloadViewer.
Роль
lockbox.payloadViewerне обязательно выдавать на весь каталог. Достаточно назначить ее на конкретный секрет Yandex Lockbox после его создания. -
Создайте бакет Object Storage с произвольными настройками.
-
Отредактируйте ACL созданного бакета так, чтобы у сервисного аккаунта
airflow-saбыло разрешениеREAD. -
Создайте кластер Managed Service for Apache Airflow™ с параметрами:
- Сервисный аккаунт —
airflow-sa; - Имя бакета — имя созданного бакета;
- Использовать Lockbox Secret Backend — убедитесь, что эта опция включена.
В блоке Конфигурация Airflow задайте дополнительные свойства Apache Airflow™
для настройки SMTP-сервера:Ключ Значение smtp.smtp_hostsmtp.yandex.rusmtp.smtp_port465smtp.smtp_starttlsFalsesmtp.smtp_sslTruesmtp.smtp_mail_fromuser@yandex.ruЗаполните поля вручную или загрузите конфигурацию из файла (см. пример конфигурационного файла
). - Сервисный аккаунт —
Создайте секрет Yandex Lockbox
Создайте секрет Yandex Lockbox с именем airflow/connections/smtp_default и содержимым json.dumps(conn), где conn — подключение к SMTP-серверу.
conn = {
"conn_type": "smtp",
"login": "user@yandex.ru",
"password": "<пароль_для_внешних_приложений>"
}
В секрете airflow/connections/smtp_default будут сохранены данные для подключения к SMTP-серверу.
Подготовьте DAG-файл и запустите граф
-
Создайте локально файл с именем
test_smtp_notification.pyи скопируйте в него скрипт:from airflow.decorators import dag, task default_args = { "email": ["user@yandex.ru"], "email_on_failure": True, "email_on_retry": True } @dag(schedule=None, default_args=default_args) def test_smtp_notification(): @task def failing_task(): raise RuntimeError("some test error") failing_task() test_smtp_notification() -
Загрузите DAG-файл
test_smtp_notification.pyв созданный ранее бакет. В результате одноименный граф появится в веб-интерфейсе Apache Airflow™ автоматически. -
Убедитесь, что в разделе DAGs появился новый граф
test_smtp_notification.Загрузка DAG-файла из бакета может занять несколько минут.
-
Чтобы запустить граф, в строке с его именем нажмите кнопку
.
Проверьте результат
Чтобы проверить результат в веб-интерфейсе Apache Airflow™:
- В разделе DAGs откройте граф
test_smtp_notification. - Перейдите в раздел Graph.
- Выберите задание failing_task.
- Перейдите в раздел Logs.
- Убедитесь, что в логах отсутствует строка
some test error. Это значит, что запрос выполнен успешно.
Удалите созданные ресурсы
Некоторые ресурсы платные. Удалите ресурсы, которые вы больше не будете использовать, чтобы не платить за них: