Edited at

Cloud Composer 向けの DAG ファイルの Syntax チェックをローカルで実行する

いちいち gcloud composer environments storage dags import して web ui から確認していると日が暮れるので、手元で syntax チェックぐらいはしてから動作確認できるようにしてみた。


Docker イメージのビルド

Airflow の docker イメージは https://github.com/puckel/docker-airflow にあった。

Composer 向けに google クライアントなどをいれる必要があったのでカスタム用の Dockerfile を自分で用意した。


Dockerfile

# ref. https://github.com/puckel/docker-airflow

FROM puckel/docker-airflow:latest

USER root

# Install additional packages required by composer
RUN pip install google-cloud-bigquery \
google-cloud-storage \
google-cloud-container \
google-api-python-client \
grpcio \
kubernetes \
pandas_gbq

# Install additional packages required by us
RUN pip install "slackclient<2.0.0"

USER airflow


docker build --rm -t docker-airflow-custom .


Airflow の起動

単純に起動してみると GOOGLE_DEFAULT_APPLICATIONSGOOGLE_CLOUD_PROJECT が欲しいと言われるので、その辺りを設定しつつ、dags ファイルをおいているディレクトリをマウントして airflow を起動。

Web UI が立ち上がる(が、そこは本質ではなく、DBの初期化をした状態で置いておきたいだけ)

docker run -p 8080:8080 -e GOOGLE_CLOUD_PROJECT=<YOUR_PROJECT> \

-v $HOME/.config:/usr/local/airflow/.config \
-v <YOUR_DAGS_DIR>:/usr/local/airflow/dags \
--rm -it docker-airflow-custom

FYI: デーモンとして起動したい場合は -d オプションをつけてください。

FYI: Airflow サーバ起動時にも1発 Syntax チェックは走ります。


DAGのSyntaxチェック

あとは起動したコンテナに入って /entrypoint.sh python で dag の python スクリプトを叩けば Syntax チェックになる。

docker exec -it $(docker ps | grep docker-airflow-custom | awk '{print $1}') \

/entrypoint.sh python -W ignore::UserWarning dags/<YOUR_DAG.py>