在气流上部署dag文件的有效方法

Sre*_*ath 36 apache airflow airflow-scheduler

是否有任何最佳实践可用于将新dags部署到气流中?

我在google论坛上看到了一些评论,说明dag被保存在GIT存储库中,并且会定期同步到气流群集中的本地位置.
关于这种方法,我有几个问题

  • 我们是否为不同的环境维护单独的dag文件?(测试.生产)
  • 如果新版本有错误,如何处理ETL回滚到旧版本?

    这里的任何帮助都非常感谢.如果您需要任何进一步的细节,请告诉我?

  • Ale*_*and 46

    以下是我们为团队管理的方式.

    首先,在命名约定方面,我们的每个DAG文件名都与DAG本身的内容(包括DAG版本)匹配DAG Id.这很有用,因为最终它是您在Airflow UI中看到的DAG ID,因此您将确切地知道每个DAG后面使用了哪个文件.

    像这样的DAG示例:

    from airflow import DAG
    from datetime import datetime, timedelta
    
    default_args = {
      'owner': 'airflow',
      'depends_on_past': False,
      'start_date': datetime(2017,12,05,23,59),
      'email': ['me@mail.com'],
      'email_on_failure': True
    }
    
    dag = DAG(
      'my_nice_dag-v1.0.9', #update version whenever you change something
      default_args=default_args,
      schedule_interval="0,15,30,45 * * * *",
      dagrun_timeout=timedelta(hours=24),
      max_active_runs=1)
      [...]
    
    Run Code Online (Sandbox Code Playgroud)

    DAG文件的名称为:my_nice_dag-v1.0.9.py

    • 我们所有的DAG文件都存储在Git存储库中(除此之外)
    • 每次在我们的主分支中完成合并请求时,我们的持续集成管道启动一个新构建并将我们的DAG文件打包成一个zip(我们使用Atlassian Bamboo,但还有其他解决方案,如Jenkins,Circle CI,Travis ......)
    • 在Bamboo中,我们配置了一个部署脚本(shell),它解压缩包并将DAG文件放在/ dags文件夹中的Airflow服务器上.
    • 我们通常在DEV中部署DAG进行测试,然后部署到UAT,最后部署到PROD.由于上面提到的shell脚本,只需单击Bamboo UI中的按钮即可完成部署.

    优点

    1. 因为您已在文件名中包含DAG版本,所以不会覆盖以前版本的DAG文件,因此您仍然可以回复它
    2. 当您在Airflow中加载新的DAG文件时,由于版本号,您可以在UI中识别它.
    3. 由于您的DAG文件名= DAG Id,您甚至可以通过添加一些Airflow命令行来改进部署脚本,以便在部署新DAG后自动打开它们.
    4. 由于DAG的每个版本都在Git中进行了历史化,因此如果需要,我们可以随时回溯到以前的版本.

    • 您好@SreenathKamath,针对环境特定值,我们在其各自的Airflow环境中的Airflow变量中配置它们.您可以在Admin> Variables下的菜单中找到它们.在DAG中,您可以使用`from airflow.models import Variable`然后`Variable.get('my_variable_name')来调用这些变量. (2认同)