mcpField
D
deploying-airflow

deploying-airflow

github.com/astronomerクラウド・DevOps457794 回インストール3 週間前に更新
リポジトリ

deploying-airflow について

Airflow の開発者や運用担当者向けに、Astro とオープンソース Airflow のデプロイ方法を解説します。Astro CLI の各デプロイ方式に加え、Docker Compose と Kubernetes Helm Chart の手順を扱います。

主な機能

  1. 01Astro CLI によるプロジェクト、DAG、イメージ、dbt のデプロイ
  2. 02ブランチとデプロイ環境の対応付け
  3. 03Docker Compose による Airflow の構築
  4. 04Helm Chart を使った Kubernetes へのデプロイ
  5. 05DAG 同期とイメージデプロイ方式の解説

活用シーン

  1. 01Astro プロジェクトの本番環境へのリリース
  2. 02ブランチ連動の自動デプロイ設定
  3. 03学習用 Airflow ローカル環境の構築
  4. 04オープンソース Airflow の Kubernetes へのデプロイ

インストール

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

$npx skills add https://github.com/astronomer/agents --skill deploying-airflow

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

詳細

Airflow のデプロイ

このスキルでは、Astro(Astronomer のマネージドプラットフォーム)または Docker Compose や Kubernetes 上のオープンソース Airflow を使用して、Airflow の DAG とプロジェクトを本番環境にデプロイする方法を説明します。

デプロイ方法の選択: マネージド運用と迅速な CI/CD には Astro が適しています。オープンソースの場合、開発には Docker Compose、本番環境には Helm chart を使用してください。


Astro(Astronomer)

Astro では、Airflow プロジェクトのデプロイに CLI コマンドと GitHub 連携を利用できます。

デプロイコマンド
コマンド内容
astro deployプロジェクト全体のデプロイ — Docker イメージをビルドして DAG をデプロイします
astro deploy --dagsDAG のみのデプロイ — DAG ファイルのみをプッシュします(高速で、イメージのビルドは不要です)
astro deploy --imageイメージのみのデプロイ — Docker イメージのみをプッシュします(複数リポジトリの CI/CD 用)
astro deploy --dbtdbt プロジェクトのデプロイ — Airflow と並行して実行する dbt プロジェクトをデプロイします
プロジェクト全体のデプロイ

Astro プロジェクトから Docker イメージをビルドし、すべて(DAG、プラグイン、requirements、パッケージ)をデプロイします。

astro deploy

requirements.txt、Dockerfile、packages.txt、プラグイン、または DAG 以外のファイルを変更した場合に使用してください。

DAG のみのデプロイ

Docker イメージを再ビルドせずに、dags/ ディレクトリ内のファイルのみをプッシュします。

astro deploy --dags

イメージのビルドを省略するため、プロジェクト全体のデプロイより大幅に高速です。DAG ファイルのみを変更し、依存関係や設定を変更していない場合に使用してください。

イメージのみのデプロイ

DAG を更新せずに、Docker イメージのみをプッシュします。

astro deploy --image

DAG をイメージとは別にデプロイする複数リポジトリ構成や、イメージと DAG のデプロイを個別に管理する CI/CD パイプラインで役立ちます。

dbt プロジェクトのデプロイ

Astro のデプロイ環境で Cosmos とともに実行する dbt プロジェクトをデプロイします。

astro deploy --dbt
GitHub 連携

Astro では、自動デプロイのためにブランチとデプロイ環境を対応付けられます。

  • ブランチを特定のデプロイ環境に対応付けます(例:main -> 本番環境、develop -> ステージング環境)。
  • 対応付けたブランチへのプッシュにより、自動デプロイが実行されます。
  • 迅速な反復作業のため、マージ時の DAG のみのデプロイをサポートしています。

Astro の UI で Deployment Settings > CI/CD を開き、設定してください。

CI/CD のパターン

Astro でよく使われる CI/CD 戦略は次のとおりです。

  1. フィーチャーブランチでは DAG のみをデプロイ:開発中の迅速な反復作業には astro deploy --dags を使用します
  2. main では全体をデプロイ:本番リリースのため、main へのマージ時に astro deploy を使用します
  3. イメージと DAG のパイプラインを分離:独立したリリースサイクルを実現するため、別々の CI ジョブで --image と --dags を使用します
デプロイキュー

短時間に複数のデプロイが実行された場合、Astro はデプロイキューで順番に処理します。各デプロイが完了してから、次のデプロイが開始されます。

参考資料

オープンソース:Docker Compose

公式の Docker Compose セットアップを使用して Airflow をデプロイします。学習や試行にはこの方法をおすすめします。本番環境では、Helm chart を使用して Kubernetes にデプロイしてください(下記を参照)。

前提条件
  • Docker および Docker Compose v2.14.0+
  • 公式の apache/airflow Docker イメージ
クイックスタート

公式の Airflow 3 Docker Compose ファイルをダウンロードします。

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml'

これにより、Airflow 3 のアーキテクチャ全体がセットアップされます。

サービス目的
airflow-apiserverREST API と UI(ポート 8080)
airflow-schedulerDAG の実行をスケジュールします
airflow-dag-processorDAG ファイルを解析して処理します
airflow-workerタスクを実行します(CeleryExecutor)
airflow-triggerer遅延可能/非同期タスクを処理します
postgresメタデータデータベース
redisCelery メッセージブローカー
最小構成

LocalExecutor を使用したよりシンプルな構成(Celery/Redis なし)にするには、docker-compose.yaml を作成します。

x-airflow-common: &airflow-common
  image: apache/airflow:3  # Use the latest Airflow 3.x release
  environment: &airflow-common-env
    AIRFLOW__CORE__EXECUTOR: LocalExecutor
    AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
    AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
    AIRFLOW__CORE__DAGS_FOLDER: /opt/airflow/dags
  volumes:
    - ./dags:/opt/airflow/dags
    - ./logs:/opt/airflow/logs
    - ./plugins:/opt/airflow/plugins
  depends_on:
    postgres:
      condition: service_healthy

services:
  postgres:
    image: postgres:16
    environment:
      POSTGRES_USER: airflow
      POSTGRES_PASSWORD: airflow
      POSTGRES_DB: airflow
    volumes:
      - postgres-db-volume:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "airflow"]
      interval: 10s
      retries: 5
      start_period: 5s

  airflow-init:
    <<: *airflow-common
    entrypoint: /bin/bash
    command:
      - -c
      - |
        airflow db migrate
        airflow users create \
          --username admin \
          --firstname Admin \
          --lastname User \
          --role Admin \
          --email [email protected] \
          --password admin
    depends_on:
      postgres:
        condition: service_healthy

  airflow-apiserver:
    <<: *airflow-common
    command: airflow api-server
    ports:
      - "8080:8080"
    healthcheck:
      test: ["CMD", "curl", "--fail", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 30s

  airflow-scheduler:
    <<: *airflow-common
    command: airflow scheduler

  airflow-dag-processor:
    <<: *airflow-common
    command: airflow dag-processor

  airflow-triggerer:
    <<: *airflow-common
    command: airflow triggerer

volumes:
  postgres-db-volume:

Airflow 3 のアーキテクチャに関する注意: webserver は API サーバー(airflow api-server)に置き換えられ、DAG プロセッサは scheduler とは別の独立したプロセスとして実行されるようになりました。

よく使う操作
# Start all services
docker compose up -d

# Stop all services
docker compose down

# View logs
docker compose logs -f airflow-scheduler

# Restart after requirements change
docker compose down && docker compose up -d --build

# Run a one-off Airflow CLI command
docker compose exec airflow-apiserver airflow dags list
Python パッケージのインストール

requirements.txtにパッケージを追加して、再ビルドします。

# Add to requirements.txt, then:
docker compose down
docker compose up -d --build

または、カスタム Dockerfile を使用します。

FROM apache/airflow:3  # Pin to a specific version (e.g., 3.1.7) for reproducibility
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

docker-compose.yamlを更新して、Dockerfile からビルドするようにします。

x-airflow-common: &airflow-common
  build:
    context: .
    dockerfile: Dockerfile
  # ... rest of config
環境変数

docker-compose.yamlの環境変数を使って、Airflow の設定を行います。

environment:
  # Core settings
  AIRFLOW__CORE__EXECUTOR: LocalExecutor
  AIRFLOW__CORE__PARALLELISM: 32
  AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG: 16

  # Email
  AIRFLOW__EMAIL__EMAIL_BACKEND: airflow.utils.email.send_email_smtp
  AIRFLOW__SMTP__SMTP_HOST: smtp.example.com

  # Connections (as URI)
  AIRFLOW_CONN_MY_DB: postgresql://user:pass@host:5432/db

オープンソース:Kubernetes(Helm チャート)

公式の Apache Airflow Helm チャートを使用して、Kubernetes に Airflow をデプロイします。

前提条件
  • Kubernetes クラスター
  • kubectlの設定
  • helmのインストール
インストール
# Add the Airflow Helm repo
helm repo add apache-airflow https://airflow.apache.org
helm repo update

# Install with default values
helm install airflow apache-airflow/airflow \
  --namespace airflow \
  --create-namespace

# Install with custom values
helm install airflow apache-airflow/airflow \
  --namespace airflow \
  --create-namespace \
  -f values.yaml
values.yaml の主な設定
# Executor type
executor: KubernetesExecutor  # or CeleryExecutor, LocalExecutor

# Airflow image (pin to your desired version)
defaultAirflowRepository: apache/airflow
defaultAirflowTag: "3"  # Or pin: "3.1.7"

# Git-sync for DAGs (recommended for production)
dags:
  gitSync:
    enabled: true
    repo: https://github.com/your-org/your-dags.git
    branch: main
    subPath: dags
    wait: 60  # seconds between syncs

# API server (replaces webserver in Airflow 3)
apiServer:
  resources:
    requests:
      cpu: "250m"
      memory: "512Mi"
    limits:
      cpu: "500m"
      memory: "1Gi"
  replicas: 1

# Scheduler
scheduler:
  resources:
    requests:
      cpu: "500m"
      memory: "1Gi"
    limits:
      cpu: "1000m"
      memory: "2Gi"

# Standalone DAG processor
dagProcessor:
  enabled: true
  resources:
    requests:
      cpu: "250m"
      memory: "512Mi"
    limits:
      cpu: "500m"
      memory: "1Gi"

# Triggerer (for deferrable tasks)
triggerer:
  resources:
    requests:
      cpu: "250m"
      memory: "512Mi"
    limits:
      cpu: "500m"
      memory: "1Gi"

# Worker resources (CeleryExecutor only)
workers:
  resources:
    requests:
      cpu: "500m"
      memory: "1Gi"
    limits:
      cpu: "2000m"
      memory: "4Gi"
  replicas: 2

# Log persistence
logs:
  persistence:
    enabled: true
    size: 10Gi

# PostgreSQL (built-in)
postgresql:
  enabled: true

# Or use an external database
# postgresql:
#   enabled: false
# data:
#   metadataConnection:
#     user: airflow
#     pass: airflow
#     host: your-rds-host.amazonaws.com
#     port: 5432
#     db: airflow
アップグレード
# Upgrade with new values
helm upgrade airflow apache-airflow/airflow \
  --namespace airflow \
  -f values.yaml

# Upgrade to a new Airflow version
helm upgrade airflow apache-airflow/airflow \
  --namespace airflow \
  --set defaultAirflowTag="<version>"
Kubernetes での DAG デプロイ戦略
  1. Git-sync(推奨):DAG は Git リポジトリから自動的に同期されます
  2. Persistent Volume:DAG を含む共有 PV をマウントします
  3. イメージに含める:カスタム Docker イメージに DAG を含めます
便利なコマンド
# Check pod status
kubectl get pods -n airflow

# View scheduler logs
kubectl logs -f deployment/airflow-scheduler -n airflow

# Port-forward the API server
kubectl port-forward svc/airflow-apiserver 8080:8080 -n airflow

# Run a one-off CLI command
kubectl exec -it deployment/airflow-scheduler -n airflow -- airflow dags list

関連スキル

  • setting-up-astro-project:新しい Astro プロジェクトの初期化に使用します
  • managing-astro-local-env:astro devを使ったローカル開発に使用します
  • authoring-dags:デプロイ前の DAG 作成に使用します
  • testing-dags:デプロイ前の DAG テストに使用します

コメント