Snowflakeリソースモニター入門|予算超過を防ぐ仕組み

Snowflakeリソースモニター入門|予算超過を防ぐ仕組み Snowflake

はじめに:気づいたらクレジットが…を防ぎたい!

Snowflakeは従量課金なので、ウェアハウスを動かしている時間ぶんだけクレジット(Snowflakeの利用料単位)を消費します。便利な反面、「重いクエリを放置」「自動サスペンドの設定ミス」などで、月末に請求を見てびっくり…なんてことも。

そんな事故を防いでくれるのが、今日ご紹介する リソースモニター(Resource Monitor) です。あらかじめ「今月は◯◯クレジットまで」と上限を決めておけば、超えそうになった時に通知したり、ウェアハウスを自動で止めてくれたりします。いわばクレジットの番人ですね!

Snowflakeリソースモニター入門|予算超過を防ぐ仕組み

リソースモニターの基本概念

リソースモニターは「クレジット上限 + 監視期間 + しきい値ごとのアクション」の3点セットで動きます。

  • CREDIT_QUOTA:期間内に使ってよいクレジット数(例:100)
  • FREQUENCY:DAILY / WEEKLY / MONTHLY / YEARLY / NEVER
  • TRIGGERS:消費率(%)に応じた動作 ― NOTIFY / SUSPEND / SUSPEND_IMMEDIATE

SUSPENDは「実行中のクエリは終わらせてから停止」、SUSPEND_IMMEDIATEは「即停止」です。後者は強制シャットダウンに近いので、本番では使い分けに注意しましょう。

SQLで作ってみよう

ACCOUNTADMIN ロールで、以下のように作成します。

USE ROLE ACCOUNTADMIN;

CREATE OR REPLACE RESOURCE MONITOR rm_dev_monthly
  WITH CREDIT_QUOTA = 100
       FREQUENCY = MONTHLY
       START_TIMESTAMP = IMMEDIATELY
  TRIGGERS
    ON 75 PERCENT DO NOTIFY
    ON 90 PERCENT DO SUSPEND
    ON 100 PERCENT DO SUSPEND_IMMEDIATE;

-- 特定ウェアハウスに割り当て
ALTER WAREHOUSE dev_wh
  SET RESOURCE_MONITOR = rm_dev_monthly;

これで、月100クレジットを基準に「75%で通知 → 90%でサスペンド → 100%で即停止」という三段階の安全弁が完成します。アカウント全体に適用したい場合は ALTER ACCOUNT SET RESOURCE_MONITOR = ... を使います。

Snowsightでの設定手順

GUI派の方は Snowsight からも作れます。

  1. 左メニューの Admin → Cost Management → Resource Monitors を開く
  2. 右上の + Resource Monitor をクリック
  3. 名前・クォータ・スケジュール・トリガーを入力
  4. 適用先(Account / Warehouse)を選んで保存

通知メールを受け取りたいユーザーは、自分のプロフィールで「Receive Resource Monitor Notifications」をONにしておく必要があります。ここを忘れがちなので注意!

Snowsightでの設定手順の解説図

よくあるユースケースと注意点

典型例は「開発用ウェアハウスは月50クレジットまで」「BI用は週20クレジットまで」のように、用途別に上限を分けるパターンです。本番ETL用には通知のみ(SUSPENDなし)にして止まらないよう運用するのも定番。

注意点としては、リソースモニターはサーバーレス機能(Snowpipe、自動クラスタリング、検索最適化など)のクレジットは制御できないこと。コスト全体を見るには ACCOUNT_USAGEビューでのクレジット分析と組み合わせるのがおすすめです。また、根本的にクレジット消費を抑えるには、クエリ最適化のベストプラクティスや、過剰スケールを避けるマルチクラスタウェアハウスの調整も効果的です。

まとめ

リソースモニターは、Snowflake運用で最初に必ず仕掛けておきたい安全装置です。CREDIT_QUOTA・FREQUENCY・TRIGGERSの3点を理解すれば、5分で予算超過対策ができます。「通知だけ」から始めて、慣れてきたらSUSPENDも組み込む、という段階的な導入が安心ですよ。

参考リンク

関連記事