CloudComposer(GCPのAirflow のマネージドサービス)で運用している AirFlow 1系上で設定されている環境変数をJSONファイルとして書き出したかったが、つまずいたのでメモを公開しておく。

AirFlow の運用の理想としては、リポジトリをベースにCI経由でCloudComposer を構築していくのがベストだが、AirFlowではGUIでお手軽に環境変数(Airflow では Variables とよばれている)ができるのだが、そのデメリットとしてリポジトリなどで環境変数している場合いともたやすく一貫性が壊れてしまう。 そして結果的にSingle Source of True の状態が喪失する。

AirFlow の環境変数を JSON ファイルとして書き出す方法

  1. 上部のAdminメニューから、Variablesをクリックしてページに移動
  2. With selectedボタンをクリックすると Exportボタンがドロップダウンリスト内にでてくるので、これをクリックすればAirFlowに保存されている環境変数をJSONファイルとして書き出せる Exportできるとは所見で気が付かなかったのでこのUIを考えた人は罪深い。@naoさんに教えていただけて感謝!

Airflow CLIからでも環境変数を JSON ファイルとして出力できるらしい1が、手元から実行してもローカルには保存されなかったので、実行結果はCloudComposer 内部のインスタンスに保存されている模様。

BashとGCSのオペレーターを組み合わせればJSONファイルをGCSに保存はできそうだが、それもめんどくさそうではある。 直接SSHでCloudComposer のインスタンスにつなげたほうがまだ楽そうですよね

gcloud composer environments run search-query-suggest-ypenglyn-20200408115337-dev --location asia-northeast1 variables -- --export /Users/hurutoriya/hoge.json

公開用

gcloud composer environments run COMPOSER_NAME --location asia-northeast1 variables -- --export env.json

まとめ

Airflow のGUIで環境変数を設定するのは便利だけど、Single Souce of Truth ではなくなるので使い所をきちんと見極めよう!!

Footnotes

  1. https://stackoverflow.com/questions/53206003/export-all-airflow-variables