カスタムコスト管理を設定してBigQueryを安心して使おう

#はじめに
こんにちは！
世界中のあらゆる「LIFE」を、安心と喜びで「FULL」にする
LIFULLのエンジニアの高澤です。

数あるクラウドサービスの中でも私が最も推しているサービスが、GCPのBigQuery。LIFULL社内でもログ分析や集計目的など広く使われています。
はやい、安い、うまい、のこのサービスですが、
従量課金であること、課金の仕組みがややわかりにくいことで、敬遠している方もいるでしょう。
恐る恐る触っている人も結構いるのではないでしょうか。

そんな方にも「安心」してBigQueryを使ってもらうために、
カスタムコスト管理による従量課金制限の仕方を紹介します。

#BigQueryの課金について
BigQueryの課金のほとんどはクエリ実行による従量課金です。
課金については別の記事で説明書いているのでそちらをみていただくと
ざっくりとした全体感がわかると思います。
気になる人はぜひ読んでみてください。

Qiita: BigQueryの課金についてざっくり5分で理解する
https://qiita.com/laha/items/60c5a6fdd0696027a5a9

#カスタムコスト管理って？
GCPのAPIには利用量やリクエスト数の割り当てを制限することができる機能があります。
BigQueryもこの割り当てを制限することで課金上限を超えるクエリの実行を制限することができます。
https://cloud.google.com/bigquery/docs/custom-quotas?hl=ja

##主な設定の種類
####プロジェクトレベルでの制限
設定できる制限は全ユーザーの利用量の合計

- プロジェクト単位で利用できる1日あたりの合計クエリ量で制限
- プロジェクト単位で利用できる1日あたりの合計リクエスト数で制限


####ユーザーレベルでの制限
設定できる制限はユーザー単位での利用量の合計

- プロジェクト内でユーザー単位で利用できる1日あたりの合計クエリ量
- プロジェクト内でユーザー単位で利用できる1日あたりの合計リクエスト数


#カスタムコストの設定方法
ここでは利用用途が一番多い、クエリ量の割り当てについて設定方法を紹介していきます。

###1. GCPコンソールのダッシュボードを開く
ダッシュボードにアクセスします
https://console.cloud.google.com/home/dashboard
この時、設定したいプロジェクトを選択しておく

###2. 左上のナビゲーションメニューから > 管理 > 割り当てを選択する
管理が見つからない場合は「IAMと管理」 > 「割り当て」を選択する

![スクリーンショット 2020-12-03 21.30.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/4f5c5c4d-b8f0-b165-a2f4-6c67b5bd32f9.png)

###3. APIの一覧からBigQueryAPIを選択する

サービスでフィルタすると見つけやすいです
![スクリーンショット 2020-12-03 21.33.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/babcf6f1-b7fb-a862-040c-5617bb647ae5.png)

bigqueryをキーワードに指定し、BigQuery APIを選択
![スクリーンショット 2020-12-03 21.33.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/19334cc5-6fb0-c379-bbb2-752c6c2a927a.png)

###3. 上限名　「Query usage /日」「Query usage /日 /ユーザー」をそれぞれ選択し、グローバルにチェックを入れる
![スクリーンショット 2020-12-03 21.34.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/70528348-8498-e961-8b10-9b688c5ee549.png)

![スクリーンショット 2020-12-03 21.34.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/c897178b-6938-44ec-e71c-e1971a5c724c.png)

![スクリーンショット 2020-12-03 21.34.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/2faea52b-be58-89fc-4dc0-c08f59647e48.png)


###4. 「割り当てを編集」をクリック
ページ上部の割り当てを編集をクリックする
![スクリーンショット 2020-12-03 21.35.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/66bc7265-429d-b057-febc-5304be4b3545.png)

###5. リクエスト先を確認し、自分の連絡先を入力
リクエスト先にBigQuery管理者の氏名とメールアドレスが表示される。
一番したの欄に自分の連絡先を入力し、次へ

###6. それぞれのQuery制限に割り当て上限を設定する
Query usage/日 はプロジェクト全体での上限
Query usage /日 /ユーザー はユーザー毎の上限

![スクリーンショット 2020-12-03 21.36.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/864e279b-f0b4-8efe-b351-254362a67f57.png)
単位はTiB。<font color="red">小数点で入力することでGiB単位の制限も可能</font>

###7. 割り当て変更後を確認
この時、削減量が大きいと警告が出るのでよく確認して次に進む
![スクリーンショット 2020-12-03 21.37.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/5908070a-86d6-ce79-517a-fd0495995037.png)

###8. 割り当て完了
お疲れ様でした。設定値が最後に表示されるので確認して設定完了です。
![スクリーンショット 2020-12-03 21.37.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/1caf4878-f636-80c8-e8bb-b1629ca8b375.png)

#制限後の動作を確認してみる

####制限を超えるクエリ処理量を処理しようとすると
![スクリーンショット 2020-12-03 20.48.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/2eeed4fc-ed74-0096-c9a4-62835b76cd5b.png)

####カスタム割り当てを超えて実行できないエラーメッセージが表示される
![スクリーンショット 2020-12-03 20.49.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252838/41f7ee8d-7a1a-7a9d-1634-a375910d91a2.png)


#制限のリセットについて
日単位での制限を設定しましたが、リセットされるのは太平洋標準時の０時だそうです。
日本時間に換算すると 17時くらいですね。
上の例で言うと10GiBいっぱいまで利用して制限かかっても17時でリセットされ、また10GiB分使えるようになります。

#最後に
いかがでしたでしょうか。
制限をつけることで意図せず高額な請求を防げるので、だいぶ気軽に安心してBigQueryを利用できるようになったかと思います。
ぜひカスタムコスト管理を設定の上、BigQueryをどんどん利用していってください。

そういえば LIFULL AdventCalendarその1の方でもBigQuery利用した記事のようです。
よかったらそちらもどうぞ

LIFULL AdventCalendarその1
https://qiita.com/advent-calendar/2020/lifull

LIFULL AdventCalendarその2
https://qiita.com/advent-calendar/2020/lifull2