SELECTSELECT

SELECT

Snowflakeコスト管理:100社超の事例から得た知見

By Ian WhitestoneMay 13, 202410 min read

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

適切に運用すれば、Snowflakeは市場でも屈指のコスト効率を誇るデータクラウドプラットフォームになります。一方で、その使いやすさと組織内での急速な普及ゆえに、Snowflakeのコストを自信を持ってコントロールできずに悩んでいるお客様も少なくありません。

SELECTはこれまで100社を超える企業と協働し、Snowflakeのコスト管理と最適化戦略の導入を支援してきました。そこから見えてきた具体的な施策は6つの領域に整理でき、これらこそがSnowflakeコスト管理戦略の土台になると考えています。本記事では、その6つの領域を掘り下げながら、現場で得られた実践的な学びを紹介します。

Snowflake cost management framework

1\. 可視化

コストに手を打つ前に、まずはコストを可視化するためのツールを整える必要があります。Snowflakeの消費を何が押し上げているのか、それが時間とともにどう動いているのかが分からなければ、どこに注力すべきかも判断できません。

Snowflakeのコスト管理を担う立場であれば、次の問いにすぐ答えられる状態にしておきたいところです。

  1. 月あたりのSnowflake支出は平均でいくらか?
  2. 購入済み契約金額のうち、どの程度を使い切る見込みか?
  3. 仮想ウェアハウス、サーバーレスタスク、データベースなどに、年間いくら(クレジットではなくドル建てで)かかっているか?
  4. 環境内で実行されているクエリワークロードごとのコストはいくらか?
  5. ユーザーやチームごとに、アカウント内でどれだけの消費が発生しているか?
  6. これらの指標は直近X日間でどう変化したか?

Snowsightでのコスト管理

Snowflakeの管理画面にあるCost Managementセクションは、最初の一歩として最適です。ここから次のような情報を確認できます。

  • 組織レベルのコスト:
    • 契約総額
    • 残高
    • 総支出
  • アカウントレベルのクレジット(ドルではない)消費:
    • サービスタイプ別
    • リソース別(仮想ウェアハウスなど)

ここで注意したいのは、Snowflakeの消費タブに表示されるクレジット消費量は、Cloud Servicesクレジットを含むため最大で約10%過大に表示されることがある点です。Cloud Servicesの消費が課金対象になるのは、その日のコンピュートコストの10%を超えた場合のみ。多くのお客様はCloud Servicesコストを請求されないため、上記スクリーンショットの数値はほぼ常に水増しされた状態になります。詳しくはこちらをご覧ください。

さらに深掘りする必要がある

Snowflakeを使い込むほど、管理画面のCost Management UIだけでは物足りなくなり、独自の監視ダッシュボードを構築するために多大な社内リソースを投じるか、SELECTのような信頼できるサードパーティのプラットフォームを採用するか、いずれかに行き着くお客様がほとんどです。

理由はシンプルで、「もう一段深く掘り下げたい」という欲求に集約されます。Cost Management UIは支出の内訳や最大の消費要因を示すという点では十分役立ちます。先ほどのスクリーンショットでも、最上位のウェアハウスがコストの大半を占めていることが分かります。しかし、その「なぜ」までは見えません。そのウェアハウスの中で、実際に何がコストを発生させているのでしょうか?

仮想ウェアハウス内のコストをより細かく見える化するには、クエリごとのコストを算出し、クエリのメタデータを使ってワークロード単位のコストに集計することをおすすめします。メタデータには、クエリに付与するカスタムクエリタグやコメントのほか、dbtやLookerなどのツールから付加される情報も活用できます。これが整えば、各仮想ウェアハウスにおける実際のコンピュート要因が一目で分かります。

SELECT Snowflake query workloads

仮想ウェアハウス以外にも、SnowpipeAutomatic Clustering、Search Optimization、Query Accelerationなど、無視できないレベルの消費を生むSnowflakeサービスがあります。コストを効果的に管理するには、Snowflakeリソースごとに消費の推移を細かく可視化することが欠かせません。そして何より、その情報にワンクリックでアクセスできることが重要です。

以下は、ある1つのテーブルのAutomatic Clusteringコストを示すダッシュボードの例です。

もう一つの例として、単一のSnowpipeのコストとコスト削減に向けた推奨事項を示したダッシュボードを紹介します。

Snowflake Snowpipe costs and insights

2\. アトリビューション

コスト要因が見えてきたら、次はそのコストを部門や用途ごとに柔軟に割り振れる仕組みを整えましょう。

コストアトリビューションでよく使われる手法には、次のようなものがあります。

  • Snowflakeのオブジェクトタグを使って、仮想ウェアハウスやその他のSnowflakeリソースをチーム、部署、プロジェクトに紐づける
  • クエリタグでメタデータを付加し、クエリが属するチーム、プロジェクト、ユースケースを識別できるようにする
  • レポートツール側で、リソースを各グループに手動で割り当てる

自社で構築する場合でも市販ツールを使う場合でも、コストレポートのツールは、グループ別にコストを柔軟に割り当てられ、その推移を簡単に可視化・追跡できるものを選ぶべきです。次の図は、私たちのSnowflakeアカウントの支出をUsage Groups別に分解した例です。

部門別やプロジェクト別にコストを分析すると、リソース単位で見ているだけでは気づかない改善機会や支出要因が浮かび上がってくるものです。

3\. コントロール

可視化とアトリビューションで「いくら使っているか」は分かりますが、不要な支出をそもそも発生させないためのコントロールも併せて導入したいところです。コスト管理戦略の一環として、Snowflakeユーザーに検討いただきたいコントロールは次の4つです。

アクセス制御

Snowflakeには強力なアクセス制御機能があり、「誰がSnowflake内で何をできるか」をきめ細かく制御できます。コスト管理の手段としては見落とされがちですが、アクセス制御は非常に有効です。たとえば、大規模で高コストな仮想ウェアハウスでクエリを実行できるユーザーを絞るだけでも、大きな効果があります。同様に、ウェアハウスの作成・変更権限を制限しておけば、ユーザーが誤って巨大なウェアハウスを立ち上げ、不要な消費を生んでしまう事態も防げます。

クエリタイムアウト

クエリタイムアウトは、あらかじめ定めた時間を超えたクエリを停止させる、Snowflakeのセーフガード機能です。長時間にわたるクエリ実行による過剰な費用を未然に防ぐ役割を果たします。設定したしきい値を超えると、Snowflakeは自動的にクエリを終了します。

Snowflake query timeout

クエリタイムアウトを上手に使えば、暴走クエリの影響を抑え込めます。デフォルトでは、Snowflakeはクエリを最長2日間実行してからキャンセルする設定になっており、その間に多額の費用が発生する可能性があります。1本のクエリで発生し得るコストの上限を抑えるためにも、すべてのウェアハウスにクエリタイムアウトを設定することをおすすめします。

リソースモニター

クエリタイムアウトと同じく、リソースモニターはウェアハウスが発生させ得る総コストを抑える仕組みです。用途は大きく2つあります。

  1. コストが一定のしきい値に達した時点でメールで通知する
  2. 指定期間内にウェアハウスが特定金額を超えないよう制限する。割り当てを超えた場合、Snowflakeはそのウェアハウスでのクエリ実行を停止できます。

Snowflake create resource monitor

多くのお客様は、ウェアハウスを強制停止する機能(上記2点目)までは導入しません。業務全体や社内ユーザーの日常作業に大きな支障をきたす可能性があるためです。他のツールでアラート機能を利用できない場合は、ウェアハウスの過剰支出を通知する用途(上記1点目)としてリソースモニターを使うのが定石です。

予算

コストを抑える最も有効な方法の一つは、Snowflakeユーザーのグループごとに予算を設定し、それを徹底することです。ユーザー、チーム、部署にとって「いくらまで使ってよいか」が共有されていなければ、消費を抑える動機も、慎重に使おうという意識も生まれません。

予算は、各チームがこれまでにいくら使い、あとどれだけ使えるのかを明確にすることで、コスト意識を組織文化として根づかせる助けになります。

4\. アラート

コントロールを整えていても、請求額が突発的に跳ね上がることや、支出が緩やかに増加していくケースは避けられません。こうした問題に先手を打つために、2種類のアラートを併用することをおすすめします。異常検知アラートと、定期的なスペンドダイジェストです。

異常検知アラート

異常検知アラートは、支出があらかじめ定めたしきい値を超えて急増した際に通知が届くよう設定します。アカウントレベル、特定のウェアハウス、あるいはSnowflakeリソースやユーザーのグループ(Usage Groupsなど)単位で設定できます。

名前のとおり、これらのアラートの目的は「普段と違う動き」を知らせることです。高コストな新しいジョブがリリースされたのか? 大きなテーブルでAutomatic Clusteringが有効になったのか? それとも誰かがウェアハウスサイズを変更したのか?

変化に早く気づけるほど、対応も早く打てます。下のスクリーンショットはSnowflakeの支出異常アラートの例です。可能であれば、急増の原因を特定するのに必要な文脈情報をアラート本文に含めるようにしましょう。

定期スペンドダイジェスト

支出パターンの変化は、緩やかに進行して見落とされるケースが多いものです。これを防ぐために、定期スペンドダイジェストの設定をおすすめします。決まったタイミング(週次や月次など)でSnowflakeの利用状況のスナップショットを配信する仕組みです。

メールやSlackなど、普段使い慣れたチャネルにダイジェストを届けることで、支出状況を継続的に把握するハードルが下がります。ユーザーは、放っておけば見過ごされていたであろうトレンドや高コストなワークロードに気づきやすくなります。予算を設定していれば、対象のリソース群が今後どれだけ消費しそうかという予測値も合わせて配信できます。

5\. インサイト

主な消費要因を把握することは大切ですが、現場のユーザーが本当に知りたいのは「自分はSnowflakeを上手く使えているか」「使い方を改善したりコストを下げたりするには何をすればよいか」です。

Snowflakeのコスト管理を担う立場であれば、組織内のSnowflakeユーザーに対して最適化のチャンスを自動的に提示する、そんなツールや仕組みに投資する価値があります。提示するインサイトでは、たとえば次のような典型的なクエリ最適化コスト削減策に焦点を当てるとよいでしょう。

  1. マイクロパーティションのプルーニングが効かず、過剰なデータをスキャンしているワークロードを特定する
  2. サイズが大きすぎるウェアハウス、あるいは合わないウェアハウスサイズで動いているワークロードを洗い出す
  3. クエリされておらず、不要なストレージコストの原因になっている未使用テーブルを見つける
  4. 繰り返し失敗しているワークロードを特定する
  5. 結合キーの設定ミスで結合が爆発しているクエリを洗い出す

Snowflake optimization insights

6\. 自動化

多くの最適化は手作業での実装が必要なため、ユーザーにインサイトを届けることはSnowflakeコスト管理戦略に欠かせない要素です。とはいえ、現場の社員は他の業務に追われていることが多く、必要な変更にすぐ取りかかれるとは限りません。

そこで可能な範囲で、Snowflakeの最適化を継続的に自動適用していくのが望ましい姿です。たとえば次のようなものが挙げられます。

  1. 仮想ウェアハウスの構成を自動的に調整し、利用効率を高める
  2. データ削除ポリシーの自動化(例:Xか月経過したテーブルや非本番のデータベース/スキーマを自動削除する)
  3. Snowflake上で消費を生んでいる未使用のダッシュボードやデータ資産を廃止する

こうした自動化の構築と運用には相応のエンジニアリングリソースが必要ですが、得られるコスト削減効果は大きいことが多いものです。下のスクリーンショットは、仮想ウェアハウスを自動かつ継続的に調整して利用効率を最適化する、SELECTのAutomated Savings機能の一例です。

Snowflake automated savings

得られた学び

本記事では、効果的なSnowflakeコスト管理戦略を構成する6つの主要要素を取り上げました。100社を超える企業の導入を支援できたことは、私たちにとって大きな財産です。これまでに紹介した戦略以外にも、現場で得られた学びをいくつか共有しておきます。

コスト管理戦略は段階的に広げていく

効果的なコスト管理戦略に必要なツール群をそろえるには、相応の時間がかかります。内製で進めるのであれば、まずは粒度の細かいコスト可視化と利用レポートの整備から着手することをおすすめします。利用要因をしっかり理解できていなければ、戦略的なコスト判断は下せません。

基本的な可視化が整えば、次はコストアトリビューションの設計や、利用状況を捉えるためのコントロール・アラートの実装フェーズへと進めていけます。

取り組みやすい最適化から手をつける

自動化に取りかかる前に、まずは取り組みやすい改善ポイントから着手することが重要です。アカウント内で実施できるさまざまなコスト最適化戦略については、これまで多くの記事で詳しく解説してきました。未使用のデータ資産の廃止、実行頻度の見直し、ウェアハウスのダウンサイジングといった対応だけでも、すぐに10〜20%のコスト削減につながるケースは珍しくありません。

コスト管理の分散化こそが、唯一スケールする解

多くの大企業と取り組んできた中で、中央集権的なデータプラットフォームチームが、広範なSnowflakeユーザー全体に対してコストを取り締まりベストプラクティスを徹底させることが、いかに難しいかを目の当たりにしてきました。

むしろ目指すべきは、コスト意識と責任を共有する文化を組織に根づかせることです。組織内のユーザーに、Snowflakeを効果的に使うためのツール、プロセス、知識を行き渡らせる必要があります。ユーザーが (a) 自分の行動がSnowflakeの利用にどう影響するかを理解し、(b) 最適化の方法に手間なくアクセスできるようになれば、自ら行動を起こす可能性は格段に高まります。

参考リソース

本記事がお役に立てば幸いです。Snowflakeのコスト管理やクエリ最適化についてさらに学びたい方は、以下のリソースもあわせてご覧ください。

Ian Whitestone·Co-founder & CEO of SELECT

Ianは、SaaS型のSnowflakeコスト管理・最適化プラットフォームSELECTの共同創業者兼CEOです。SELECTの創業前は、ShopifyとCapital Oneで6年間にわたりフルスタックのデータサイエンス・エンジニアリングチームを率いてきました。Shopifyでは、データウェアハウスの最適化とコスト可視性の向上に向けた取り組みを主導しました。