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 からファイルを参照できました。 めでたい 🎉

1
2
3
4
# 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 の同期のためにマッピング機能は不可欠なので、最初からこの機能があるんじゃないかと考えるべきでしたね… 反省


  1. python - Export all Airflow variables - Stack Overflow ↩︎

See Also

Support

記事をお読みくださりありがとうございます。このウェブサイトの運営を支援していただける方を募集しています。 もしよろしければ、下のボタンからサポート(投げ銭)していただけると、ブログ執筆、情報発信のモチベーションに繋がります✨