Cloud Composer は Secret Manager と組み合わせて運用するのがラク
Cloud Composer での再現性を確保した構築
またCloud Composerネタです。
Cloud Composer については結構長いこと触っていることもあって、いくつかネタがあるので大放出期間に入ります。
Cloud Composerのようなデータ基盤の基幹となりうるサービスの場合はいかにその再現性を担保し、いざとなったらすぐ再構築できるようにしておけるかが肝だと思います。
サービス立ち上げ自体はTerraform等でIaCを徹底していれば大丈夫ですが、一方で(シークレット)変数や Airflow 特有の概念である Connection をどう管理するか?も一つのポイントであると思います。
今回はそれらの設定方法についてです。
Cloud Composer の変数の管理方法
Secret Manager での Airflow 用変数定義
まずは変数の話です。これは Cloud Composer の外にあるサービスの Secret Manager を使うことによって管理出来ます。
公式ドキュメントの「環境に Secret Manager を構成する」のページ に記述があるのですが、少しわかりにくいので方法を端的に言うと、
airflow-variables-sampe_val
のように、 airflow-variables-[変数名]
の書式でSecretを定義するだけです。
実際の DAG 内での Secret Manager からの変数取得
Secret Manager で定義した変数については、DAG等の中で下記のようなコードで簡単に取得できます。
from airflow.models.variable import Variable var = Variable.get("[変数名]")
環境変数を取得するような感覚で取得出来るのでとても便利ですね。
Secret Manager で Connection を管理する
Secret Manager での Connection 追加方法
先ほどのページにも書いてあるのですが、「シークレット」といえば変数ということで、変数ばかりに気が回っていて、こっちを見落としていたのですが、 Secret Manager で Airflow の Connection も管理出来ます。
方法は 公式ドキュメントの「Secret Manager で接続を追加する」のページ にある通りで、
airflow-connections-example_connection
のように、 airflow-connections-[Connection名]
の書式でSecretを定義すればいいだけです。
Connection の設定値については JSON での指定もできますが、後述の gcloud
コマンドでのURI取得が楽なので、 URI で指定するのがオススメです。
gcloud コマンドによる既存 Connection の URI 取得方法
Airflow の GUI 等で作成した Connection の URI は、 gcloud composer
コマンド経由で Airflow CLI
のコマンドを走らせることで簡単に取得出来ます。
具体的に言うと、下記のようなコマンドです。
gcloud composer environments run [Composer名] --location [ロケーション] connections -- get [Connection名] --output json | jq -r '.[0].get_uri'
Compoesr名はそのままCloud Composerにつけている名前を、ロケーションは asia-northeast1
などを入れます。
( Airflow CLI
でいうところの connection get [Connection名]
を走らせています)
Connection名のところに入れるIDはAirflowのGUIから確認出来ます。
この Conn Id
となっているものですね。
Connectionごとに色々設定値があるので、ドキュメントを調べるのが面倒なときは AirflowのGUIで Connection を作って上記コマンドでURIを取得してしまったほうが早い と思っています。
設定の優先順位について
以上で Secret Managerによる設定方法について扱ってきましたが、 環境変数やAirflow自体のConnection設定とバッティングしている場合 についても気にしておかないといけません。
これについては明確に挙動が示されていて、
公式ドキュメントの「環境に Secret Manager を構成する」のページ に下記記述があります
変数と接続を取得するとき、Cloud Composer は最初に Secret Manager をチェックします。リクエストされた変数または接続が見つからない場合、Cloud Composer は次に環境変数と Airflow データベースを確認します。
というわけで、 Secret Manager に設定されている値が最優先です。
逆に言うと、 何か Airflow 自体の環境変数や Connection をいじっても状況が変わらない場合は、Secret Managerも確認しないといけない ということですね。
まとめ
今回は Airflow というより Cloud Composer ならではのところで、Secret Managerと組み合わせることによって簡単に Airflow 用の変数や Connection を管理出来ること、また、その方法について扱ってきました。
これらとIaCとの組みあわせで再現性の高いCloud Composer環境が構築できるのではないでしょうか。
Cloud Composer は Airflow のマネージドサービスですが、ただのマネージドでなく、 Google Cloud 内のサービスと組み合わせることでより便利に使えるというのがポイントです。
保守・運用の面を考えると、Cloud Composerならではのところもドキュメントから拾っていくことが大切ですね。