Настройка SMTP-сервера для отправки уведомлений по электронной почте
Вы можете настроить SMTP-сервер для отправки уведомлений по электронной почте с помощью направленного ациклического графа (DAG). При этом параметры SMTP-сервера хранятся в конфигурации Apache Airflow™, а учетные данные отправителя — в секрете Yandex Lockbox.
В руководстве в качестве SMTP-сервера используется Яндекс Почта (smtp.yandex.ru). Для проверки отправки уведомлений используется DAG-файл, в котором задача намеренно завершается ошибкой. При возникновении ошибки отправляется уведомление на указанный в DAG-файле адрес электронной почты.
Перед отправкой уведомлений подготовьте почтовый ящик отправителя:
- разрешите доступ к почтовому ящику для почтовых клиентов;
- создайте пароль для внешних приложений.
Чтобы настроить 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_from<адрес_почты_отправителя>Заполните поля вручную или загрузите конфигурацию из файла. Чтобы загрузить конфигурацию из файла, нажмите кнопку Загрузить из файла и выберите способ загрузки Текст. В поле Содержимое скопируйте следующую конфигурацию:
Конфигурация SMTP-сервера
[smtp] smtp_host = smtp.yandex.ru smtp_port = 465 smtp_starttls = False smtp_ssl = True smtp_mail_from = <адрес_почты_отправителя>Подробнее о параметрах для настройки SMTP-сервера читайте в документации Apache Airflow™
. - Сервисный аккаунт —
-
Настройте NAT-шлюз для подсетей кластера Managed Service for Apache Airflow™.
Создайте секрет Yandex Lockbox
Создайте секрет Yandex Lockbox со следующими настройками:
-
Имя —
airflow/connections/smtp_default. -
Тип секрета —
Пользовательский. -
Ключ —
conn. -
Значение — выберите Текст и укажите следующее содержимое:
{ "conn_type": "smtp", "login": "<адрес_почты_отправителя>", "password": "<пароль_для_внешних_приложений>" }
Подготовьте DAG-файл и запустите граф
-
Создайте локально файл с именем
test_smtp_notification.pyи скопируйте в него скрипт:from airflow.decorators import dag, task default_args = { "email": ["<адрес_почты_получателя>"], "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-файла из бакета может занять несколько минут.
-
Чтобы запустить граф, в строке с его именем нажмите кнопку
. -
Дождитесь, когда задача завершится ошибкой. При этом на указанный адрес электронной почты отправится уведомление.
Важно
Если параметры SMTP-сервера, указанные в конфигурации Apache Airflow™, заданы неверно, уведомления отправляться не будут.
Проверьте результат
Чтобы проверить результат в веб-интерфейсе Apache Airflow™ версии 2.11:
- В разделе DAGs откройте граф
test_smtp_notification. - Выберите задачу
failing_task. - На диаграмме Task Instance Duration выберите нужный запуск задачи.
- Перейдите на вкладку Logs.
- Убедитесь, что в логах присутствует строка
Sent an alert email to ['<адрес_почты_получателя>'].
Чтобы проверить результат в веб-интерфейсе Apache Airflow™ версии 3.1:
- В разделе DAGs откройте граф
test_smtp_notification. - Перейдите на вкладку Tasks и выберите задачу
failing_task. - Перейдите на вкладку Task Instances и выберите нужный запуск задачи.
- Перейдите на вкладку Logs.
- Убедитесь, что в логах присутствует строка
Sent an alert email to ['<адрес_почты_получателя>'].
Удалите созданные ресурсы
Некоторые ресурсы платные. Удалите ресурсы, которые вы больше не будете использовать, чтобы не платить за них: