|

2023-09-07

データ関連

Cloud ComposerでSecret変数を使う

Google CloudCloud ComposerAirflow

Cloud ComposerでSecret変数を使うには?

Cloud Composerと外部接続

9月ということで暑さも少しだけピークを過ぎつつあるかなと感じる昨今ですが、皆さんCloud Composerは使っていますか?

 

Apache Airflow をベースに構築された、フルマネージドのワークフロー オーケストレーション サービスでおなじみの、Cloud Composerです。

 

自前でAirflow環境を構築するだけの元気とリソースと勇気があれば良いですが、 スモール な組織で ビッグデータウェアハウスドライブ させるには フルマネージドワーフクローオーケストレーションサービス がやはり欠かせませんよね。

 

今回はそんなCloud ComposerでSecret変数を活用するための方法をまとめています。

 

Secret変数の必要性

データの取り込み・吐き出し両方がワークフロー内で実行され得るところですので、Cloud Composerのようなデータ周りでのワークフローオーケストレーションサービスでどうしても必須になるのは、やはり外部との連携です。

Cloud Composerにおける外部サービスとの連携方法は大きく分けて2つです。

 

Connectionとして接続情報を登録する

AirflowのWeb GUI画面における「Admin → Connections」にアクセスすると、

DAGs_-_main_2023-09-04_14-37-51

 

下の画像のように、様々な接続情報のリスト画面に進みます。

Untitled

 

この画面から実際に接続情報を作成できます。

例えば、 apache-airflow-providers-slack のようなPyPIパッケージをインストールした上で、Slack APIなら下記のような画面から接続情報の登録が出来ます。

Untitled

 

これが一番簡単な方法であり、もちろんGUIでなくCLIからもAirflowであれば airflow connections コマンドで、Cloud Composerであれば gcloud composer environments コマンドで登録できます。

Cloud Composerの場合は、Airflow 接続を管理する の公式マニュアル が参考になります。

 

接続情報をDAG内に取り込んでワークフロー内で繋ぎにいく

Connectionが必ずしも登録できなかったり、複雑な処理を実施するためにオリジナルのカスタムオペレータでの対応が必要だったりする場合には、接続情報をDAG内に取り込み、通常のPythonスクリプトのような感覚で接続しに行って対応することもできます。

 

そのためには当然ながら接続情報をDAG内で取得する必要があります。

接続情報は基本的に秘匿すべき情報なので、Secret変数のようなセキュアな扱いを行う必要があります。今回はその対応方法についてまとめます。

 

公式マニュアルとしては、「環境にSecret Managerを登録する」の内容になります。そこをよりかみ砕いて説明しますね。

 

Secret ManagerとCloud Composerの接続

まず、Secret Manager APIを有効にします。

そのうえで、Secret ManagerとCloud Composerを繋ぎます。

 

Airflow構成オプション

Secret Managerとの接続のためには、Airflow構成オプションを変更する必要があります。SecretManagerを使うための設定値は

  • セクション: secrets

  • キー: backend

に、値として airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend

を登録します。

 

また、それに加えて

  • セクション: secrets

  • キー: backend_kwargs

に、各種設定を書き込めますが、基本的には特に変更する必要がないので、先ほどの「環境にSecret Managerを登録する」の公式マニュアルのほうを参照してください。

私は基本的にプロジェクトIDは {"project_id": "[プロジェクトID]"} として指定していてこの値を設定しています。

 

Secret Managerへの値の登録

上記設定により、Cloud ComposerがSecret Managerの値を参照するようになったので、Secret Managerに値を登録する必要があります。

 

特に先ほどの backend_kwargs で設定を変更していない場合は、airflow-variables-[変数名] という名前で登録していく必要があります。

登録はGUIベースでも行えます。

Secret_Manager__セキュリティ__abc-cdp__Google_Cloud_コンソール_2023-09-04_14-51-34

 

DAGからの参照

このように変数名を設定し終えたら、DAGから

from airflow.models.variable import Variable secret_var = Variable.get('[変数名]')

のようにしてSecret Managerに登録したSecret変数を secret_var に読み出すことが出来ます。

非常に簡単ですね。

 

まとめ

今回はCloud ComposerでのSecret Managerとの連携方法についてまとめていきました。

公式ドキュメントは長いのですが、手順としてはすごくシンプルなので一度やり方を覚えてしまえばたいしたことない作業となると思います。

なので、 Secret Managerを使うのを面倒くさがったりせずに適切に情報を管理される ことをオススメします。

 

Cloud Composerの強いところはPythonで記述できるところで、いざとなったら自前のオペレータを立ち上げて柔軟な処理を出来るところだと実感している昨今です。そういったときには欠かせない知識となる気がします。

なお、管理対象を減らすという意味ではConnectionに頼っていくのも良いと思いますが、オペレータが乱立して繁雑になるくらいなら新しく自前でオペレータを作った方が良いのではないか…と思うことも多く、どちらが良いのか…については試行錯誤する日々です。

 


この記事の著者

プロフィール画像

伴 拓也

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

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