deploying-airflow について
Airflow の開発者や運用担当者向けに、Astro とオープンソース Airflow のデプロイ方法を解説します。Astro CLI の各デプロイ方式に加え、Docker Compose と Kubernetes Helm Chart の手順を扱います。
主な機能
- 01Astro CLI によるプロジェクト、DAG、イメージ、dbt のデプロイ
- 02ブランチとデプロイ環境の対応付け
- 03Docker Compose による Airflow の構築
- 04Helm Chart を使った Kubernetes へのデプロイ
- 05DAG 同期とイメージデプロイ方式の解説
活用シーン
- 01Astro プロジェクトの本番環境へのリリース
- 02ブランチ連動の自動デプロイ設定
- 03学習用 Airflow ローカル環境の構築
- 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 --dags | DAG のみのデプロイ — DAG ファイルのみをプッシュします(高速で、イメージのビルドは不要です) |
astro deploy --image | イメージのみのデプロイ — Docker イメージのみをプッシュします(複数リポジトリの CI/CD 用) |
astro deploy --dbt | dbt プロジェクトのデプロイ — 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 戦略は次のとおりです。
- フィーチャーブランチでは DAG のみをデプロイ:開発中の迅速な反復作業には
astro deploy --dagsを使用します - main では全体をデプロイ:本番リリースのため、main へのマージ時に
astro deployを使用します - イメージと DAG のパイプラインを分離:独立したリリースサイクルを実現するため、別々の CI ジョブで
--imageと--dagsを使用します
デプロイキュー
短時間に複数のデプロイが実行された場合、Astro はデプロイキューで順番に処理します。各デプロイが完了してから、次のデプロイが開始されます。
参考資料
オープンソース:Docker Compose
公式の Docker Compose セットアップを使用して Airflow をデプロイします。学習や試行にはこの方法をおすすめします。本番環境では、Helm chart を使用して Kubernetes にデプロイしてください(下記を参照)。
前提条件
- Docker および Docker Compose v2.14.0+
- 公式の
apache/airflowDocker イメージ
クイックスタート
公式の Airflow 3 Docker Compose ファイルをダウンロードします。
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml'
これにより、Airflow 3 のアーキテクチャ全体がセットアップされます。
| サービス | 目的 |
|---|---|
airflow-apiserver | REST API と UI(ポート 8080) |
airflow-scheduler | DAG の実行をスケジュールします |
airflow-dag-processor | DAG ファイルを解析して処理します |
airflow-worker | タスクを実行します(CeleryExecutor) |
airflow-triggerer | 遅延可能/非同期タスクを処理します |
postgres | メタデータデータベース |
redis | Celery メッセージブローカー |
最小構成
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 デプロイ戦略
- Git-sync(推奨):DAG は Git リポジトリから自動的に同期されます
- Persistent Volume:DAG を含む共有 PV をマウントします
- イメージに含める:カスタム 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 テストに使用します