サービス割り当ての管理

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

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

始める前に

このページの例を使用するには、スタートガイドに記載されているすべての手順を完了します。この手順には、標準 curl コマンドの認証済みエイリアスである gcurl と環境変数 PROJECT_NUMBER の定義が含まれています。

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

サービス割り当ての表示

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

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

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


{
  "metrics": [
    ...
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fcpus",
      "displayName": "CPUs",
      "consumerQuotaLimits": [
        {
          "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fcpus/limits/%2Fproject%2Fzone",
          "unit": "1/{project}/{zone}",
          "isPrecise": true,
          "metric": "compute.googleapis.com/cpus",
          "quotaBuckets": [
            {
              "effectiveLimit": "-1",
              "defaultLimit": "-1"
            }
          ]
        },
        {
          "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fcpus/limits/%2Fproject%2Fregion",
          "unit": "1/{project}/{region}",
          "isPrecise": true,
          "metric": "compute.googleapis.com/cpus",
          "quotaBuckets": [
            {
              "effectiveLimit": "24",
              "defaultLimit": "24"
            },
            {
              "effectiveLimit": "72",
              "defaultLimit": "72",
              "dimensions": {
                "region": "asia-northeast1"
              }
            },

            ...

            {
              "effectiveLimit": "72",
              "defaultLimit": "72",
              "dimensions": {
                "region": "australia-southeast1"
              }
            }
          ]
        }
      ],
      "metric": "compute.googleapis.com/cpus",
      "unit": "1"
    },
    ...
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways",
      "displayName": "External VPN gateways",
      "consumerQuotaLimits": [
        {
          "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject",
          "unit": "1/{project}",
          "isPrecise": true,
          "metric": "compute.googleapis.com/external_vpn_gateways",
          "quotaBuckets": [
            {
              "effectiveLimit": "15",
              "defaultLimit": "15"
            }
          ]
        }
      ],
      "metric": "compute.googleapis.com/external_vpn_gateways",
      "unit": "1"
    },
    ...

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

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

特定の指標リソース名が指定されているので、呼び出しはその指標の情報のみを返します。

{
  "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways",
  "displayName": "External VPN gateways",
  "consumerQuotaLimits": [
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject",
      "unit": "1/{project}",
      "isPrecise": true,
      "metric": "compute.googleapis.com/external_vpn_gateways",
      "quotaBuckets": [
        {
          "effectiveLimit": "15",
          "defaultLimit": "15"
        }
      ]
    }
  ],
  "metric": "compute.googleapis.com/external_vpn_gateways",
  "unit": "1"
}

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

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

特定の制限が指定された場合、呼び出しはその制限に関する情報のみを返します。

{
  "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject",
  "unit": "1/{project}",
  "isPrecise": true,
  "metric": "compute.googleapis.com/external_vpn_gateways",
  "quotaBuckets": [
    {
      "effectiveLimit": "15",
      "defaultLimit": "15"
    }
  ]
}

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

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

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

オーバーライドする制限を特定するには、まず上記の方法のいずれかを使用して、関心のある割り当て制限を見つけます。次に、割り当て制限の名前フィールドを使用して、新しい制限のオーバーライドを作成します。次の例は、Compute Engine サービスの「外部 VPN ゲートウェイ」割り当て指標のプロジェクトごとの制限です。

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

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

{
  "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 は含まれますが、リソースではなくエラーの詳細が含まれます。

オーバーライドが作成されたことを確認するには、すべてのユーザー オーバーライドを一覧表示します。

gcurl "https://serviceusage.googleapis.com/v1beta1/${LIMIT_RESOURCE_NAME}/consumerOverrides"

新しく作成したオーバーライドがリストに表示されます。

{
  "overrides": [
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl",
      "overrideValue": "14"
    }
  ]
}

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

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

REGIONAL_LIMIT_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fcpus/limits/%2Fproject%2Fregion"
gcurl "https://serviceusage.googleapis.com/v1beta1/${REGIONAL_LIMIT_RESOURCE_NAME}/consumerOverrides" -d '{"overrideValue": "65", "dimensions": {"region": "southamerica-east1"} }'

リージョン オーバーライドが作成されたことを確認するには、制限に対するユーザー オーバーライドをすべてリストします。

gcurl "https://serviceusage.googleapis.com/v1beta1/${REGIONAL_LIMIT_RESOURCE_NAME}/consumerOverrides"

新しく作成したリージョン オーバーライドがリストに表示されます。

{
  "overrides": [
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fcpus/limits/%2Fproject%2Fregion/consumerOverrides/Cg1RdW90YU92ZXJyaWRlGhwKBnJlZ2lvbhISc291dGhhbWVyaWNhLWVhc3Qx",
      "overrideValue": "65",
      "dimensions": {
        "region": "southamerica-east1"
      }
    }
  ]
}

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

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

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

name: "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl"

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

OVERRIDE_RESOURCE_NAME="projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl"
gcurl "https://serviceusage.googleapis.com/v1beta1/${OVERRIDE_RESOURCE_NAME}" -X PATCH -d '{"overrideValue": "13"}'

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

{
  "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 は含まれますが、更新されたリソースではなくエラーの詳細が含まれます。

オーバーライドが更新されたことを確認するには、次のように制限に対するすべてのユーザーのオーバーライドを一覧表示します。

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

これで、オーバーライドが変更後の値一覧に表示されるようになります。

{
  "overrides": [
    {
      "name": "projects/${PROJECT_NUMBER}/services/compute.googleapis.com/consumerQuotaMetrics/compute.googleapis.com%2Fexternal_vpn_gateways/limits/%2Fproject/consumerOverrides/Cg1RdW90YU92ZXJyaWRl",
      "overrideValue": "13"
    }
  ]
}

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

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

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

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

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

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

オーバーライドが削除されたことを確認するには、すべての上限のユーザー オーバーライドを一覧表示します。

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

削除されたオーバーライドはリストに表示されなくなります。

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

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

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