ビットの海

ゆるふわソフトウェアエンジニアしゃぜのブログ

Airflow 公式 docker image を使って、Cloud Composer の Local 開発環境を構築

サマリ

  • 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)に追加が必要かも。

参考にしました

Cloud Composer の辛さと、それに負けない開発フローの構築 ~ローカル環境開発編~|JDSC|note