🤔
Terraformで管理するSnowflakeリソースについて考える
はじめに
Terraformを使ったIaC化は「属人性の排除・再現性・情報共有の簡便化」に繋がります。
ですが、いざTerraformで運用していると意外とTerraformのみでリソースを操作するのが難しい状況がありますよね。。
今回は私が触ったTerraform+Snowflakeの環境を通して
- 管理しやすいリソース
- 条件付きで管理が可能なリソース
- 管理が難しいと思うリソース
を備忘録として残しておきます。
今からSnowflakeのリソースをTerraformで管理するぞ!みたいな人は参考にしてもらえると幸いです。
管理しやすいリソース
独占的に管理出来るリソースはTerraform管理したほうが良い。
(ここでは、リソースの追加・変更・削除の操作をTerraformのみから実行できる状態を独占的と言ってます。)
Snowflakeにおいては下記のリソース管理は独占的に管理しやすい。
リソース名 | 管理しやすい理由 |
---|---|
ロール | RBACの作成・管理は独占的に管理しやすい。権限の編集をする人は限られることが多いため。 |
リソースモニター | PJの初期や契約更新時に変えるため、更新頻繁が低く独占的に管理しやすい。 |
ウェアハウス | PJ初期や定期メンテナンスで作成・削除をするぐらいのため、独占的に管理しやすい。 |
データベース | PJ初期に定義することが多い、DEV,(TEST),STG,PROD と多くてもリソースが3,4つに絞れるため独占的に管理しやすい |
スキーマ | モダンデータスタック位置づけのSnowflakeなら各DBにINTERFACE,{LAKE/RAW},DWH,{MART/ANALYSIS} のように3,4つのスキーマしか管理しないため独占的に管理しやすい |
ストレージ統合 | ACCOUNTADMINが所持する権限のため、操作できる人が限られる。また頻繁に更新をしないため独占的に管理しやすい。 |
通知統合 | 同上 |
条件付きで管理が可能なリソース
- みんなで追加・変更・削除のルールが守れる
-
Snowflake Providerが対応している
下記の部分はしやすいと思います。
リソース名 | 必要な条件 |
---|---|
ユーザ | ユーザ作成のフローがある。非エンジニア向けにデータシリアライズ言語に落とし込むGUIがある。このようなサポートやルールが必要。エンジニアのみであればルール提示のみで良さそう |
ユーザとロールの紐づけ | 同上 |
ファイルフォーマット | テーブルと合わせてアドホックに作られる可能性が高い。外部テーブルのselect には必須のためシステム化まで話が進んだ場合に管理する。 |
UDF・ストアプロシージャ | 同上 |
外部ステージ | 同上 |
管理が難しいと思うリソース
ルールを作成してると作業が滞ってしょうがないパターン
リソース名 | 管理が難しい理由 |
---|---|
テーブル/ビュー | dbtを使う場合、管理範囲が被る。 データをアドホックに触りたいときにTerraformが壁となってしまう。 |
こごと
TerraformでIaC管理をやっていくうちにそのプロダクトのIaCをいじれる人は一人だけ・・・という怖い話に繋がらないようがんばります。。。
うまく使えば、属人性の排除・再現性・情報共有の簡便化と素晴らしいところが多いですしね〜
私はTerraformを使って管理することが多いですが、それ以外のIaCツールでも独占的に管理できるかは同じように検討できると思います。
Discussion