Apache Airflow 仅向列表中的第一个人发送 SLA 未命中电子邮件

2023-12-07

我使用 Apache Airflow,我希望它能够在 SLA 未命中时发送电子邮件通知。我将电子邮件地址存储为气流变量,并且我有一个 dag,其任务之一使用 EmailOperator 发送电子邮件。

问题来了,因为当我向所有收件人运行发送邮件任务时,它会发送电子邮件,但它只会向列表中的第一个地址发送 sla 未命中通知,在我的示例中这意味着[电子邮件受保护].

这是一些错误,还是为什么它不起作用?

Here's my dag and airlfow variable: airflow variable

from airflow import DAG
from datetime import datetime, timedelta
from airflow.operators.email_operator import EmailOperator
from airflow.models import Variable
from airflow.operators.slack_operator import SlackAPIPostOperator

email = Variable.get("test_recipients")

args = {
    'owner': 'airflow'
    , 'depends_on_past': False
    , 'start_date': datetime(2018, 8, 20, 0, 0)
    , 'retries': 0
    , 'email': email
    , 'email_on_failure': True
    , 'email_on_retry': True
    , 'sla': timedelta(seconds=1)
}

dag = DAG('sla-email-test'
          , default_args=args
          , max_active_runs=1
          , schedule_interval="@daily")

....

t2 = EmailOperator(
    dag=dag,
    task_id="send-email",
    to=email,
    subject="Testing",
    html_content="<h3>Welcome to Airflow</h3>"
)

是的,目前 Airflow 在发送 SLA 电子邮件时存在一个错误 - 该代码路径无法正确分割字符串,就像任务失败电子邮件一样。

现在最简单的解决办法是让你的变量成为一个列表(即值为["[email protected]","[email protected]"]并像这样访问它:

email = Variable.get("test_recipients", deserialize_json=True)

这应该适用于两种情况(SLA 和任务电子邮件)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache Airflow 仅向列表中的第一个人发送 SLA 未命中电子邮件 的相关文章

随机推荐