❄️

Snowflakeのリソースモニターを設定してみた〜ACCOUNTレベル〜(2025年版)

がく@ちゅらデータエンジニアです。

随分前、2022年にですが、下記のような記事を書きました。
https://zenn.dev/gak_t12/articles/f52750f9e07bbd

色々アップデートしているので、それを踏まえて、記事も書き直してみ用途思います。

やりたいこと

  • アラートをSlackの#alert-${ENV(dev,stg,prd} チャンネルに投げる
  • CHURA_ALERTみたいな監視用ユーザを作る。ログインは基本できないユーザにする
  • アカウントレベルの監視をまずしたい
  • ウェアハウス単位での監視もしたい(本記事ではオプション・・・)

通知用Slackチャンネルを作る

最近になると通知系はもっぱらSlackで受けることが多いです。
メーリングリストやGoogleGroupを使う方法を以前は使っていましたが・・・まぁ、Slackチャンネルで受けるのが一番楽だなぁーと思っています。

通知するチャンネルで通知メールを発行できます。

アカウントレベルのリソースモニター

通知用のユーザを作る(HOGE_NOTIFY)

今回は、Snowsightで作成することにします。
※EmailのVerifyとかあるし・・・ACCOUNTADMIN絡みだし、Terraform管理はしないほうがいいかなーなどの考えました。

  1. Snowsightにログイン
  2. ACCOUNTADMINで作業
  3. Admin>Users & Roles へ移動
  4. 【ボタン】+ User をクリック
  5. 以下を入力して、【ボタン】Create Userをクリック
  6. 入力項目
    • 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