Настройка SMTP-сервера для отправки уведомлений по электронной почте
Важно
Руководство тестировалось на кластерах с версией Apache Airflow™ ниже 3.0.
Вы может настроить SMTP-сервер для отправки уведомлений по электронной почте с помощью направленного ациклического графа (DAG). Данные для подключения к БД хранятся в Yandex Lockbox и автоматически подставляются в граф.
Чтобы реализовать настройку SMTP-сервера для отправки уведомлений по электронной почте:
- Подготовьте инфраструктуру.
- Создайте секрет Yandex Lockbox.
- Подготовьте DAG-файл и запустите граф.
- Проверьте результат.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте инфраструктуру
-
Создайте сервисный аккаунт
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Заполните поля вручную или загрузите конфигурацию из файла (см. пример конфигурационного файла
). - Сервисный аккаунт —
Необходимые платные ресурсы
В стоимость поддержки описываемого решения входят:
- Плата за кластер Managed Service for Apache Airflow™: использование вычислительных ресурсов, выделенных хостам, и дискового пространства (см. тарифы Managed Service for Apache Airflow™).
- Плата за использование публичных IP-адресов, если для хостов кластера включен публичный доступ (см. тарифы Virtual Private Cloud).
- Плата за бакет Object Storage: хранение данных и выполнение операций с ними (см. тарифы Object Storage).
- Плата за Yandex Lockbox: хранение секретов (см. тарифы Yandex Lockbox).
Создайте секрет 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. Это значит, что запрос выполнен успешно.
Удалите созданные ресурсы
Некоторые ресурсы платные. Удалите ресурсы, которые вы больше не будете использовать, чтобы не платить за них: