【Airflow】Apache Airflow ~ 環境構築編 ~

■ はじめに

Amazon Managed Workflows for Apache Airflow (MWAA) っていう
AWSサービスがあるのだが、その元となっている Apache Airflow を
気軽に触ってみたいので、ローカル上に環境を構築してみる

目次

【1】Apache Airflow
【2】環境構築する上での注意点
 1)Windows 上では構築できない
 2)Python versionを確認する
 補足:DBについて
【3】構築環境
【4】構築手順
 1)前準備
 2)インストールする
 3)DB初期化
 4)ユーザ作成
 5)サーバ起動
 6)スケジューラ起動
 7)動作確認
【5】トラブルシュート
 1)エラー「ModuleNotFoundError: No module named 'airflow.providers'」

【1】Apache Airflow

* ワークフローエンジン
* Python製

参考文献
https://dev.classmethod.jp/articles/airflow-getting-started/

【2】環境構築する上での注意点

1)Windows 上では構築できない

* (純粋な)Windows 上では構築できない
 => pip install を使うので、ひょっとしたらいけるかなーっと試して
  インストールは成功するが、「airflow db init」時に以下のエラーで
  ダメだった。。。
 => WSL2などを使って、仮想上のLinux(Ubuntu)に構築してみる

https://dk521123.hatenablog.com/entry/2020/12/08/165505

Windows上で「airflow db init」実行時のエラー内容

airflow db init
WARNING:root:OSError while attempting to symlink the latest log directory
Traceback (most recent call last):
・・・略・・・
ModuleNotFoundError: No module named 'termios'

2)Python versionを確認する

* Pythonが古い(3.5とか)とインストール時にエラーになるかも、、、

公式サイト より一部抜粋
https://airflow.apache.org/docs/apache-airflow/stable/installation.html

Python: 3.6, 3.7, 3.8
Databases:
 PostgreSQL: 9.6, 10, 11, 12, 13
 MySQL: 5.7, 8
 SQLite: 3.15.0+
Kubernetes: 1.18.15 1.19.7 1.20.2

補足:DBについて

* 本番環境として、PostgreSQL を選ぶのが一番良い?
* 今回は、練習なので、何も指定せず(SQLite?)に構築する

https://airflow.apache.org/docs/apache-airflow/stable/installation.html

より抜粋

MySQL

Note:
MySQL 5.x versions are unable to or have limitations with running multiple schedulers
 – please see: Scheduler.
MariaDB is not tested/recommended.

MySQL 5.xは、複数のスケジューラを実行する制限は持つことはできません。
スケジューラを見てください。
MariaDBはテストされていなく、お勧めできません。

SQLite

Note:
SQLite is used in Airflow tests.
Do not use it in production.
We recommend using the latest stable version of SQLite for local development.

SQLiteはAirflowテストとして使ってください。
SQLiteを本番環境では使わないでください。
ローカル開発環境のために最新で安定したバージョンのSQLiteを使うことを
勧めています。

【3】構築環境

* OS : Ubuntu 20.04.2 LTS
* Python : Python 3.8.10

【4】構築手順

以下の公式サイトの手順を参考にするといい

https://airflow.apache.org/docs/apache-airflow/stable/start/local.html

1)前準備

# 更新
sudo apt upgrade

# pip の更新
pip install --upgrade pip

2)インストールする

# Apache Airflowのインストール
sudo pip install apache-airflow

# ERROR: rich 10.6.0 has requirement pygments<3.0.0,>=2.6.0, but you'll have pygments 2.3.1 which is incompatible.
# ってエラーが出てきた場合
sudo pip install rich

# インストール後に確認の意味でVersion確認
#  => 今回「2.1.2」が表示
airflow version

3)DB初期化

airflow db init

4)ユーザ作成

airflow users create \
    --username admin \
    --firstname YourFirstName \
    --lastname YourLastName \
    --role Admin \
    --email YourEmail@gmail.com

Password:<パスワード入力>
Repeat for confirmation:<再度パスワード入力>
Admin user admin created

5)サーバ起動

airflow webserver --port 8080

6)スケジューラ起動

# 別のターミナルを開いて、、、
airflow scheduler

7)動作確認

* ブラウザで以下にアクセス
 => ログイン画面が表示されるので「admin / 入力したパスワード」でログインする

http://localhost:8080

【5】トラブルシュート

1)エラー「ModuleNotFoundError: No module named 'airflow.providers'」

「airflow db init」実行時に
エラー「ModuleNotFoundError: No module named 'airflow.providers'」が
表示される。

解決案

足りないモジュールを再インストール(※)する

※ アンインストール後にインストールする

コマンド例

sudo pip uninstall apache-airflow-providers-sqlite
sudo pip install apache-airflow-providers-sqlite

# エラー「ModuleNotFoundError: No module named 'airflow.providers.ftp'」
sudo pip uninstall apache-airflow-providers-ftp
sudo pip install apache-airflow-providers-ftp

# エラー「ModuleNotFoundError: No module named 'airflow.providers.imap'」
sudo pip uninstall apache-airflow-providers-imap
sudo pip install apache-airflow-providers-imap

関連記事

Apache Airflow ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/07/24/233012
Apache Airflow ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/07/28/234319
Docker Desktop / WSL2 ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/12/08/165505