Перейти к основному содержимому

Отправка писем с помощью Postbox из Managed Apache Airflow

· 2 мин. чтения

Airflow + Postbox

В этом посте я расскажу, как настроить почтовые уведомления об ошибках в Managed Apache Airflow с помощью Postbox.

Подготовка

  1. Создайте почтовый адрес в Postbox.
  2. Пройдите проверку владения доменом для почтового адреса.
  3. Создайте сервисный аккаунт в том же каталоге, в котором находится адрес. Если вы создадите сервисный аккаунт и адрес в разных каталогах, при попытке отправить письмо возникнет ошибка.
  4. Назначьте сервисному аккаунту роль postbox.sender.
  5. Создайте API-ключ. При создании API-ключа задайте область действия yc.postbox.send. Надежно сохраните полученный секретный ключ. После того как вы закроете окно, параметры секретного ключа станут недоступны.

Создание Managed Apache Airflow кластера

Создание кластера

Я буду использовать минимальный кластер с одним воркером. Вы можете выбрать любой другой тип кластера, который вам нужен. В настройкай я выбрал зону ru-central1-a и соответствующую ей подсеть. Для этой подсети создана таблица маршрутизации, которая позволяет обращаться к интернету через NAT-шлюз.

Создание кластера

Теперь нужно добавить в кластер параметры конфигурации. Для этого внизу страницы кластера нажмите на кнопку Загрузить из файла. В открывшемся окне выберите файл airflow.cfg и нажмите Загрузить.

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 и дождитесь его завершения.

Запуск DAG

После этого вы получите уведомление на почту.

Письмо