version up のきっかけ
- terraform-provider-snowflakeのGRANTまわりが大幅に変わった。
→ 2024/06/26にこれまでのgrant関係のリソースが使えなくなるので、慌てる。
- 今までもGRANT周りの動きは怪しかったので(権限ついたりつかなかったりが、ランダム?)、毎回terraformを実行後に、GRANT文のSQLを流していた。
- v70台あたりの動きがわちゃわちゃしてたので静観してたら、いつのまにかv90に!
手順
- migration guide を見ましょう
- https://github.com/Snowflake-Labs/terraform-provider-snowflake/blob/main/MIGRATION_GUIDE.md
- がんばって遡っても、v70くらいからしかない・・。😢
- しょうがない、計画を立てよう。。
いま管理しているもの
- DATABASE
- SCHEMA
- TABLE
- PROCEDURE
- TASK
- FILE FORMAT
- STAGE
- ROLE(※Roleは全面見直しだ。。)
- USER
- WAREHOUSE
バージョンアップ計画と、ついでに管理していきたいもの
- 現在の状態をcommit
- privillege関連の調査とコメントアウト(grantとRoleをいっかい外す)
- snowflake provider バージョンアップ
- Role追加する
- ついでに新規ユーザ追加/IP制限(※ここからついでに追加管理したいもの)
- カラムのマスキング追加
バージョンアップしたけど、エラーになった
- 環境変数が変わっていたよ
v0.55
export SNOWFLAKE_USER="tf-snow"
export SNOWFLAKE_PRIVATE_KEY_PATH="~/.ssh/snowflake_tf_snow_key.p8"
export SNOWFLAKE_REGION="ap-northeast-1.aws"
export SNOWFLAKE_ACCOUNT=xx99999"
v0.90
export SNOWFLAKE_USER="tf-snow"
export SNOWFLAKE_PRIVATE_KEY=`cat ~/.ssh/snowflake_tf_snow_key.p8`
export SNOWFLAKE_AUTHENTICATOR=JWT
export SNOWFLAKE_ACCOUNT="xx99999.ap-northeast-1.aws"
- いつのまにかJWT認証増えてた・・
- SNOWFLAKE_PRIVATE_KEYはSNOWFLAKE_PRIVATE_KEY_PATHのままでもいけるよ、とアドバイスもらいましたが、試してないです。すいません。その節はありがとうございました。
- SNOWFLAKE_ACCOUNTにSNOWFLAKE_REGIONが合体してた。
慎重に、Roleを作成するターン
- さがらさんの記事を見ながら、Functilnal Roles, Access Role,Access Roleへの権限grantを作成。さがらさん、いつもありがとうございます。
- https://dev.classmethod.jp/articles/snowflake-terraform-design-with-functional-and-access-role/
モジュール化してないときのRoleの追加手順
- モジュール化推奨らしいですが、弊社の他のterraform codeがモジュール化してないので、今回はモジュール化しません。なので、作成順は以下で行いました。
- 各オブジェクトは既に存在しているものとします。
- 各ユーザごとの権限に対するFunctional Rolesの作成
- 各リソースに対するAccess Rolesの作成
- Functional RolesにAccess Rolesをgrant
- WAREHOUSE
- DATABASE
- SCHEMA
- 法務ユーザは法務SchemaのSelect権限あるけど、経理ユーザは法務SchemaのSelect権限なし、というような状態にしたかったので、ひとつひとつマメに作成→Role切り替えて確認の繰り返し。
作業中の引っかかりポイント
-
terraform ユーザの Role
- SYSADMINでエラーになるところだけSECURITYADMINで作業してたけど、"snowflake_network_policy_attachment"でSYSADMINとSECURITYADMINの両方を持つRoleが必要になったので、terraformユーザにRole追加してproviderにも追加。providerが3つになってしまったので、どこかのタイミングで1つにしたい。
-
snowflake_user.hogehoge_user.name がsensitive判定となってエラーになったので、nonsensitive(snowflake_user.hogehoge_user.name) としてエラー回避。
-
procedure
- return_behaviorが非推奨に。
(return_behavior = "VOLATILE" がエラーになった)
- return_behaviorが非推奨に。
終わりに
- 「SnowVillage Unconference #1 – 初心者大歓迎!聞き専/飛入登壇, ご自由なスタイルで! -」にて、作業途中段階で「困ってるよー!」と投げかけて話を聞いてもらいました。困ってる仲間からたくさんアドバイスをいただきました。その節は大変お世話になりました。ありがとうございました。おかげで「困ってるのは私だけじゃない。よかった。」と安心して作業を進めることができました。
- 近いうちに第2回も開催されそうなので、その時はまたよろしくお願いします!
参考文献(いつもありがとうございます)