Versionを指定したローカルPCへのAirflowのセットアップのメモです。

ここでは、MWAA(Amazon Managed Workflows for Apache Airflow)の開発用に、
Python 3.7, Airflow 1.10.12 のversionの組み合わせで環境を作ります。
※2021年5月時点のMWAAで利用できる最新version

以下のセットアップ手順を参考にしています。
2.0系と1.10系のやり方を組み合わせる感じです。

Running Airflow locally | Apache Airflow
https://airflow.apache.org/docs/apache-airflow/2.0.2/start/local.html

Quick Start | Apache Airflow
https://airflow.apache.org/docs/apache-airflow/1.10.12/start.html

セットアップ

Python3.7で仮想環境を作ります。

以下の実行例はmacOSの場合です、
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7の部分は、
環境に合わせてPython3.7のパスに置き換えます。

mkdir airflow_tmp && cd $_
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m venv venv
source venv/bin/activate

Airflow1.10.12をインストールします。

export AIRFLOW_HOME=`pwd`
AIRFLOW_VERSION=1.10.12
PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"

pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

データベースを初期化します。

airflow initdb

起動・終了用スクリプトの作成

起動用・終了用スクリプトを用意します。
以下のスクリプトを作ります。

start.sh

#!/bin/sh
PROJECT_DIR=$(cd $(dirname $0); pwd)
source $PROJECT_DIR/venv/bin/activate
export AIRFLOW_HOME=$PROJECT_DIR

if [ ! -f $AIRFLOW_HOME/AIRFLOW_SCHEDULER_PID ]; then
  airflow scheduler > $AIRFLOW_HOME/scheduler.log 2>&1 &
  echo $! > $AIRFLOW_HOME/AIRFLOW_SCHEDULER_PID
else
  echo "scheduler is running"
fi

if [ ! -f $AIRFLOW_HOME/AIRFLOW_WEBSERVER_PID ]; then
  airflow webserver > $AIRFLOW_HOME/webserver.log 2>&1 &
  echo $! > $AIRFLOW_HOME/AIRFLOW_WEBSERVER_PID
else
  echo "webserver is running"
fi

sleep 3
open http://localhost:8080/

stop.sh

#!/bin/sh
PROJECT_DIR=$(cd $(dirname $0); pwd)
export AIRFLOW_HOME=$PROJECT_DIR

if [ -f $AIRFLOW_HOME/AIRFLOW_SCHEDULER_PID ]; then
  kill $(cat $AIRFLOW_HOME/AIRFLOW_SCHEDULER_PID)
  rm $AIRFLOW_HOME/AIRFLOW_SCHEDULER_PID
fi

if [ -f $AIRFLOW_HOME/AIRFLOW_WEBSERVER_PID ]; then
  kill $(cat $AIRFLOW_HOME/AIRFLOW_WEBSERVER_PID)
  rm $AIRFLOW_HOME/AIRFLOW_WEBSERVER_PID
fi

実行権限をつけておきます。

chmod +x start.sh
chmod +x stop.sh 

開始と終了

以下のコマンドで開始します。

./start.sh

次のコマンドで終了します。

./stop.sh

設定ファイルの変更

必要に応じて、airflow.cfgを変更します。

サンプルのdagが不要な場合は、load_examplesをFalseに、
Timezoneを日本標準時にする場合は、default_ui_timezoneをAsia/Tokyoに、

load_examples = False
default_ui_timezone = Asia/Tokyo

load_examplesをFalseに変更した後は、
以下のように、dbを作り直した方が混乱が無いと思います。

rm airflow.db
export AIRFLOW_HOME=`pwd`
source venv/bin/activate
airflow initdb

まとめ

Versionを指定してローカルPCにAirflow環境を作るポイントですが、
以下の2点になるかな、と思います。

  • AIRFLOW_HOME を指定する
    (指定しないと$HOME/airflowになって複数環境作った場合に混乱するので)
  • pip installする時に、constraintsを指定する

以上。