Airflow 使用Jinja根据变量向收件人发送失败电子邮件
我正在尝试向在Airflow UI中的变量中定义的某些人发送电子邮件。我在这里看到了一个类似的问题,但我的问题略有不同。我怀疑当我使用Jinja模板时我不能这么做 我的变量:Airflow 使用Jinja根据变量向收件人发送失败电子邮件,airflow,Airflow,我正在尝试向在Airflow UI中的变量中定义的某些人发送电子邮件。我在这里看到了一个类似的问题,但我的问题略有不同。我怀疑当我使用Jinja模板时我不能这么做 我的变量: { "config1" : "abc", "config2":500000, "email_on_failure_list": ["jorge@gmail.com","maria@gmail.com"]
{ "config1" : "abc", "config2":500000, "email_on_failure_list": ["jorge@gmail.com","maria@gmail.com"]}
我的狗。在引用在UI中创建的变量时,最好在顶级代码中使用Variable.Get()。所以我使用了Jinja模板,但它似乎不起作用
email = "{{ var.json.my_dag.email_on_failure_list}}"
default_args = {
'depends_on_past': False,
'start_date': datetime(2020, 9, 1),
'email_on_failure': True,
'email': email
}
这是我收到的错误
ERROR - Failed to send email to: {{ var.json.my_dag.email_on_failure_list}}
[2021-02-09 09:13:16,339] {{taskinstance.py:1201}} ERROR - {'{{ var.json.my_dag.email_on_failure_list}}': (501, b'5.1.3 Invalid address')}
简短回答:使用Jinja模板是不可能的 在气流松弛通道上建议的替代方案(感谢Kaxil!)是创建环境变量。然后,我可以使用
变量引用它。在没有任何性能问题的情况下获取
环境变量对于非敏感的东西并不理想,因为它需要更多的修改权限,但在不同的气流环境(开发、质量保证、产品)中使用不同的配置设置是一个不错的选择
请按照此处的说明操作:
步骤:
在airflow服务器上创建环境变量(例如airflow\u VAR\u MY\u EMAIL\u列表)。不要在气流UI中创建变量,这一点很重要
在你的dag中使用它
from airflow.models import Variable
my_email_list = Variable.get("AIRFLOW_VAR_MY_EMAIL_LIST")
default_args = {
'depends_on_past': False,
'start_date': datetime(2020, 9, 1),
'email_on_failure': True,
'email': my_email_list
}