モチベーション
airflowをdockerコンテナ上で動かしたい。
コンテナの中にあらかじめgcloud SDKを入れておきたい。
環境
Ubuntu(WSL)
Dockerfile
FROM apache/airflow:2.8.1
USER root
RUN sudo apt-get update \
&& sudo apt-get install apt-transport-https ca-certificates gnupg curl
RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list \
&& curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg \
&& apt-get update -y \
&& apt-get install google-cloud-sdk -y
USER airflow
シンプルに、airflowのイメージをもとに、gcloud SDKの公式ドキュメントに基づいてインストール作業を追加しています。
上記はDebian/Ubuntu用のコードですので、他のOSについてはGoogle公式ドキュメントを参照してください。
インストール後
公式ドキュメントでは、
gcloud init
するように指示がありますが、airflowをユーザーアカウントで稼働させる事はないと思うので、ひとまず必要ありません。
GCのサービスにairflowからアクセスする際に認証が必要ですが、その認証はサービスアカウントの権限借用で行うことになります。
airflowは(docker-compose.yamlを通じて)下記のように複数のサービスが構成されます。
- airflow-scheduler
- airflow-worker
- airflow-triggerer
- airflow-webserver
- airflow-redis
- airflow-postgres
実際にはサフィックスとして「-1」などの番号が打たれます。また、redisやpostgresなどは採用するDBによって異なります(…とはいえ多くの場合はredisとpostgresではないでしょうか)。
このうち、ADC(デフォルト認証)が必要になるのは、
- scheduler
- worker
- triggerer
- webserver
の2つのようです。(workerだけでいいように思いましたが、実際には他のサービス(サーバー)でもADCを設定しないとDAGがうまく動きませんでした。)
参考