Snowflakeでお金を溶かす３ステップ

# はじめに
こちらは、[Snowflake Advent Calendar 2021](https://adventar.org/calendars/6220)の24日目の記事の予定でした。遅れてしまい申し訳ありません。

この記事は、Snowflakeで想定外の請求をされる事態を起こさないために気を付けたい点を、想定外の1カ月約15万円請求されるやらかしをした経験を踏まえて振り返ってみたものになります。

# 背景
以下状況で個人利用のSnowflake環境で検証を行っていましたが、やらかして15万円の請求を受けました。
・2021/09/01のSnowvillage（Snowflakeユーザ会）登壇の準備（※）のため、
　8月にGCS上のCSV→Snowflakeへの連携を定期的に行うことができるか検証を
　行っていた。

　※SnowVillageで登壇した際の資料　[Snowflakeであそぼう](https://speakerdeck.com/asmrt_ds/01kai-cui)

・検証してみたが想定した内容を実現することができず、登壇日も近くなってきた
　ことから、該当処理を停止した。

# お金を溶かす３ステップ（=やらかし）

お金を溶かすのは簡単。以下の３ステップという初歩的なミスを重ねるとSnowflakeにログインしない時でもコンスタントに利用料を上げることができます。

[1]1分に1回実行されるタスク（※）設定の停止したつもり</br>
　　　※Snowflake単一のSQLステートメントやストアドプロシージャの定期実行が
　　　　可能な機能　[タスクの紹介(Snowflake User-Guide)](https://docs.snowflake.com/ja/user-guide/tasks-intro.html)
[2]リソースモニタの設定しない判断
[3] [1]、[2]の状態を約1カ月間放置 

結果、9月分はこんなリソース利用状況および請求となりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7502/b6a34eb9-2f70-cf29-728f-353175687548.png)
![Screenshot_2021-12-30-23-08-22-42_e2d5b3f32b79de1d45acd1fad96fbb0f.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7502/2692f6c3-4adb-0fbf-9106-5402bd910e94.jpeg)
→1332ドルなのでおよそ15万円ですね。

そのときのツイートが以下です。
ちなみに、混乱して1ドル10円と勘違いしているので、正しくは400連くらいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7502/677caebb-3181-c53c-281b-73badabcdf70.png)
https://twitter.com/asmrt_ds/status/1445788492810702854

なお、Azure、 シンガポールリージョン、エンタープライズスタンダード＋の環境を使用していたため、1クレジットあたり3.70ドルでした。[料金体系](https://www.snowflake.com/pricing/?lang=ja)

こんな初歩的なミス、自分ならやらない思うかもしれません。もう少しどんなミスをしたかお伝えできればと思います。

## [1]1分に1回実行されるタスク設定の停止したつもり
まず、以下がタスクを作成したあとに設定されているタスクを表示（SHOW TASKS）したSnowflakeの画面です。結果が1件表示されておりタスクが設定されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7502/df4541f4-41f2-c110-112e-de502595d307.png)
そして、以下がタスク削除できていると誤認したタスクを表示したSnowflakeの画面です。タスクが何も表示されないため、タスクが削除できたと誤認識してしまいました。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7502/58114635-de32-9c0c-7a27-9dbb23144e76.png)
実は、この2枚のタスクを表示した際どちらともタスクは消えていなかったわけですが、なぜ表示が異なっていたか皆さんはお気づきでしょうか？

２つの画像を見比べて頂くとわかるのですが、ロールがACCOUNT ADMINと
SYSTEM ADMINで違っていたのでした。ようは、作成したロールと確認したロールが
違うため、確認しようとした際に該当のタスクが見えていないだけでした。

## [2]リソースモニタの設定しない判断
以下状況のため、作業当日のみリソース利用が発生し、翌日以降のリソースの利用が
発生しないと誤認識しました。
（1)Snowflakeに連携するデータは、GCS上の小さいサイズ（11KB）のCSV
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7502/03f32868-5239-8a86-d22a-6eac43416e34.png)
 (2)検証用で1時間程度検証した後はタスクを停止していた（つもり）
 (3)タスク停止後の使用は、Snowflake上の小さいサイズのテーブルの集計やBIツール
　　での可視化の状態は維持する程度で大幅なリリース利用を想定していなかった。　　

→まとめると、小さいサイズのデータを短期間のみ使う想定のため、使ったタイミングの
 リソース状況の確認でよいと考えていました。
 実際は、[1]タスクの設定が止まっていなかったので、自主的に利用していないタイミング
でも利用されている状況だったわけです。　　

## [3] [1]、[2]の状態を約1カ月間放置
リソースモニター設定して通知するようにもしておらず、お金もかかると思って
いなかったため放置してました。

#お金を溶かさないために何をすればよいのか？

[1]1分に1回実行されるタスク（※）設定の停止したつもりの対策
　(1)本当に停止したか確認しましょう
　(2)少しでも心配な部分がある場合、身近な有識者に確認したり、Snowflakeの
　　 サポートチケットを切って問い合わせてみましょう。

　　 サポートチケットを使っての問合せは、Snowflakeのアカウントを作っている
     ユーザであれば追加費用なく問い合わせることは可能です。

　　　以下、Snowflakeコミュニティページの「Support」のページよりチケットを
     起票することが可能です。https://community.snowflake.com/s/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7502/4942263e-c1be-d27f-aae9-ce740ea869ab.png)

[2]リソースモニタの設定しない判断の対策
[3][1]、[2]の状態を約1カ月間放置 
　(1)とりあえず、リソースモニターを設定しないという選択肢を捨てる。
　　　→「自分は大丈夫」、「ちょっとだから大丈夫」という過信は捨てる。
　(2)リソースモニターを設定し、しきい値でのアラート通知および一時停止を設定する
　　 →クラスメソッド社の以下記事がわかりやすかったので参考にさせて頂き
　　　設定しました。[Snowflakeのリソースモニターでクレジット監視を試してみた](https://dev.classmethod.jp/articles/snowflake-resource-monitors/)

#おわりに
いくらSnowflakeが充実した機能を持っていても有効に使わないとやらかしてしまうことを、この記事を反面教師にして頂き、Snowflakeを有効に使って過ごして頂けると嬉しいです。