Отправка писем с помощью Postbox из Managed Apache Airflow
В этом посте я расскажу, как настроить почтовые уведомления об ошибках в Managed Apache Airflow с помощью Postbox.
Подготовка
- Создайте почтовый адрес в Postbox.
- Пройдите проверку владения доменом для почтового адреса.
- Создайте сервисный аккаунт в том же каталоге, в котором находится адрес. Если вы создадите сервисный аккаунт и адрес в разных каталогах, при попытке отправить письмо возникнет ошибка.
- Назначьте сервисному аккаунту роль
postbox.sender
. - Создайте API-ключ.
При создании API-ключа задайте область действия
yc.postbox.send
. Надежно сохраните полученный секретный ключ. После того как вы закроете окно, параметры секретного ключа станут недоступны.
Создание Managed Apache Airflow кластера
Я буду использовать минимальный кластер с одним воркером. Вы можете выбрать любой другой тип кластера, который вам нужен.
В настройкай я выбрал зону ru-central1-a
и соответствующую ей подсеть. Для этой подсети создана таблица маршрутизации,
которая позволяет обращаться к интернету через NAT-шлюз.
Теперь нужно добавить в кластер параметры конфигурации. Для этого внизу страницы кластера нажмите на кнопку
Загрузить из файла
. В открывшемся окне выберите файл airflow.cfg
и нажмите Загрузить
.
[smtp]
smtp_host=postbox.cloud.yandex.net
smtp_starttls=True
smtp_ssl=False
smtp_port=587
smtp_mail_from=airflow@nikolaymatrosov.ru
smtp_mail_from
подставьте свой адрес, с которого будут отправляться письма. Он должен быть на домене, который вы
зарегестировали в Postbox.
Создание секрета в Lockbox
Теперь нужно создать секрет в Lockbox, который будет хранить API-ключ. Для этого перейдите в Lockbox и создайте новый секрет.
В названии секрета укажите airflow/connections/smtp_default
. В ключе также укажите airflow/connections/smtp_default
.
В значении секрета укажите JSON-объект с параметрами API-ключа. Например, так:
{
"conn_type": "email",
"login": "API_KEY",
"password": "AQVN***"
}
login
укажите именно строку API_KEY
. password
— это ваш секретный ключ, который вы получили при создании API-ключа.
Создание DAG
Теперь создайте DAG, который будет падать с ошибкой. И вследствие этого вы получите уведомление на почту.
from airflow.decorators import dag, task
default_args = {
"email": ["nikolay.matrosov@gmail.com"],
"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()
В email
укажите ваш адрес, на который будут приходить уведомления.
Запуск DAG
Теперь запустите DAG и дождитесь его завершения.
После этого вы получите уведомление на почту.