サービス割り当ての管理

このページでは、特定のサービスの Google Cloud プロジェクトのすべての割り当て指標と割り当て制限を表示する方法、および割り当てオーバーライドを使用してそのサービスの割り当て使用量に上限を設定する方法について説明します。Service Usage を使用して、公開Google Cloud サービスCloud Endpointsを使用して作成された非公開サービスなど、あらゆるサービスのプロジェクトの割り当てを管理できます。公開 API と非公開 API サービスの相違について詳しくは、一般公開サービスと非公開サービスをご覧ください。

サービス割り当てモデルをよく理解してこのチュートリアルで使用されている用語について理解を深めてください。

ほとんどのオペレーションのユースケースで、割り当てを管理するには、Google Cloud Console を使用するのが最も簡単な方法です。Service Usage API に対するプログラムが必要な場合、用意されているいずれかのクライアント ライブラリを使用することをおすすめします。API を試すには、このガイドの手順に従い、curl コマンドを使用します。これにより、完全なアプリケーション開発環境をセットアップしなくても API を試すことができます。

始める前に

サービスの割り当てを管理するには、以下が必要です。

このチュートリアルでは、所有するプロジェクト番号に設定された環境変数 PROJECT_NUMBER と、目的のサービスとしてサービス serviceusage.googleapis.com を使用します。

ID PROJECT_IDの自分のプロジェクトのプロジェクト番号をすばやく見つけるには、次のコマンドを使用します。

PROJECT_NUMBER=`gcloud projects list --filter="${PROJECT_ID}" --format="value(PROJECT_NUMBER)"`

サービス割り当ての表示

サービスの特定のコンシューマーに適用されるすべての割り当て指標と割り当て制限を表示するには、次のコマンドを使用します。

gcurl https://serviceusage.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics

この呼び出しは、サービスによって定義された指標のリストで応答します。各指標は、このコンシューマーに適用される指標の制限のリスト、それらの制限の値、およびオーバーライドを備えています。以下はレスポンスの例です。

{
  "metrics": [
    {
      "name": "projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fdefault_requests",
      "displayName": "Default requests",
      "consumerQuotaLimits": [
        {
          "name": "projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fdefault_requests/limits/%2Fmin%2Fproject",
          "unit": "1/min/{project}",
          "metric": "serviceusage.googleapis.com/default_requests",
          "quotaBuckets": [
            {
              "effectiveLimit": "240",
              "defaultLimit": "240"
            }
          ]
        }
      ],
      "metric": "serviceusage.googleapis.com/default_requests"
    },
    {
      "name": "projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fmutate_requests",
      "displayName": "Mutate requests",
      "consumerQuotaLimits": [
        {
          "name": "projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fmutate_requests/limits/%2Fmin%2Fproject",
          "unit": "1/min/{project}",
          "metric": "serviceusage.googleapis.com/mutate_requests",
          "quotaBuckets": [
            {
              "effectiveLimit": "120",
              "defaultLimit": "120"
            }
          ]
        }
      ],
      "metric": "serviceusage.googleapis.com/mutate_requests"
    }
  ]
}

レスポンスの各指標には nameフィールドがあります。すべての指標ではなく、その指標のみの割り当て設定を検査するには、URL でその name を使用します。このチュートリアルでは、環境変数 METRIC_RESOURCE_NAME で割り当て指標リソース名を格納します。

METRIC_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fdefault_requests"
gcurl https://serviceusage.googleapis.com/v1beta1/${METRIC_RESOURCE_NAME}

同様に、指標内の各上限には name フィールドがあります。指標のすべての上限ではなく、特定のメトリックの特定の上限のみの割り当て設定を検査するには、URL でその name を使用します。このチュートリアルでは、環境変数 LIMIT_RESOURCE_NAME で割り当て上限リソース名を格納します。

LIMIT_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fdefault_requests/limits/%2Fmin%2Fproject"
gcurl https://serviceusage.googleapis.com/v1beta1/${LIMIT_RESOURCE_NAME}

コンシューマー割り当てオーバーライドの作成

プロジェクトのオーナーは、プロジェクトの特定の割り当て制限にコンシューマーオーバーライドを適用して、その制限に対してコンシューマーが請求できる割り当ての合計量を減らすことができます。

ユーザーによるオーバーライドで、サービスのデフォルトや他者(サービス オーナー、組織の割り当て管理者など)による既存のオーバーライドによって許可されている割り当て以上に割り当てを引き上げることはできません。使用可能な割り当てを増やすには、メインの割り当てページの [割り当てを編集] オプションを使用するか、組織管理者に割り当て量の引き上げを依頼してください。

オーバーライドする上限を特定するには、上記のいずれかの方法を使用して目的の割り当て上限を見つけてから、その名前フィールドを使用して、その制限のオーバーライドのコレクションに新しいユーザーによるオーバーライドを作成します。次の例は、特定の割り当て上限を示しています。

LIMIT_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fdefault_requests/limits/%2Fmin%2Fproject"
gcurl https://serviceusage.googleapis.com/v1beta1/${LIMIT_RESOURCE_NAME}/consumerOverrides -d '{"overrideValue": "220"}'

呼び出しが成功すると、割り当ての変更がバックエンドシステムに伝達されるため、サーバーで進行中の作業を表すオペレーション識別子が返されます。

{
  "name": "operations/quf.92accba3-6530-4fc1-9a95-c1280d48a6b7"
}

オペレーションの進行状況を確認するには、そのnameを使用します。

OPERATION_NAME="operations/quf.92accba3-6530-4fc1-9a95-c1280d48a6b7"
gcurl https://serviceusage.googleapis.com/v1/${OPERATION_NAME}

オペレーションが成功した場合、レスポンス メッセージに done: true が含まれ、新しく作成されたオーバーライド リソースが含まれます。オペレーションが失敗した場合、レスポンス メッセージに done: true は含まれますが、リソースではなくエラーの詳細が含まれます。

特定の制限に関する元の get 呼び出しを繰り返すことにより、変更が適用されたかどうかを確認することもできます。この制限には、追加のconsumerOverrideフィールドが必要になりました。

リージョン割り当てオーバーライドまたはゾーン割り当てオーバーライドの作成

一部の割り当て上限は、リージョンごとまたはゾーンごとに適用されます。これは、上限の unit フィールドに {region} または {zone} があることで示されます。たとえば、ユニット "1/{project}/{region}" の上限はリージョン単位で適用されます。このような上限にオーバーライドを適用すると、各リージョンまたはゾーンの基本割り当てが変更されます。特定のリージョンまたはゾーンに限定して割り当てを変更するには、オーバーライドの作成時に dimensions フィールドを使用して割り当てディメンションを追加します。たとえば、次のように Cloud ML リージョンの割り当て上限に対してリージョン オーバーライドを作成します。

REGIONAL_LIMIT_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/ml.googleapis.com/consumerQuotaMetrics/ml.googleapis.com%2Foptimizer_management_requests"
gcurl https://serviceusage.googleapis.com/v1beta1/${REGIONAL_LIMIT_RESOURCE_NAME}/consumerOverrides -d '{"overrideValue": "550", "dimensions": {"region": "asia-south1"} }'

コンシューマー割り当てオーバーライドの更新

プロジェクトの所有者は、プロジェクトの既存のコンシューマーオーバーライドの値を変更することもできます。

たとえば、前の create 呼び出しで次のような name フィールドを持つオーバーライドが返されたとします。

name: "projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fdefault_requests/limits/%2Fmin%2Fproject/consumerOverrides/b14c5591ff01"

次に、その名前を使用して、次のように更新するオーバーライドを特定します。

OVERRIDE_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fdefault_requests/limits/%2Fmin%2Fproject/consumerOverrides/b14c5591ff01"
gcurl https://serviceusage.googleapis.com/v1beta1/${OVERRIDE_RESOURCE_NAME} -X PATCH -d '{"overrideValue": "230"}'

呼び出しが成功すると、割り当ての変更がバックエンドシステムに伝達されるため、サーバーで進行中の作業を表すオペレーション識別子が返されます。

{
  "name": "operations/quf.92accba3-6530-4fc1-9a95-c1280d48a6b7"
}

オペレーションの進行状況を確認するには、そのnameを使用します。

OPERATION_NAME="operations/quf.92accba3-6530-4fc1-9a95-c1280d48a6b7"
gcurl https://serviceusage.googleapis.com/v1/${OPERATION_NAME}

オペレーションが成功した場合、レスポンス メッセージには done: true が含まれ、更新されたオーバーライド リソースが含まれます。オペレーションが失敗した場合、レスポンス メッセージに done: true は含まれますが、更新されたリソースではなくエラーの詳細が含まれます。

コンシューマー割り当てオーバーライドの削除

プロジェクトの所有者は、プロジェクトからコンシューマーオーバーライドを削除することもできます。

たとえば、前の create 呼び出しで次のような name フィールドを持つオーバーライドが返されたとします。

name: "projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fdefault_requests/limits/%2Fmin%2Fproject/consumerOverrides/b14c5591ff01"

オーバーライドを削除するには、次のシーケンスを発行します。

OVERRIDE_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fdefault_requests/limits/%2Fmin%2Fproject/consumerOverrides/b14c5591ff01"
gcurl https://serviceusage.googleapis.com/v1beta1/${OVERRIDE_RESOURCE_NAME} -X DELETE

大規模な割り当て変更の強制

割り当てのオーバーライド変更によって強制割り当て量が 10%以上減少した場合、誤って割り当て量が急激に減少するのを防ぐために、安全策として、呼び出しが拒否されます。この制限を無視するには、force フラグを使用します。たとえば、強制フラグを使用する create 呼び出しは次のとおりです。

LIMIT_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/serviceusage.googleapis.com/consumerQuotaMetrics/serviceusage.googleapis.com%2Fdefault_requests/limits/%2Fmin%2Fproject"
gcurl https://serviceusage.googleapis.com/v1beta1/${LIMIT_RESOURCE_NAME}/consumerOverrides?force=true -d '{"overrideValue": "40"}'