CloudComposer のDAGをCircleCIで更新する
Cloud Composer(Airflow) の DAG を GitHub リポジトリで管理して、CI によりリポジトリで管理している DAG を Pull Request がマージされると Cloud Composer の DAG へ同期する方法について説明する。
DAG は、ルートディレクトリ直下の dags/
というディレクトリに格納されている状態を前提とする。
以下の2つのコマンドラインツールを利用して実現できる。
- Service Account の認証のために
gcloud
- DAG の同期のために
gsutil
CircleCI によるワークフローの記述例は以下のとおり
version: 2.1
jobs:
rsync-dags:
working_directory: ~/workspace
docker:
- image: gcr.io/google.com/cloudsdktool/cloud-sdk:alpine
environment:
GOOGLE_APPLICATION_CREDENTIALS: /gcp-service-key.json
steps:
- checkout
- run:
name: Sync DAG folder to GCS's DAG folder
command: |
echo "${CLOUD_COMPOSER_CREDENTIALS_JSON}" > ${GOOGLE_APPLICATION_CREDENTIALS}
gcloud auth activate-service-account --key-file ${GOOGLE_APPLICATION_CREDENTIALS}
gsutil -m rsync -d -r dags \
"$(gcloud composer environments describe {COMPOSER_NAME} --project={GCP_PROJECT} --location={REGION} --format="get(config.dagGcsPrefix)")"
workflows:
rsync_dags:
jobs:
- rsync-dags
Sync DAG folder to GCS's DAG folder
で行っている内容を順を追って説明する。
- サービスアカウントのクレデンシャルファイルを CircleCI の環境変数として保存しておき、リダイレクトにより JSON ファイルとして書き出す
echo "${CLOUD_COMPOSER_CREDENTIALS_JSON}" > ${GOOGLE_APPLICATION_CREDENTIALS}
NOTE: セキュリティ対策としてクレデンシャルファイルは必ず環境変数として扱う。
- 1 で生成したクレデンシャルファイルにより、サービスアカウント認証を gcloud コマンドで行う
gcloud auth activate-service-account --key-file ${GOOGLE_APPLICATION_CREDENTIALS}
- CloudComposer の DAG が格納されている GCS のバケットを gcloud コマンドで取得して、gsutil コマンドで DAG ファイルの同期を行う
GCP の Cloud Composer の DAG を素早く・簡単にデバッグする の記事でも紹介した方法で DAG の同期を行う。
gsutil -m rsync -d -r dags "$(gcloud composer environments describe {COMPOSER_NAME} --project={GCP_PROJECT} --location={REGION} --format="get(config.dagGcsPrefix)")"
{XXX} には使用する環境の情報を置換してください。
"$(gcloud composer environments describe {COMPOSER_NAME} --project={GCP_PROJECT} --location={REGION} --format="get(config.dagGcsPrefix)")"
- 指定した GCP Project で動く Cloud Composer の DAG が格納されている GCS のパスを取得できる。
gsutil -m rsync -d -r dags
-m
は並列処理-d
は元のディレクトリに存在しないファイルがコピー先にあれば削除(ミラーリング)。これにより、GCS 上で DAG を新たに作成して、デバッグしていたとしても、CI が走ればリポジトリにない DAG ファイルは削除され、リポジトリの DAG と完全に同期される。-r
はディレクトリとしてコピー- 上記のオプションにより
dags
ディレクトリの DAG ファイルを GCS にミラーリングで同期を行う。
Reference
関連しているかもしれない記事
- GCPのCloud Composer のDAGを素早く・簡単にデバッグする
- CircleCI アプリ内の設定ファイルエディターを利用して、CI上の環境変数などローカルCLIでは確認できない挙動を素早く確認して修正する
- gcloud commands で Pub/Sub に jsonファイルをメッセージとして公開 (Pusblish) する
- GKE 上にて Pythonで logger.info() を行うとCloud logging では stderr に保存され、すべてエラーになる問題への対処法
- 遅すぎる `pandas.read_gbq` を使わずに、Google BigQueryから高速にデータを読み込む
📮 📧 🐏: 記事への感想のおたよりをおまちしてます。 お気軽にお送りください。 メールアドレス入力があればメールで返信させていただきます。 もちろんお返事を希望せずに単なる感想だけでも大歓迎です。
このサイトの更新情報をRSSで配信しています。 お好きなフィードリーダーで購読してみてください。
このウェブサイトの運営や著者の活動を支援していただける方を募集しています。 もしよろしければ、Buy Me a Coffee からサポート(投げ銭)していただけると、著者の活動のモチベーションに繋がります✨
Amazonでほしいものリストも公開しているので、こちらからもサポートしていただけると励みになります。