web-dev-qa-db-ja.com

気流にDAGファイルを展開する効率的な方法

エアフローに新しいDAGを展開するために従うべきベストプラクティスはありますか?

Googleフォーラムで、DAGはGITリポジトリ内に保存され、エアフロークラスター内のローカルの場所に定期的に同期されるというコメントをいくつか見ました。
このアプローチに関して、いくつか質問がありました

  • 環境ごとに個別のDAGファイルを維持していますか? (テスト。本番)
    • 新しいバージョンにバグがある場合に、ETLを古いバージョンにロールバックする方法は?

      ここで助けていただければ幸いです。さらに詳細が必要な場合はお知らせください。

  • 31
    Sreenath Kamath

    チームの管理方法は次のとおりです。

    まず命名規則の観点から、各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': ['[email protected]'],
      '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)
      [...]
    

    DAGファイルの名前は次のようになります。my_Nice_dag-v1.0.9.py

    • すべてのDAGファイルは(特に)Gitリポジトリに保存されます
    • マスターブランチでマージリクエストが行われるたびに、継続的インテグレーションパイプラインが新しいビルドを開始し、DAGファイルをZipにパッケージ化します(Atlassian Bambooを使用しますが、Jenkins、Circle CI、Travisなどの他のソリューションがあります...)
    • Bambooでは、パッケージを解凍し、DAGファイルをAirflowサーバーの/ dagsフォルダーに配置する展開スクリプト(シェル)を構成しました。
    • 通常、テストのためにDAGをDEVに展開し、次にUATに展開し、最後にPRODに展開します。上記のシェルスクリプトのおかげで、Bamboo UIでボタンをクリックするだけで展開が行われます。

    利点

    1. ファイル名にDAGバージョンが含まれているため、DAGファイルの以前のバージョンはDAGフォルダーで上書きされないため、簡単に戻ることができます。
    2. 新しいDAGファイルがAirflowに読み込まれると、バージョン番号のおかげでUIで認識できます。
    3. DAGファイル名= DAG IDであるため、いくつかのAirflowコマンドラインを追加して、展開された新しいDAGを自動的にオンにすることで、展開スクリプトを改善することもできます。
    4. DAGのすべてのバージョンはGitで履歴化されているため、必要に応じていつでも以前のバージョンに戻すことができます。
    39
    Alexis.Rolland