🦫

BigQueryのクエリ利用量に上限を設定しよう!TerraformによるGoogle Cloudクォータ管理

2024/02/09に公開

はじめに

AWSやGoogle Cloudなどのクラウドサービス上でリソースとコストを効率的に管理するためには、適切なクォータ設定がマストです。

例えば、
やばい!!!!! 間違ってBigQueryで大量のデータにクエリを実行してしまった!!!!!!!
という場合などでも、クォータを適切に設定しておけば、予期しない高額な請求を防ぐことができ、一安心です。

この記事では、Terraformを用いてGoogle Cloudのクォータ管理をする方法を、BigQueryの事例を通して説明します。

Google Cloudのクォータについて

Google Cloud コンソールでは、クォータの概要は、 [IAM と管理] → [割り当てとシステム制限] から確認ができます。

日本語の場合、列表示オプションで「指標」を含めると、Terraformを使用するときに必要なメトリクスの名前を確認できます。

事例紹介: BigQueryの上限設定

TerraformでGoogle Cloudのクォータを管理するには「google_service_usage_consumer_quota_override」リソースを使用します。
https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/service_usage_consumer_quota_override

※こちらは現在ベータ版のため、google-beta providerを通じてのみ利用できます。

BigQueryのQuery usage per day(プロジェクトごとの1日あたりのクエリ使用量)を1TiBに制限する例

resource "google_service_usage_consumer_quota_override" "query_usage_per_day_per_project" {
  provider       = google-beta
  project        = local.project
  service        = "bigquery.googleapis.com"
  metric         = urlencode("bigquery.googleapis.com/quota/query/usage")
  limit          = urlencode("/d/project")
  override_value = "1000000"  # 1 TiB per day
  force          = true
}
  • metric:列表示オプションで追加した「指標」列に表示される指標です。

  • limit:はmetricの制限を示します。Query usage per dayはプロジェクトごとの日ごとの制限なので、"/d/project"となります。

  • force:このフィールドがtrueに設定されている場合、既存のクォータを上書きして強制的に新しい値を設定します。(既存のクォータ設定を変更しようとしても、その変更が元の設定よりも大きいか小さいかに関係なく、変更が適用されます。)

BigQueryのQuery usage per day per user(ユーザーごとの1日あたりのクエリ使用量)を1TiBに制限する例

resource "google_service_usage_consumer_quota_override" "query_usage_per_day_per_user" {
  provider       = google-beta
  project        = var.project  
  service        = "bigquery.googleapis.com"
  metric         = urlencode("bigquery.googleapis.com/quota/query/usage")
  limit          = urlencode("/d/project/user")
  override_value = "500000"  # 0.5 TiB per day
  force          = true
}

設定後

コンソールからも無事に上限が設定されていることが確認できます。

補足1:クォータを超えるとどうなる??

スキャン量が一日の割り当てを超えると見積もられるクエリを実行しようとすると、エラーメッセージが出て、クエリが実行できなくなります。

Custom quota exceeded: Your usage exceeded the custom quota for QueryUsagePerDay, which is set by your administrator. For more information, see https://cloud.google.com/bigquery/cost-controls

補足2:プロジェクトレベル・ユーザーレベルのクォータの関係

ユーザーレベルでの使用量が残っていても、プロジェクトレベルの制限に達した時点で全ユーザーがクエリを実行できなくなります。
下記に詳しく記載があります。

https://cloud.google.com/bigquery/docs/custom-quotas?hl=ja

まとめ

Terraformを使ったGoogle Cloudのクォータ管理の方法を紹介しました。
今回はBigQueryの事例で紹介しましたが、他のサービスや指標でも同様に設定可能です。
この記事がどなたかのお役にたてれば幸いです。
クォータを設定してリソースとコストを効率的に管理していきましょう!!

参考

https://cloud.google.com/service-usage/docs/terraform-integration?hl=ja
https://blog.g-gen.co.jp/entry/restricting-bigquery-ondemand-queries-with-quota

株式会社モニクル

Discussion