いちいち 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_APPLICATIONS
や GOOGLE_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>