mcpField
M
migrating-airflow-2-to-3

migrating-airflow-2-to-3

github.com/necatiarslanデータ・データベース4448 回インストール21 週間前に更新
リポジトリ

migrating-airflow-2-to-3 について

Airflow 2.x の DAG コードを Airflow 3.x に移行するためのスキルです。コード変更、確認項目、段階的な検証を案内します。

主な機能

  1. 01Ruff の Airflow 移行ルール
  2. 02手動移行チェックリスト
  3. 03インポートとコンテキストの更新
  4. 04メタデータ DB アクセスの案内
  5. 05段階的な移行ワークフロー

活用シーン

  1. 01非推奨の Airflow コードの検出
  2. 02ORM の直接アクセスの置き換え
  3. 03DAG のインポートとコンテキストの更新
  4. 04移行変更の計画と検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/necatiarslan/airflow-vscode-extension --skill migrating-airflow-2-to-3

インストール後、Claude Code で/migrating-airflow-2-to-3を入力して読み込まれたか確認します。

詳細

Airflow 2 から 3 への移行

このスキルは、インポート、オペレーター、フック、コンテキスト、API の使用方法などのコード変更に重点を置き、Airflow 2.x の DAG コードを Airflow 3.x に移行するのに役立ちます。

重要:Airflow 3 に移行する前に、まず Airflow 2.11 にアップグレードし、その後、少なくとも Airflow 3.0.11(できれば 3.1)にアップグレードすることを強くおすすめします。

移行の概要

  1. Ruff の Airflow 移行ルールを実行します:
    • ruff check --preview --select AIR --fix --unsafe-fixes .
  2. 手動チェックリストを使って、残っている問題を確認します:
    • メタデータ DB への直接アクセス
    • レガシーなインポート
    • スケジュール設定とコンテキストの変更
    • XCom の pickle 化
    • データセットからアセットへの移行
    • REST API と認証
    • プラグインとファイルパス
  3. ファイルと問題の種類ごとに変更を計画します
  4. 変更を段階的に実施し、Ruff を再実行します
  5. 変更内容を説明し、テストを推奨します

アーキテクチャとメタデータ DB へのアクセス

Airflow 3 では、コンポーネントがメタデータデータベースと通信する方法が変わります:

  • ワーカーはメタデータ DB に直接接続しなくなります
  • タスクコードは Task Execution API 経由で実行されます
  • DAG プロセッサーはスケジューラーから分離されています

ORM に直接アクセスすると、次のエラーが発生します:

RuntimeError: Direct database access via the ORM is not allowed in Airflow 3.x
検索するパターン
  • provide_session、create_session、@provide_session
  • from airflow.settings import Session
  • from airflow.settings import engine
  • モデルを使った ORM の使用:session.query(DagModel)...
置き換え:Airflow Python クライアント

requirements.txt に追加します:

apache-airflow-client==<your-airflow-runtime-version>

例:

import os
import airflow_client.client
from airflow_client.client.api.dag_api import DAGApi

_HOST = os.getenv("AIRFLOW__API__BASE_URL", "https://<your-org>.astronomer.run/<deployment>/")
_TOKEN = os.getenv("DEPLOYMENT_API_TOKEN")

config = airflow_client.client.Configuration(host=_HOST, access_token=_TOKEN)
with airflow_client.client.ApiClient(config) as api_client:
    dag_api = DAGApi(api_client)
    dags = dag_api.get_dags(limit=10)

Ruff の Airflow 移行ルール

  • AIR30 / AIR301 / AIR302:削除されたコードとインポート
  • AIR31 / AIR311 / AIR312:非推奨のコードとインポート

コマンド:

ruff check --preview --select AIR --fix --unsafe-fixes .
ruff check --preview --select AIR .

主なインポートの変更

Airflow 2.xAirflow 3
airflow.operators.dummy_operator.DummyOperatorairflow.providers.standard.operators.empty.EmptyOperator
airflow.operators.bash.BashOperatorairflow.providers.standard.operators.bash.BashOperator
airflow.operators.python.PythonOperatorairflow.providers.standard.operators.python.PythonOperator
airflow.decorators.dagairflow.sdk.dag
airflow.decorators.taskairflow.sdk.task
airflow.datasets.Datasetairflow.sdk.Asset

コンテキストキーの変更

削除されたキー置き換え
execution_datecontext["dag_run"].logical_date
tomorrow_ds / yesterday_dsmacros.ds_add を使用します
triggering_dataset_eventstriggering_asset_events
templates_dictcontext["params"]

デフォルト動作の変更

設定Airflow 2 のデフォルトAirflow 3 のデフォルト
scheduletimedelta(days=1)None
catchupTrueFalse

リソース

コメント