Snowflakeのリソースモニターを設定してみた〜ACCOUNTレベル〜(2025年版)
がく@ちゅらデータエンジニアです。
随分前、2022年にですが、下記のような記事を書きました。
色々アップデートしているので、それを踏まえて、記事も書き直してみ用途思います。
やりたいこと
- アラートをSlackの#alert-${ENV(dev,stg,prd} チャンネルに投げる
- CHURA_ALERTみたいな監視用ユーザを作る。ログインは基本できないユーザにする
- アカウントレベルの監視をまずしたい
- ウェアハウス単位での監視もしたい(本記事ではオプション・・・)
通知用Slackチャンネルを作る
最近になると通知系はもっぱらSlackで受けることが多いです。
メーリングリストやGoogleGroupを使う方法を以前は使っていましたが・・・まぁ、Slackチャンネルで受けるのが一番楽だなぁーと思っています。
通知するチャンネルで通知メールを発行できます。
アカウントレベルのリソースモニター
通知用のユーザを作る(HOGE_NOTIFY)
今回は、Snowsightで作成することにします。
※EmailのVerifyとかあるし・・・ACCOUNTADMIN絡みだし、Terraform管理はしないほうがいいかなーなどの考えました。
- Snowsightにログイン
- ACCOUNTADMINで作業
- Admin>Users & Roles へ移動
- 【ボタン】+ User をクリック
- 以下を入力して、【ボタン】Create Userをクリック
- 入力項目
- User Name : HOGE_NOTIFY
- Email : ( Slackで受け取るのが楽で最近は好き)
- Password : (パスワードジェネレータなどを使うといいかも)
- Confirm Password : (↑と一緒のものを)
- ✅️ Force user to change password on first time login. (初回ログイン時にパスワード変更を強制する)
- Login Name : HOGE_NOTIFY
- Display Name : HOGE_NOTIFY
- First Name : HOGE
- Last Name : NOTIFY
- Default Role : ACCOUNTADMIN
- Default Warehouse : (なんでもいい)
できるだけName系を入れていますが、入れないと出来ないことがあった気がしているので、もう全部いれることにしています。
(何が出来ないんだっけなぁ・・・・実はもう不要かもしれない)
通知ユーザ(HOGE_USER)でログインする
初回ログインしたら下記を行います。
-
パスワードの変更する
-
MFAをセットアップする
- どのタイプで作成でもいい。個人的にはこの設定はすぐ消すのでオーセンティケータがいいかなと思います
- 設定完了後、TYPE=SERVICEにするので、すぐ消えます
-
ユーザアイコン(左ナビゲータ:最下部)を選択し、【リンク】Settingsをクリック
-
My Profileで「Please verify your email address. Resend verification」をクリック
-
-
VerifyメールがSlack(メールを設定したチャンネル)に届くので、【ボタン】VALIDATE YOUR EMAL をクリックする
Settings>Notificationsから 【トグル】Cost management をONする
※ここが2025版で変わったところかな・・・前はちょっとわかりにくかった
Resource Monitorを作成する
SQLワークシートを開き、下記SQLを実行する。
一旦、通知が出ることを確認するために、QUOTA=1にしておく
# ACCOUNTADMINで実行する
use role accountadmin;
create or replace resource monitor ACCOUNT_LEVEL_MONITOR with
credit_quota=1
notify_users = (HOGE_NOTIFY)
triggers on 25 percent do notify
on 50 percent do notify
on 75 percent do notify
on 100 percent do notify
on 150 percent do notify
;
ALTER ACCOUNT SET RESOURCE_MONITOR = ACCOUNT_LEVEL_MONITOR;
通知のテストをする。
XSサイズだと全然通知が飛ばないのです・・・・
-- _2XLARGEを使う(SIZEの大きいWHを使うと確認ができるので)
use WAREHOUSE WH_2XLARGE;
WITH gen_data AS (
SELECT SEQ4() AS id
FROM TABLE(GENERATOR(ROWCOUNT => 1000000000)) -- いっぱい行を生成
)
SELECT COUNT(*), SUM(id), AVG(id)
FROM gen_data;
通知が飛んだことが確認できれば、QUOTAを設定し直す(たとえば100クレジット/月)
ALTER RESOURCE MONITOR ACCOUNT_LEVEL_MONITOR
SET CREDIT_QUOTA=100;
;
- 通知ユーザでログインできないようにしてしまう
desc user HOGE_NOTIFY
->> select * from $1 where "value" != "default" and "property" IN ('PASSWORD','HAS_MFA');
ここで、PIPE演算子を使いました。
結構これが楽で便利でとても良い!
- TYPE=SERVICEを設定する
ALTER user HOGE_NOTIFY SET TYPE = SERVICE;
これでOK
Discussion