|

2024-08-30

データ関連

Cloud Composer の運用には Secret Manager を組み合わせるのがオススメ

Cloud ComposerSecret ManagerGoogle Cloud

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から確認出来ます。 Image_2024-08-15_16-07-27

この 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ならではのところもドキュメントから拾っていくことが大切ですね。

 


この記事の著者

プロフィール画像

伴 拓也

朝日放送グループホールディングス株式会社 DX・メディアデザイン局 デジタル・メディアチーム

アプリケーションからインフラ、ネットワーク、データエンジニアリングまで幅広い守備範囲が売り。最近はデータ基盤の構築まわりに力を入れて取り組む。 主な実績として、M-1グランプリ敗者復活戦投票システムのマルチクラウド化等。