SELECTSELECT

SELECT

Resource MonitorsでSnowflakeのコストを抑える

By Ian WhitestoneMar 17, 20235 min read

このページはEnglishDeutschEspañolFrançaisItalianoPortuguêsでもご覧いただけます。

Resource Monitorsは、ユーザーが支出を管理できるようSnowflakeが提供している機能です。本記事では、アカウント内でResource Monitorsを設定し、最大限に活用するために知っておきたいポイントを一通り解説します。まずは、そもそもなぜResource Monitorsを使うべきなのかから見ていきましょう。

Snowflake Resource Monitorsの役割

Snowflakeの従量課金モデルと柔軟なスケーリングのおかげで、必要なリソース分だけ支払いながら、需要に応じて素早く拡張できます。一方で、適切なコントロールを設けずに放置すると、Snowflakeのコストは想定外に膨らみがちです。Resource Monitorsは、設定した支出しきい値に達した時点で通知を送ることで、コストの可視化と抑制を支援します。さらに、想定外のクレジット消費を抑え、契約更新が前倒しになる事態を防ぐ用途にも活用できます。

Snowflake Resource Monitorsでできること

Resource Monitorsを使うと、特定のリソースと期間に対してSnowflakeのクレジット上限を指定できます。たとえば、ある1つのウェアハウスやウェアハウスのグループに対して、1日あたり50クレジットといった上限を設定できます。指定した期間内にその上限の所定割合に達すると、Resource Monitorsは次のアクションを発動します。アクションは以下の3種類です。

  1. ユーザーにメールで通知する
  2. 実行中のクエリがすべて完了したのちにウェアハウスを停止する
  3. 実行中のクエリを即座に中止し、ウェアハウスを停止する

ウェアハウス単位だけでなく、アカウント全体に対してもResource Monitorsを設定できます。

下のスクリーンショットは、Resource Monitorsから送信されるメール通知の例です。

Snowflake resource monitor email notification

SnowflakeでResource Monitorを作成する方法

Resource MonitorsはSnowflake UIから作成する方法と、SQLを使ってプログラマブルに作成する方法があります。それぞれ順に見ていきましょう。

UIでResource Monitorを作成する

Snowflake UIで新しいResource Monitorを作成するには、Admin > Resource Monitorsを開きます。右上の「+ Resource Monitor」ボタンをクリックすると、次の項目の入力が求められます。

Snowflake create resource monitor

  1. Name: 任意の名前を設定できます。ただしスペースは使用できません。
  2. Credit Quota: モニターに割り当てるクレジット量です。
  3. Monitor Type: 「Account」または「Warehouse」を選択します。「Account」を選ぶとクレジット上限はアカウント全体に適用され、「Warehouse」を選ぶと指定したウェアハウスにのみ適用されます。
  • Warehouse(s): モニタータイプに「Warehouse」を選んだ場合は、関連付けるウェアハウスを1つ以上選択します。
  1. Schedule: Resource Monitorが稼働する開始時刻と、任意で終了時刻を設定できます。クレジットのカウントをリセットする頻度も指定でき、daily、monthly、yearly、neverから選択できます。
  2. Actions: モニターを作成するには、少なくとも1つのアクションを設定する必要があります。

SQLでResource Monitorを作成する

SQLでResource Monitorを作成するコマンドの例は次のとおりです。

1create or replace resource monitor compute_warehouse_monitor with credit_quota=5 frequency=daily start_timestamp=immediately triggers on 75 percent do notify on 100 percent do suspend on 110 percent do suspend_immediate ;

このモニターをCOMPUTEウェアハウスに割り当てるには、次のコマンドを実行します。

alter warehouse compute set resource_monitor = compute_warehouse_monitor

このコマンドの完全な構文はSnowflakeの公式ドキュメントを参照してください。

作成を検討したいResource Monitors

まずは、Snowflakeの契約金額をベースにしたアカウントレベルのResource Monitorを作成しておくのがおすすめです。契約予算が想定より早く尽きてしまう事態を防ぎやすくなります。

たとえば、今後6か月間のSnowflake契約残高が$240,000である場合、月次のアカウントResource Monitorに16,000クレジットのクォータを設定するとよいでしょう(クレジット単価を$2.5/creditと想定)。アカウントのクレジット使用量がこのクォータの100%を超えた時点で、メール通知を受け取るよう設定できます。

もう1つおすすめなのが、クレジット使用量の急増を知らせるResource Monitorの作成です。たとえば、日次の支出が平均の1.5倍を超えた際にアラートを送るよう設定できます。通知が頻繁になりすぎる場合は、しきい値の倍率を適宜調整してください。

No alt text provided

Resource Monitorsを確認する方法

Resource MonitorsはSnowflake UIのAdmin -> Resource Monitorsから確認できます。

No alt text provided

SQLでshow resource monitorsを実行して確認することもできます。

No alt text provided

Resource Monitorsを作成・利用できるのは誰か

Resource Monitorsを作成できるのはアカウント管理者のみです。作成後は、ロールに対してモニターの閲覧・変更権限を付与できます。なお、アクセス権はResource Monitorごとに個別に付与する必要があります。

Snowflakeのどのユーザーでも、Resource Monitorsからのメール通知を受け取れます。これはSQLでResource MonitorにNOTIFY USERSパラメータを設定することで実現できます。詳細はSnowflakeの公式ドキュメントを参照してください。

Snowflake Resource Monitorsの弱点

Resource Monitorsはクレジット使用量の制御や想定外の請求の回避に役立つ出発点ですが、現状ではいくつかの弱点もあります。

まず、Resource Monitorsはアカウントまたはウェアハウスレベルにしか設定できません。自動クラスタリングやマテリアライズドビューといったサーバーレス機能も突発的な課金が発生し得る要素ですが、Resource Monitorsの対象外です。

また、Resource Monitorsの通知手段はメールに限られます。多くのチームでは、他のアラートや日常のコミュニケーションと同じくSlackやTeamsで通知を受け取りたいというのが実情です。

さらに、先ほどのスクリーンショットにあったとおり、メール通知にはクレジット上限を超えた原因に関する情報がほとんど含まれていません。そのため、ユーザーは急増の原因を特定するために、アカウント使用状況データを自分で掘り下げる必要があります。

より充実した体験をお求めであれば、こうした高度な機能をほぼセットアップ不要ですぐに使えるSELECTのご利用をおすすめします。

Resource Monitorからメールが届かないときの対処

Resource Monitorからメールが届かない場合、Snowflake管理者側で通知の受信設定が有効になっていない可能性があります。設定手順についてはこちらのページをご覧ください。

Ian Whitestone・Co-founder & CEO of SELECT

IanはSaaS型のSnowflakeコスト管理・最適化プラットフォームSELECTのCo-founder & CEOです。SELECTを立ち上げる前は、ShopifyおよびCapital Oneでフルスタックのデータサイエンス・エンジニアリングチームを6年間にわたって率いてきました。Shopifyでは、データウェアハウスの最適化とコスト可視性の向上を主導しました。