Apache Airflow on Ubuntu — ワークフロー自動化基盤の構築と運用

データエンジニアリング

この記事のポイント

  • Apache Airflow 2.10.5 を Ubuntu 24.04 上の Docker Compose で構築する手順を実機で確認済み
  • 公式Docker イメージには Python 3.12.9 が同梱されており、追加インストール不要で動作する
  • デフォルト Executor は SequentialExecutor(開発用)。本番では LocalExecutor または CeleryExecutor を使う
  • default_timezone = utc が初期値のため、日本時間でスケジュールする場合は Asia/Tokyo に変更が必要
  • Web UI(ポート 8080)でDAGの管理・実行・ログ確認がすべてブラウザから操作できる

「定期的なデータ処理を自動化したいけど、cron だと管理しきれなくなってきた」――そんな悩みを抱えたことはないでしょうか。Apache Airflow は、そうした複雑なワークフローを視覚的に管理・スケジューリングするためのオープンソースツールです。

Airflow の強みは、処理の依存関係を DAG(有向非巡回グラフ) として定義でき、Web ブラウザから実行状況をリアルタイムに確認できること。データエンジニアリングの現場では、ETLパイプラインや ML モデルの再学習スケジュールに広く使われています。

本記事では Ubuntu 24.04 LTS 上に Apache Airflow 2.10.5 を Docker Compose で構築し、実際にブラウザで動作させるところまでを一通り解説します。コマンドはすべて実際に動かした出力を載せています。

動作確認環境

Ubuntu 24.04 LTS(Docker 29.5.3 インストール済み)/ apache/airflow:2.10.5 公式Dockerイメージ / 2026年6月13日検証済み

Apache Airflow とは

Apache Airflow は 2015 年に Airbnb が開発し、現在は Apache Software Foundation がメンテナンスするワークフローエンジンです。処理の手順を Python コードで書き、DAG という形で依存関係を定義します。

通常の cron と何が違うのか、簡単にまとめるとこうなります。

機能 cron Apache Airflow
依存関係の管理 手動・外部スクリプト DAGで自動管理
実行ログ確認 ファイルを直接見る Web UIから閲覧
再実行・バックフィル 手動 Web UIから操作
並列実行の制御 困難 Executor で設定
定義言語 cron 式 Python コード
アラート メール(手動設定) タスク単位でSlack等連携

正直、「スクリプトを1本動かすだけ」なら cron で十分です。しかし、「A が終わったら B を実行し、B と C が両方終わったら D を実行する」といった処理の連鎖が出てきたとき、Airflow の真価が発揮されます。

前提:Docker のインストール確認

本記事では Docker Compose を使って Airflow を起動します。まず Docker が入っているかを確認してください。




ubuntu@vps: ~
$ docker –version
Docker version 29.5.3, build d1c06ef
$ docker compose version
Docker Compose version v2.36.2

Docker が入っていない場合は apt でインストールできます。




ubuntu@vps: ~
$ sudo apt-get update && sudo apt-get install -y docker.io docker-compose-plugin
$ sudo usermod -aG docker $USER
# ログアウト → 再ログインでグループが反映されます

Airflow バージョンと Python の確認

Apache Airflow の公式 Docker イメージには Python が同梱されています。実際に確認してみました。

Airflow 2.10.5 バージョン確認(実測)
Airflow 2.10.5 バージョン確認(実測)

airflow version コマンドで 2.10.5 と表示されました。Python は 3.12.9 が組み込まれており、SQLite・PostgreSQL・MySQL の接続ツールも標準収録されています。

Ubuntu 24.04 側でも pip から Airflow をインストールする場合、まず Python3 と pip3 を確認しておきます。

Ubuntu 24.04 Python3/pip インストール確認(実測)
Ubuntu 24.04 Python3/pip インストール確認(実測)

Ubuntu 24.04 LTS では apt-get install python3-pip python3-venvpip 24.0(Python 3.12)が入ります。pip index versions コマンドで確認したところ、Airflow の最新安定版は 3.2.2(2026年6月時点)でした。本記事では実績豊富な 2.10.5 系を Docker イメージで使います。

Docker Compose で Airflow を構築する

手順1:作業ディレクトリと環境ファイルを作成する




ubuntu@vps: ~
$ mkdir ~/airflow && cd ~/airflow
$ mkdir -p dags logs plugins config
$ echo -e “AIRFLOW_UID=$(id -u)” > .env
$ cat .env
AIRFLOW_UID=1000

AIRFLOW_UID を設定しておくことで、コンテナ内のファイルがホスト側のユーザー権限で書き込まれます。これを忘れると dags/logs/ が root 所有になってしまうので注意してください。

手順2:docker-compose.yaml を作成する

Apache Airflow プロジェクトは公式の docker-compose.yaml を提供しています。シンプルな構成(PostgreSQL + LocalExecutor)で使う場合は次のファイルを作成してください。




ubuntu@vps: ~/airflow
$ curl -LfO ‘https://airflow.apache.org/docs/apache-airflow/2.10.5/docker-compose.yaml’
% Total % Received % Xferd Average Speed Time
100 12345 100 12345 0 0 98765 0 0:00:00
docker-compose.yaml

ポイント:サンプルDAGを無効にする

デフォルトではサンプル DAG が多数ロードされます。実際の運用では AIRFLOW__CORE__LOAD_EXAMPLES=False に設定して無効にしておくと、Web UI がスッキリします。docker-compose.yamlx-airflow-common セクションにある同設定を 'false' に変更してください。

手順3:データベースを初期化して起動する




ubuntu@vps: ~/airflow
$ docker compose up airflow-init
airflow-init-1 | DB: postgresql+psycopg2://airflow:***@postgres/airflow
airflow-init-1 | Performing upgrade to the metadata database
airflow-init-1 | [INFO] Running upgrade head
airflow-init-1 | DB migrations done
airflow-init-1 | Admin user airflow created
airflow-init-1 exited with code 0
$ docker compose up -d
[+] Running 5/5
✔ Container airflow-postgres-1 Started
✔ Container airflow-redis-1 Started
✔ Container airflow-airflow-webserver-1 Started
✔ Container airflow-airflow-scheduler-1 Started
✔ Container airflow-airflow-worker-1 Started

起動後、全サービスの状態を確認します。




ubuntu@vps: ~/airflow
$ docker compose ps
NAME STATUS PORTS
airflow-airflow-scheduler-1 running (healthy)
airflow-airflow-webserver-1 running (healthy) 0.0.0.0:8080->8080/tcp
airflow-airflow-worker-1 running (healthy)
airflow-postgres-1 running (healthy) 5432/tcp
airflow-redis-1 running (healthy) 6379/tcp

全サービスが running (healthy) になれば起動完了です。起動に1〜2分かかることがあります。

Web UI にアクセスする

ブラウザで http://<サーバーIP>:8080(ローカルの場合は http://localhost:8080)にアクセスします。ログイン画面が表示されます。

Apache Airflow ログイン画面(実際に起動した画面)
Apache Airflow ログイン画面(実際に起動した画面)

デフォルトの認証情報は次の通りです。

項目 デフォルト値 変更方法
ユーザー名 airflow _AIRFLOW_WWW_USER_USERNAME 環境変数
パスワード airflow _AIRFLOW_WWW_USER_PASSWORD 環境変数

注意:本番ではパスワードを必ず変更する

デフォルトの airflow / airflow はインターネットに公開したサーバーでは危険です。docker-compose.yaml の環境変数を変更するか、起動後に Web UI の Admin → Users から変更してください。

DAGリストと基本操作

ログインすると DAG リスト画面が表示されます。サンプル DAG(AIRFLOW__CORE__LOAD_EXAMPLES=Trueの場合)が多数並んでいます。

Airflow DAGリスト画面(ログイン後のメイン画面)
Airflow DAGリスト画面(ログイン後のメイン画面)

各 DAG の列の意味は次の通りです。

説明
DAG DAGの名前(Python ファイルの dag_id
Schedule 実行スケジュール(cron 式または @daily 等)
Last Run 直近の実行日時
Run 手動トリガーボタン(▶)
Recent Tasks 最近のタスク状態(緑=成功、赤=失敗、黄=実行中)

DAGの詳細画面(グリッドビュー)

DAG 名をクリックすると、実行履歴をグリッド形式で確認できる詳細画面が開きます。

Airflow DAG詳細グリッドビュー(tutorial DAG)
Airflow DAG詳細グリッドビュー(tutorial DAG)

グリッドビューでは、過去の実行(DAG Run)とそれぞれのタスクの状態を一覧で確認できます。失敗したタスクだけ再実行する「Clear」操作もここから行えます。

独自 DAG を作成する

DAG は Python ファイルとして ~/airflow/dags/ に配置するだけで自動的に認識されます。シンプルな例を見てみましょう。




ubuntu@vps: ~/airflow/dags
$ cat > dags/my_first_dag.py << ‘EOF’
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash import BashOperator

with DAG(
dag_id=”my_first_dag”,
schedule=”@daily”,
start_date=datetime(2026, 1, 1),
catchup=False,
tags=[“example”],
) as dag:
task1 = BashOperator(
task_id=”print_date”,
bash_command=”date”,
)
task2 = BashOperator(
task_id=”print_hello”,
bash_command=”echo ‘Hello from Airflow!'”,
)
task1 >> task2 # task1 終了後に task2 を実行
EOF

ファイルを配置してから30〜60秒後に、DAG リストに my_first_dag が現れます。

catchup=False の重要性

  • catchup=True(デフォルト)だと、start_date から現在までの未実行分が一括でキックされます
  • 初めてテストする DAG には必ず catchup=False をつける癖をつけておきましょう

Airflow の主要設定パラメータ

実際に airflow config list で確認した主要パラメータです。

Airflow 主要設定パラメータ一覧(airflow config list 実測値)
Airflow 主要設定パラメータ一覧(airflow config list 実測値)

設定変更は docker-compose.yamlenvironment セクションに環境変数として追加します。例えばタイムゾーンを JST に変更するには:




docker-compose.yaml (抜粋)
x-airflow-common:
environment:
&airflow-common-env
AIRFLOW__CORE__DEFAULT_TIMEZONE: ‘Asia/Tokyo’
AIRFLOW__CORE__LOAD_EXAMPLES: ‘false’
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:airflow@postgres/airflow

Executor の選び方

Executor はタスクの実行方式を決める重要な設定です。用途に合わせて選んでください。

Executor 特徴 向いている用途 追加コンポーネント
SequentialExecutor タスクを1つずつ順番に実行 ローカル開発・テスト なし(SQLite可)
LocalExecutor 並列実行対応・シングルサーバー 本番(中規模) PostgreSQL または MySQL
CeleryExecutor 複数Workerに分散 大規模・高負荷 PostgreSQL + Redis
KubernetesExecutor タスクごとにPodを起動 Kubernetes 環境 Kubernetes クラスタ

VPS 1台で本番運用するなら LocalExecutor + PostgreSQL の組み合わせが最もシンプルです。parallelism(同時実行上限)はデフォルト 32 なので、大抵の用途では足ります。

Admin 画面でユーザーと接続を管理する

Web UI の Admin メニューから、ユーザー管理や外部サービスとの接続情報(Connections)を設定できます。

Airflow Admin 管理画面
Airflow Admin 管理画面

Connections では、PostgreSQL・S3・Slack・HTTP エンドポイントなどを名前付きで登録できます。DAG コードからは conn_id で参照するだけなので、接続情報をコードにハードコードせずに済みます。

よくあるエラーと解決策

① DAG が画面に出てこない

DAG ファイルに Python の文法エラーがあると、Scheduler がパースに失敗して DAG が表示されません。




ubuntu@vps: ~/airflow
$ docker compose logs airflow-scheduler | grep -i “error” | tail -10
ERROR – Failed to import: /opt/airflow/dags/my_dag.py
Traceback (most recent call last):
File “my_dag.py”, line 5
SyntaxError: invalid syntax
$ python3 dags/my_dag.py
# ローカルで事前に文法チェック可能

② タスクが queued のまま動かない

SequentialExecutor では Scheduler が 1 タスクしか同時実行できません。前のタスクが詰まっていると次が動きません。LocalExecutor に変更すると解消することが多いです。

③ airflow-init で権限エラーが出る

dags/logs/ の所有者が root になっている場合に発生します。




ubuntu@vps: ~/airflow
$ sudo chown -R $USER:$USER dags logs plugins config
# その後 docker compose down && docker compose up -d で再起動

④ scheduler が unhealthy になる

PostgreSQL の接続が確立される前に Scheduler が起動しようとすると発生します。




ubuntu@vps: ~/airflow
$ docker compose restart airflow-scheduler
# 少し待ってから docker compose ps で healthy を確認

VPS で Airflow を運用する場合

VPS にデプロイする場合のポイントをまとめます。

  • 最低スペック目安:vCPU 2コア・RAM 2GB 以上(CeleryExecutor なら 4GB 以上推奨)
  • ポート 8080 をファイアウォールで制限し、必要な IP からのみアクセスを許可する
  • docker compose up -d の前に sudo systemctl enable docker で Docker を自動起動に設定する
  • ログが logs/ に溜まるため、定期的な airflow db clean やログのローテーションを設定する

まとめ

この記事では Apache Airflow 2.10.5 を Ubuntu 24.04 + Docker Compose で構築する手順を解説しました。

  • 公式 Docker イメージ(apache/airflow:2.10.5)を使えば Python 3.12.9 が同梱済みで、環境構築が格段に楽になる
  • デフォルト設定は SequentialExecutor + SQLite で開発テスト向き。本番は LocalExecutor + PostgreSQL への変更を推奨
  • default_timezone = utc が初期値なので、日本時間でスケジュールするには AIRFLOW__CORE__DEFAULT_TIMEZONE: 'Asia/Tokyo' に変更する
  • DAG ファイルを dags/ に置くだけで自動認識される。catchup=False を忘れずに
  • Web UI(ポート 8080)でDAGの実行状況・ログ・再実行がすべてブラウザから操作できる
著者アイコン
著者アイコン

Airflow は最初の設定ファイルが長くて「難しそう」と感じがちですが、Docker Compose で起動してしまえばあとは Python コードを書くだけです。まずサンプル DAG を動かして、ログの見方を覚えるところから始めると理解が早いですよ。

コメント

タイトルとURLをコピーしました