公式 Docker イメージの Airflow で RDB をリポジトリ DB にする
この記事について
この記事は、2021 年 1 月 23 日に開催した第 38 回 SQL Server 2019 勉強会で登壇した内容のフィードバック記事です。
セッション中で使用した Apache Airflow の環境について解説しています。
以前の記事で、公式 Docker イメージを使用した Apache Airflow の環境構築について解説しました。ただ、この環境構築方法で作成される Apache Airflow の環境は、リポジトリ DB に SQLite
が設定されるようになっています。
Apache Airflow では、リポジトリ DB に MySQL
や PostgreSQL
も設定できるようになっています。今回は、公式の Docker イメージを使った環境構築時に MySQL や PostgreSQL などをリポジトリ DB に設定する方法について解説します。
環境構築
基本的には、通常の環境構築に以下の内容を追加で実施して、Docker コンテナーを起動するだけです。
- リポジトリ DB 用の Docker コンテナーを準備
- Airflow のコンテナーに
.env
でリポジトリ DB に接続するための環境変数を設定
MySQL の場合
リポジトリに MySQL を使用する場合は、以下のような docker-compose.yaml
を作成します。
version: '3'
services:
mysql:
image: mysql:8.0
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: P@ssw0rd
MYSQL_DATABASE: airflow
MYSQL_USER: airflow
MYSQL_PASSWORD: airflow
ports:
- 3306:3306
volumes:
- ./data/mysql:/var/lib/mysql
- ./conf:/etc/mysql/conf.d
scheduler:
image: apache/airflow:2.0.0
container_name: airflow-scheduler
restart: always
env_file:
- .env
depends_on:
- mysql
volumes:
- ./dags:/opt/airflow/dags
- ./logs:/opt/airflow/logs
command: scheduler
webserver:
image: apache/airflow:2.0.0
container_name: airflow-webserver
restart: on-failure
env_file:
- .env
ports:
- 8080:8080
depends_on:
- scheduler
- mysql
volumes:
- ./dags:/opt/airflow/dags
- ./logs:/opt/airflow/logs
# command: db init # Use fist time only
command: webserver # Using with docker-compose up after exec `db init`
また、.env
ファイルは以下のように作成しています。
AIRFLOW__CORE__SQL_ALCHEMY_CONN=mysql://airflow:airflow@mysql:3306/airflow
AIRFLOW__CORE__EXECUTOR=LocalExecutor
PostgreSQL の場合
リポジトリに PostgreSQL を使用する場合は、以下のような docker-compose.yaml
を作成します。
version: '3'
services:
postgres:
image: postgres:11
environment:
- POSTGRES_USER=airflow
- POSTGRES_PASSWORD=airflow
- POSTGRES_DB=airflow
volumes:
- ./data/postgresql:/var/lib/postgresql/data
scheduler:
image: apache/airflow:2.0.0
container_name: airflow-scheduler
restart: always
env_file:
- .env
depends_on:
- postgres
volumes:
- ./dags:/opt/airflow/dags
- ./logs:/opt/airflow/logs
command: scheduler
webserver:
image: apache/airflow:2.0.0
container_name: airflow-webserver
restart: on-failure
env_file:
- .env
ports:
- 8080:8080
depends_on:
- scheduler
- postgres
volumes:
- ./dags:/opt/airflow/dags
- ./logs:/opt/airflow/logs
# command: db init # Use fist time only
command: webserver # Using with docker-compose up after exec `db init`
また、.env
ファイルは以下のように作成しています。
AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres/airflow
AIRFLOW__CORE__EXECUTOR=LocalExecutor
まとめ
デフォルトの SQLite ではなく、MySQL や PostgreSQL をリポジトリ DB にして Apache Airflow 環境を作成したいという場合でも、簡単に環境が作成できることはとてもいいことですね。
Airflow のリポジトリ DB に MySQL や PostgreSQL を設定しただけな、さまざまな野良イメージがネット上の記事には公開されていたりしますが、特段の理由などがない場合は、それぞれしっかり公式で提供されているイメージを活用する方がいいと思います。
Discussion