恥ずかしながら最近になって知ったワークフローエンジン Apache Airflow。日本語の紹介記事もちらほら出てきていますが、公式ドキュメントをちょっとずつ抄訳しながら読んでいこうと思います。
19目の今回は変数(Variables)。
バージョン2.3.3時点のものです。
変数(Variables)
変数(variables)はAriflowのランタイムに設定情報を供給するための仕組みです。それは一般的なキー/バリュー・ストアであり、グローバル・スコープを持ち、タスクのコードから問い合わせることができ、Web UIから簡単に指定で可能です。JSONファイルのアップロードによる一括指定も可能です。
変数を使うには、Variable
モジュールをインポートして、get
メソッドを呼び出します:
from airflow.models import Variable
# 通常の呼び出し
foo = Variable.get("foo")
# JSON値の自動デシリアライズ
bar = Variable.get("bar", deserialize_json=True)
# 変数が設定されていない場合、default_varの値(None)を返す
baz = Variable.get("baz", default_var=None)
テンプレートから呼び出すこともできます:
# 生の値
echo {{ var.value.<variable_name> }}
# JSON値の自動デシリアライズ
echo {{ var.json.<variable_name> }}
変数はグローバル・スコープを持ちます。そしてシステム全体に適用される設定情報のために利用されるべきです。タスクないしオペレーター同士のデータのやり取りにはXComsを利用すべきです。
加えて、ほとんどの設定情報は(グローバル・スコープではなく)DAGファイルのスコープ内に留めておくことをお勧めします。DAGファイルであればバージョン管理ツールで管理できます。変数は本当にランタイムに固有の値を管理するためにのみ利用すべきです。
変数の設定と管理について詳しくは変数を管理するをご覧ください。
バッチを運用していると、ランタイムに固有の、ランタイムに依存する、実行の都度変える、実行のまさにそのときに指定する値というのが必要になることは、たしかにしばしばあります。
ただここで注意されているように、ごくごく限られたケースでのみ、明確な運用設計ができているときのみ、この「変数」の機能を使うべきでしょう。