Apache Airflow をローカル環境にインストールする

ローカル環境に Airflow をインストールします。

Installation from PyPI

環境

Poetry で管理できれば、と思いましたが、未サポートとのことです。だとしても利用できないことないだろ、と思って少し試してみたのですが、すごく面倒そうだったので、素直に pip 経由でインストールしています。

While there are some successes with using other tools like poetry or pip-tools, they do not share the same workflow as pip - especially when it comes to constraint vs. requirements management. Installing via Poetry or pip-tools is not currently supported. If you wish to install airflow using those tools you should use the constraints and convert them to appropriate format and workflow that your tool requires.

Installation tools

pyenv のインストールと利用 Python バージョンのインストール

公式の Docker イメージが Python 3.7 で作成されており、そのイメージに合わせるため、Python 3.7 を pyenv 経由でインストールします。

https://github.com/apache/airflow/blob/main/Dockerfile

pyenv のインストール。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ pyenv --version
pyenv 2.3.1-20-g572a8bcf

pyenv: install: Basic GitHub Checkout

Python 3.7 のインストール。

$ pyenv install 3.7.13
$ pyenv versions
* system (set by /home/zunda/.pyenv/version)
  3.7.13

pyenv 経由の Python インストール(というかコンパイル)時、いろいろライブラリが足りないと怒られたので、Githubトラブルシューティング・ページにあった下記のライブラリインストールを行っています。

$ sudo apt-get update; sudo apt-get install make build-essential libssl-dev zlib1g-dev \
  libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
  libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

pyenv will try its best to download and compile the wanted Python version, but sometimes compilation fails because of unmet system dependencies, or compilation succeeds but the new Python version exhibits weird failures at runtime. The following instructions are our recommendations for a sane build environment.

pyenv: Troubleshooting/FAQ: Suggested build environment

Airflow を管理するプロジェクトフォルダを作成し、Python 3.7.13 を利用するよう pyenv に設定。

$ mkdir ~/work/airflow
$ cd ~/work/airflow
$ pyenv local 3.7.13
$ python --version
Python 3.7.13

Python 仮想環境の作成

venv を利用して、Airflow 用の Python 仮想環境を作成。

$ cd ~/work/airflow
$ python -m venv venv-airflow
$ source venv-airflow/bin/activate
(venv-airflow) zunda@LAPTOP:~/work/airflow$

venv --- 仮想環境の作成

Airflow のインストール

事前に pip のアッググレード。

(venv-airflow) $ python -m pip install --upgrade pip

Airflow のインストール。

(venv-airflow) $ cd ~/work/airflow
(venv-airflow) $ AIRFLOW_VERSION=2.3.2
(venv-airflow) $ PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
(venv-airflow) $ CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
(venv-airflow) $ pip install "apache-airflow[async,postgres,google]==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
(venv-airflow) $ airflow version
2.3.2

Installing Airflow with extras and providers

requirements.txt を残しておく。

(venv-airflow) $ pip freeze > ~/work/airflow/requirements.txt

Airflow の起動

以下のコマンドで起動してくれます。環境変数 AIRFLOW_HOME でパスを指定すると、起動する Airflow のルートディレクトリを変更できます(デフォルトではユーザーディレクトリの下に作成される)。

(venv-airflow) $ echo 'export AIRFLOW_HOME="~/work/airflow"' >> ~/.bash_profile
(venv-airflow) $ source ~/.bash_profile
(venv-airflow) $ 
(venv-airflow) $ airflow standalone

Running Airflow locally

だだだーと表示されるログの中に、ログインユーザー名とパスワードもまじっています。

...
standalone |
standalone | Airflow is ready
standalone | Login with username: admin  password: GZYVYqNmBVff4dng
standalone | Airflow Standalone is for development purposes only. Do not use this in production!
standalone |
...

ブラウザで http://localhost:8080/ にアクセス、上記のログ上で表示されていたログインユーザー名とパスワードでログインできます。