Airflow 使用Jinja根据变量向收件人发送失败电子邮件

Airflow 使用Jinja根据变量向收件人发送失败电子邮件,airflow,Airflow,我正在尝试向在Airflow UI中的变量中定义的某些人发送电子邮件。我在这里看到了一个类似的问题,但我的问题略有不同。我怀疑当我使用Jinja模板时我不能这么做 我的变量: { "config1" : "abc", "config2":500000, "email_on_failure_list": ["jorge@gmail.com","maria@gmail.com"]

我正在尝试向在Airflow UI中的变量中定义的某些人发送电子邮件。我在这里看到了一个类似的问题,但我的问题略有不同。我怀疑当我使用Jinja模板时我不能这么做

我的变量:

{ "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 
    }