Snowflake 

Snowflakeでのクレジット監視Tips

はじめに

Snowflakeを使う上で、どうしても気になってしまうのがクレジットですよね。気になって毎日のようにBilling&Usageを見てしまったり、逆にInvoiceを受け取って初めて使いすぎに気づいたりしていませんか?
そんなあなたのために、今回の記事では当社でのSnowflake構築・運用を通じて得られたクレジット監視のTipsをご紹介します。

Snowflakeのクレジットについて

クレジットとは、使用したSnowflakeのリソース量に関する単位です。Snowflakeの料金を構成する3項目のうち、ウェアハウスとクラウドサービスの料金算出に使われます。

項目 料金
ウェアハウス サイズ × 稼働時間(※)× マルチクラスター数 × クレジット単価
(※最小60秒。以降は秒単位数で加算)
クラウドサービス 使用量 × クレジット単価
(ウェアハウス使用量(日次)の10%を超えた場合のみ計上)
ストレージ データ量(月平均) × データ量あたりの単価

クレジット単価についてはData Cloud Pricingをご参照ください。
消費したクレジットの量は「請求と使用状況(Billing & Usage)」で確認することができます。

左側にウェアハウスごとの累積クレジット消費量と全体に占める割合を表示し、右側には日別の消費量を表示します。なお、2021年6月にリリースされた新UIでは、次のように可視化機能のアップデートがなされており、さらに見やすく便利になっています。

・各ウェアハウスが消費したクレジット量が積み上げ棒グラフで一目瞭然
・1か月間以外の期間で表示可能(直近7日間、直近28日間、など)
・日ごと以外の粒度で表示可能(月ごと、1時間ごと、など)

画像は直近7日間、1時間ごとのクレジット消費量を表示したものです。このアカウントでは日次でデータ取り込みタスクを実行しているため、毎日一定の時間帯に特定のウェアハウス(赤色)が起動しています。水色のウェアハウスは開発用のウェアハウスで、この時間帯は開発チームが作業を行っていました。

Snowflakeのリソースモニターを使ってみよう

リソースモニターとは、ウェアハウスのクレジット消費量を監視し、一定値に達したとき通知したりウェアハウスを停止する、などのアクションを実行する機能です。

例えば、

・予算を使い切りそうになったら、何度か通知がほしい
・予算上限が近くなったら、ウェアハウスを実行後すぐに停止してほしい
・予算上限に達してしまったら、ウェアハウスを緊急停止してほしい

のように、段階的に通知やウェアハウスのサスペンドを設定できます。便利ですね!

Snowflakeのリソースモニターの設定方法

とても便利なリソースモニター、設定はとても簡単です。ACCOUNTADMIN ロールを使用可能なユーザーになって、早速作ってみましょう!

SnowflakeのリソースモニターのWebインターフェイス

「アカウント」メニュー→「リソースモニター」で作成します。

「リソースモニターを作成」押下で、設定ダイアログが開きます。

次のようなリソースモニターを設定してみましょう。

アカウント全体でのクレジット消費量が
・80に達したら、通知
・100に達したら、ウェアハウスを停止+通知
・120に達したら、ウェアハウスを強制停止+通知

このような設定になります。


クエリ

`CREATE RESOURCE MONITOR` で作成することができます。例えば、先ほどWebインターフェイスで作成したリソースモニターは、次のクエリで作成できます。簡単ですね!

CREATE OR REPLACE RESOURCE MONITOR ■■■■■■■■■■ WITH
  CREDIT_QUOTA = 100 
  TRIGGERS 
    ON 100 PERCENT DO SUSPEND 
    ON 120 PERCENT DO SUSPEND_IMMEDIATE 
    ON 80 PERCENT DO NOTIFY;

閾値とアクションについて

先ほどの例では閾値を超えたらウェアハウスを停止していましたが、運用中のシステムではETLの定期実行やBIツールとの連携など、緊急停止がかかるとデータの欠損等の障害に繋がってしまう…といった状況があると思います。その場合、ウェアハウス停止アクションは設定せずに、アラート通知のみにとどめることもできます。

例として、日次でETL処理を実行しているアカウントのリソースモニター設定をご紹介します。ウェアハウス停止はせず、通知のみ行うようにしています。

また、リソースモニターは、アカウント全体だけでなくウェアハウスに対して設定することもできます。「ETL用のウェアハウスはアラート通知のみ」「アドホック分析用ウェアハウスは使いすぎたら停止する」といった設定も可能です。

ウェアハウスのクレジット自動集計+Slack通知

日々、どのくらいクレジットを消費しているかは、「請求と使用状況(Billing & Usage)」で確認できる、ということを「クレジットについて」にてご紹介しました。したがって、クレジットが気になったら都度都度Web UIを開いてチェックすればよいのですが、業務が忙しかったりするとついつい忘れてしまいがち…。

そんなときは自動化しちゃいましょう!今回は、ウェアハウスのクレジット集計を自動化してみます。

構成

・SNOWFLAKE
 アカウント使用状況を格納した読取専用の共有データベース
 ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY にウェアハウスのクレジット消費履歴が保存されている

・タスク

 毎月1日にクレジット集計クエリを実行するよう、cronでスケジュールを設定

・S3

 集計結果をアンロード

・Lambda

 S3にファイルが置かれたら実行
 S3に出力された集計結果ファイルを読み込み、レポートをSlackにポスト

・Slack

 通知先

クレジットの集計方法

WAREHOUSE_METERING_HISTORY ビューから先月に消費したクレジットを抽出します。

select
    to_char(cast("QUERY_MONTH" AS DATE), 'YYYY/MM')
        as "MONTH",
    "WAREHOUSE_NAME",
    round(sum("CREDITS_USED"), 2) as "CREDITS"
from
    (
        select 
            date_trunc('MONTH', convert_timezone('Asia/Tokyo', "START_TIME"))
                as "QUERY_MONTH",
            "WAREHOUSE_NAME",
            "CREDITS_USED"
        from 
            SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY
        order by 
            "START_TIME" desc
    )
where
    to_date("QUERY_MONTH") = add_months(date_trunc('MONTH', to_date(convert_timezone('Asia/Tokyo', current_timestamp()))), -1)
group by
    "QUERY_MONTH","WAREHOUSE_NAME"
order by
    "CREDITS" desc
;

集計した MONTH(yyyy/mm)、WAREHOUSE_NAME(ウェアハウス名)、CREDITS(クレジット使用量)をcsvファイルとしてs3に書き出し、ファイルが置かれたイベントをトリガーにLambdaを実行します。

Slackへの通知

Lambdaでcsvファイルに出力したクレジット集計を読み取り、レポートをポストします。Webインターフェイスの「請求と使用状況(Billing & Usage)」で確認できるクレジット消費量をそのままレポートしてくれますので、Webにアクセスせずともクレジット消費量がわかります。

まとめ

Snowflakeのクレジット監視についてのTipsをご紹介しました。
リソースモニターでのクレジットアラートや、クレジット消費量の自動通知など、目的にあわせた様々な方法でクレジット監視を行う事ができます。
クレジット監視をどのように実現しようかお考えの際、この記事がお役に立ちましたら幸いです。


 



DATUM STUDIOは、クライアントの事業成長と経営課題解決を最適な形でサポートする、データ・ビジネスパートナーです。
データ分析の分野でお客様に最適なソリューションをご提供します。まずはご相談ください。

このページをシェアする: