Настройка SMTP-сервера для отправки уведомлений по электронной почте
Вы может настроить 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_host
smtp.yandex.ru
smtp.smtp_port
465
smtp.smtp_starttls
False
smtp.smtp_ssl
True
smtp.smtp_mail_from
user@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
. Это значит, что запрос выполнен успешно.
Удалите созданные ресурсы
Некоторые ресурсы платные. Удалите ресурсы, которые вы больше не будете использовать, чтобы не платить за них: