BigQuery API の Quota を Terraform で設定する
やりたいこと
BigQuery API の Query usage per day を Terraform から設定したい
どうやるか
基本的には google_service_usage_consumer_quota_override を使って
こんな感じで書けば良い
resource "google_service_usage_consumer_quota_override" "query_usage_per_day" {
provider = google-beta
project = var.project_id
service = "bigquery.googleapis.com"
metric = urlencode("bigquery.googleapis.com/quota/query/usage")
limit = urlencode("/d/project")
override_value = "1048576" # 1 TiB(1MiB * 1024 * 1024) per day
force = true
}
ハマりポイント(謎のエラー)
今回、問題が置きたときに Console UI から一旦直接設定したあとに、Terraform で書いて Apply しようとしたところ以下のようなエラーになった。
Error: Error creating ConsumerQuotaOverride: googleapi: Error 409: Cannot create consumer override. The override specified in the request already exists. Please call UpdateConsumerOverride instead with resource name (以下略)
エラーの原因(推測)
このへん見てたんだけど、要するに、1回設定してしまうと(デフォルトのunlimitedに戻したとしても)、resourceが設定されてしまうので、Override できねーよ、と言われてしまうらしい。
エラーの解決
結局、この記事を見ながら該当リソース(手で設定したやつ)を一回消しました。
zshrc に gcurl の alias を設定する
alias gcurl='curl-H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" '
metric の状況を確認
$ METRIC_RESOURCE_NAME="projects/foo-project/services/bigquery.googleapis.com/consumerQuotaMetrics/bigquery.googleapis.com%2Fquota%2Fquery%2Fusage"
$ gcurl https://serviceusage.googleapis.com/v1beta1/${METRIC_RESOURCE_NAME}
レスポンスの以下のような感じ
{
"name": "projects/123/services/bigquery.googleapis.com/consumerQuotaMetrics/bigquery.googleapis.com%2Fquota%2Fquery%2Fusage",
"displayName": "Query usage",
"consumerQuotaLimits": [
{
"name": "projects/123/services/bigquery.googleapis.com/consumerQuotaMetrics/bigquery.googleapis.com%2Fquota%2Fquery%2Fusage/limits/%2Fd%2Fproject",
"unit": "1/d/{project}",
"metric": "bigquery.googleapis.com/quota/query/usage",
"quotaBuckets": [
{
"effectiveLimit": "157286400",
"defaultLimit": "9223372036854775807",
"consumerOverride": {
"name": "projects/123/services/bigquery.googleapis.com/consumerQuotaMetrics/bigquery.googleapis.com%2Fquota%2Fquery%2Fusage/limits/%2Fd%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl",
"overrideValue": "unlimited"
(以下略)
この部分を使います
"name": "projects/123/services/bigquery.googleapis.com/consumerQuotaMetrics/bigquery.googleapis.com%2Fquota%2Fquery%2Fusage/limits/%2Fd%2Fproject",
OVERRIDE_RESOURCE_NAME に先程の内容を入れて、削除します
OVERRIDE_RESOURCE_NAME="projects/123/services/bigquery.googleapis.com/consumerQuotaMetrics/bigquery.googleapis.com%2Fquota%2Fquery%2Fusage/limits/%2Fd%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl"
gcurl https://serviceusage.googleapis.com/v1beta1/${OVERRIDE_RESOURCE_NAME} -X DELETE
おわりに
余計なリソースを消すと、terraform apply が通るようになりました。
Discussion