Airflow 3.0をDocker Composeで構築してみた【EC2/Amazon Linux 2023】

# はじめに
2025年4月22日、ついにAirflow 3.0がGAされましたね。

https://airflow.apache.org/blog/airflow-three-point-oh-is-here/

AWSのEC2上に、Dockerを利用して環境を構築してみたので、その手順をメモしておきます。

# やってみる

## EC2インスタンスの作成
今回は、以下のスペックで、EC2インスタンスを作成しました。
- OS：Amazon Linux 2023
- インスタンスタイプ：m5.2xlarge

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949357/2af08fb3-bd85-4746-a8f8-6a962d09deae.png)

:::note warn
[公式Doc](https://airflow.apache.org/docs/apache-airflow/stable/installation/prerequisites.html?utm_source=chatgpt.com)を見ると、メモリ4GB以上という要件がありました。ただ、`t2.medium`（メモリ4GiB）や`t3.large`（メモリ8GiB）で試すと、起動しなかったり動きが遅かったりしたので、今回はとりあえず`m5.2xlarge`（vCPU 8, メモリ32GiB）で動かしています。
:::

## セキュリティグループ修正
以下のインバウンドルールを追加します。
- 手元のPCからSSHでの接続用
    - ポート：22
    - ソース：自身のIPアドレス
- Airflow UIのブラウザアクセス用
    - ポート：8080
    - ソース：自身のIPアドレス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949357/294815e7-f9e7-4e96-8db2-144f52bebaab.png)

## Dockerインストール
ここからは、何かしらのツールでEC2に接続します。今回は、手元のPCのTera TermからSSH接続しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949357/a3be3055-0155-4574-a926-e41fd1fe6452.png)

以下のコマンドを実行して、Dockerをインストールします。
```bash
# システムアップデート
sudo dnf update -y

# Docker インストール
sudo dnf install docker -y
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -a -G docker ec2-user
```

## Docker Composeインストール
次に、Docker Composeをインストールします。

```bash
# Docker Composeダウンロード、インストール
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose

# 実行バイナリに対して実行権限付与
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

# インストール結果の確認
docker compose version

# 一度抜ける
exit
```

以下を参考にしました。今はDocker composeのv2が主流なんですね。

https://matsuand.github.io/docs.docker.jp.onthefly/compose/install/

## Airflowの初期化と起動
ここまででDockerの環境が準備出来たので、Airflowのdocker-composeを使ってAirflowの環境を構築します。
現時点でのAirflowの最新バージョンは`v3.0.1`なので、新しいバージョンがある場合は`docker-compose.yaml`のURLを修正してください。

```bash
# 作業ディレクトリ作成
mkdir airflow
cd airflow

# docker-compose.yamlのダウンロード
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/3.0.1/docker-compose.yaml'

# 必要なディレクトリの作成
mkdir -p ./dags ./logs ./plugins ./config

# ユーザー設定
echo -e "AIRFLOW_UID=$(id -u)" > .env

# データベースの初期化
docker compose up airflow-init

# Airflowの起動
docker compose up -d
```

以下を参考にしました。

https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html#running-airflow-in-docker

## Airflow UIにアクセス
環境立ち上げに少し時間がかかりますが、完了したら

`http://<EC2のIP>:8080`

にアクセスします。

上手く環境が作れていれば、以下のようなSign in画面が表示されるはずです。UsernameとPasswordはデフォルトだとどちらも`airflow`なので、これを入力してサインインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949357/dc35e481-28ad-4f2d-a714-169d2b770985.png)

サインインできました！！！かなり画面デザイン変わってる！！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949357/f1cd2d13-0d27-4019-a205-855f942a2215.png)

ダークモードにして、元々あったDAG（tutorial）を何回か実行してみました。DAGの画面もかなり変わってますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2949357/dd3aed72-ae9d-4717-a8ae-e492de6e4faa.png)

:::note warn
今回はv3.0.1で構築しましたが、それが出る前の`v3.0.0`で試したところ、Airflow UIにアクセスすると画面遷移がループしてアクセスできませんでした。[このissue](https://github.com/apache/airflow/issues/49495)で報告されていましたが、`v3.0.1`で直ったようです。
:::

アクセスできない場合は、ログを確認してみましょう。Airflow UIへのアクセスログは、APIサーバーのログで確認できます。

```bash
# 100行ログを見る
docker compose logs --tail=100 airflow-apiserver
```

# おわりに
GAされてから1か月近くたってしまいましたが、ようやく自分の手元で構築することができました。

新しい機能など、試してみたいと思います。特に、左メニューの一つである**Assets**が気になります。今まではDatasetsという、DAGで扱うデータを抽象化した概念がありましたが、それが進化したもののようです。

データリネージュが実現できたり、データの更新を検知して処理を実行したりできるようで、既存のDatasetsとどう違うかとかを追ってみようと思います。

では、皆様よき Airflow 3 ライフを！