サマリ
- local で Composer 向けの DAG 開発をしたい
- BigQuery Operator ぐらいはちゃんとうごいてほしい
- Airflow 2.1.x
- Python 3.8
- ほんとはリポジトリつくってそれ pull してねってすれば親切なんだろうけど面倒くさいので個人のブログに書きなぐっている
ファイル
ディレクトリ構成
. ├── Dockerfile ├── credentials │ └── credential.json ├── dags │ └── hello.py ├── docker-compose.yaml ├── .env ├── logs └── plugins
credential.json
Google Cloud の Service Account のもの
.env
AIRFLOW_UID=503 AIRFLOW_GID=0 GOOGLE_APPLICATION_CREDENTIALS=/opt/airflow/credentials/credential.json AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT=google-cloud-platform://?extra__google_cloud_platform__key_path=%2Fopt%2Fairflow%2Fcredentials%2Fcredential.json&extra__google_cloud_platform__project=[your project_id]
docker-compose.yaml
公式のを拾ってくる
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.1.4/docker-compose.yaml'
変更点
image 変更
image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.1.4}
を適当な自分で build する image に
image: docker-airflow-for-gcp
volume 追加
volumes: - ./dags:/opt/airflow/dags - ./logs:/opt/airflow/logs - ./plugins:/opt/airflow/plugins - ./credentials:/opt/airflow/credentials # 追記
credentials の volume を追記
Dockerfile
gcloud コマンドも居てほしいなと思って、cloud sdk install してる
FROM apache/airflow:2.1.4-python3.8 RUN mkdir -p /opt/airflow/credentials USER root RUN sudo apt-get update -yqq \ && sudo apt-get install curl apt-transport-https ca-certificates gnupg procps -yqq RUN sudo echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - RUN sudo apt-get update \ && sudo apt-get install google-cloud-sdk -y RUN gcloud version
操作
コンテナビルド
$ docker build --rm -t docker-airflow-for-gcp .
DB初期化
$ docker-compose up airflow-init
起動
$ docker-compose up
さいごに
- localhost:8080 でブラウザアクセスできるようになる。
- id/passowrd は 初期状態で airflow / airflow
- apache-airflow-providers-google とかは、この Airflow 公式イメージには入ってた。他必要なものがあれば、Dockerfile で pip install してあげればよい。
- これで、BigQuery Operator ぐらいは動くけど、他の物を動かすときは、環境変数(.env)に追加が必要かも。