Shunya Ueta

CloudComposer の Variables (環境変数)を gcloud cli で取得する

Airflow 1 系で設定されている環境変数を JSON ファイルとして GUI を使って書き出す方法の続報です。

前回、Airflow CLI からでも環境変数を JSON ファイルとして出力できる1が、手元から実行しても GCP 上のインスタンスにしか保存されなかったので諦めたと書きました。 ですが、その問題を解決できたので、解決方法を公開しておきます。

Cloud Storage に格納されるデータ  |  Cloud Composer  |  Google Cloudによると、Cloud Composer インスタンス内部のディレクトリは GCS にマッピングされているらしい。

マッピング関係は以下( GCP のドキュメントをそのまま引用)

フォルダStorage パスマッピングされたディレクトリ説明
DAGgs://bucket-name/dags/home/airflow/gcs/dags環境の DAG を保存します。このフォルダ内の DAG のみが環境にスケジュールされます。
プラグインgs://bucket-name/plugins/home/airflow/gcs/pluginsカスタム プラグインを保存します。カスタムのインハウス Airflow 演算子、フック、センサー、インターフェースなどです。
データgs://bucket-name/data/home/airflow/gcs/dataタスクが生成して使用するデータを保存します。このフォルダは、すべてのワーカーノードにマウントされます。
ログgs://bucket-name/logsタスクの Airflow ログを保存します。ログは Airflow ウェブ インターフェースでも利用できます。

それを使えば、/home/airflow/gcs/data にファイルを保存すれば、CloudComposer が保有している GCS の gs://bucket-name/data にアクセスすれば、そのファイルが参照可能になる。

実際に以下のようなコマンドを実行したところ、gs://bucket-name/data からファイルを参照できました。 めでたい 🎉

# GCSにファイルを保存
$ gcloud composer environments run COMPOSER_NAME --location LOCATION variables -- --export /home/airflow/gcs/data/airflow_env.json
# 生成されたファイルをGCS上で確認
$ gsutil cat `gs://bucket-name/data/airflow_env.json

これで前回紹介したアプローチの欠点である GUI での操作に依存せず、CLI で完結してファイルを作成できるようになったのでミスも減りますね。 このディレクトリと GCS のマッピング機能を考えた人は、頭いいなと思いました。

まず CloudComposer を GCP 上で提供する上で DAG の同期のためにマッピング機能は不可欠なので、最初からこの機能があるんじゃないかと考えるべきでしたね… 反省

---

関連しているかもしれない記事


📮 📧 🐏: 記事への感想のおたよりをおまちしてます。 お気軽にお送りください。 メールアドレス入力があればメールで返信させていただきます。 もちろんお返事を希望せずに単なる感想だけでも大歓迎です。

このサイトの更新情報をRSSで配信しています。 お好きなフィードリーダーで購読してみてください。

このウェブサイトの運営や著者の活動を支援していただける方を募集しています。 もしよろしければ、Buy Me a Coffee からサポート(投げ銭)していただけると、著者の活動のモチベーションに繋がります✨

#airflow #gcp