Administrar cuotas de servicio

En esta página se describe cómo visualizar todas las métricas y los límites de cuota de un proyecto de Google Cloud para un servicio específico y cómo limitar el uso de la cuota para ese servicio mediante una anulación de cuota. Puedes usar Service Usage para administrar la cuota de tus proyectos para cualquier servicio, incluidos los servicios públicos de Google Cloud y los servicios privados creados con Cloud Endpoints. Para obtener más información acerca de las diferencias entre las API y los servicios públicos y privados, consulta Servicios públicos y privados.

Para la mayoría de los casos prácticos operativos, la forma más sencilla de administrar las cuotas es usar Google Cloud Console. Si quieres programar soluciones basadas en la API de Service Usage, te recomendamos que uses una de nuestras bibliotecas cliente. Para experimentar con la API, puedes seguir las instrucciones alternativas en esta guía y usar el comando gcurlcurl para probar la API sin configurar un entorno de desarrollo de aplicación completo.

Antes de comenzar

Para usar los ejemplos de esta página, completa todos los pasos enumerados en la guía Comienza ahora. Estos pasos incluyen definir gcurl, que es un alias autenticado para el comando estándar curl, y definir la variable de entorno PROJECT_NUMBER.

Asegúrate de familiarizarte con el modelo de cuota de servicio para comprender mejor la terminología que se emplea en este instructivo.

Muestra la cuota de servicio

Para ver todas las métricas y los límites de cuota que se aplican a un consumidor específico de un servicio, usa el siguiente comando:

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

La llamada responde con una lista de métricas definidas por el servicio, cada una con la lista de límites de esas métricas que se aplican a este consumidor, los valores de esos límites y cualquier anulación. Esta es una respuesta parcial de ejemplo:


{
  "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"
    },
    ...

Cada métrica de la respuesta tiene un campo name. Para inspeccionar la configuración de cuota solo para esa métrica en lugar de para todas las métricas, usa el name de la URL. En este instructivo, el nombre del recurso de métrica de cuota se almacena en la variable de entorno 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}"

Dado que se proporciona un nombre de recurso de métrica específico, la llamada solo muestra la información para esa métrica:

{
  "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"
}

Del mismo modo, cada límite de una métrica tiene un campo name. Para inspeccionar la configuración de cuota solo para ese límite de métrica en lugar de para todos los límites de métrica o todas las métricas, usa el name de la URL. En este instructivo, el nombre del recurso de límite de cuota se almacena en la variable de entorno 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}"

Cuando se establece un límite específico, la llamada solo muestra la información correspondiente:

{
  "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"
    }
  ]
}

Crea una anulación de cuota del consumidor

El propietario de un proyecto puede aplicar una anulación del consumidor a un límite de cuota específico de ese proyecto para reducir la cantidad total de cuota que puede cobrar el consumidor según ese límite.

Ten en cuenta que una anulación del consumidor no puede aumentar la cuota disponible más allá de lo que permiten el servicio predeterminado y cualquier anulación existente de otras partes (como el propietario del servicio o el administrador de cuotas de una organización). Para aumentar la cuota disponible, usa la opción Editar cuotas de la página principal de cuotas o pídele un aumento al administrador de la organización.

A fin de identificar un límite de anulación, primero utiliza uno de los métodos anteriores para buscar el límite de cuota de interés. Luego, usa el campo de nombre del límite de cuota para crear una nueva anulación del consumidor en ese límite. El siguiente ejemplo corresponde al límite por proyecto de la métrica de cuota de “puertas de enlace de VPN externas” del servicio de Compute Engine:

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"}'

Cuando la llamada se realiza correctamente, muestra un identificador de operación, que representa el trabajo en curso en el servidor, a medida que el cambio de cuota se propaga a los sistemas de backend:

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

Para verificar el progreso de la operación, basta con usar su name:

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

Si se realiza correctamente la operación, el mensaje de respuesta incluye done: true y contiene el recurso de anulación creado recientemente. Si falla la operación, el mensaje de respuesta incluye done: true, pero contiene los detalles del error en lugar del recurso.

Para verificar que se haya creado la anulación, enumere todas las anulaciones del consumidor para el límite:

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

La anulación que acaba de crearse debería aparecer en la lista:

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

Crea anulaciones de cuotas regionales o zonales

Algunos límites de cuota se aplican por región o por zona, lo que se indica con la presencia de {region} o {zone} en el campo unit del límite. Por ejemplo, un límite con la unidad "1/{project}/{region}" se aplica por región. Cuando se aplica una anulación al límite, se cambia la cuota base en cada región o zona. Para cambiar la cuota solo de una región o zona específica, agrega una dimensión de cuota mediante el campo dimensions cuando crees la anulación. Por ejemplo, crea una anulación regional en un límite de cuota regional de Compute Engine de la siguiente manera:

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"} }'

Para verificar que se haya creado la anulación regional, enumere todas las anulaciones del consumidor para el límite:

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

La anulación regional recién creada debería aparecer en la lista:

{
  "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"
      }
    }
  ]
}

Actualiza una anulación de cuota del consumidor

El propietario de un proyecto también puede cambiar el valor de una anulación del consumidor existente en el proyecto.

Por ejemplo, supongamos que una llamada de creación anterior mostró una anulación con un campo name como este:

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

Luego, usa ese nombre para identificar la anulación que se actualizará de esta forma:

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"}'

Cuando la llamada se realiza correctamente, muestra un identificador de operación, que representa el trabajo en curso en el servidor, a medida que el cambio de cuota se propaga a los sistemas de backend:

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

Para verificar el progreso de la operación, basta con usar su name:

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

Si se realiza correctamente la operación, el mensaje de respuesta incluye done: true y contiene el recurso de anulación actualizado. Si falla la operación, el mensaje de respuesta incluye done: true, pero contiene los detalles del error en lugar del recurso actualizado.

Para verificar que se actualizó la anulación, enumere todas las anulaciones de consumidor del límite:

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"

La anulación ahora debería aparecer en la lista con su valor actualizado:

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

Borra una anulación de cuota del consumidor

El propietario de un proyecto también puede quitar una anulación del consumidor del proyecto.

Por ejemplo, supongamos que una llamada de creación anterior mostró una anulación con un campo name como este:

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

Para borrar la anulación, ejecuta la siguiente secuencia:

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

Para verificar que se borró la anulación, enumera todas las anulaciones del consumidor para el límite:

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"

La anulación borrada ya no debería aparecer en la lista.

Aplicación de grandes cambios de cuota

Si un cambio de anulación de cuota provoca que la cuota aplicada disminuya en más del 10%, se rechaza la llamada como medida de seguridad para evitar reducir la cuota demasiado rápido por accidente. Para saltar esta restricción, usa la marca force. Por ejemplo, esta es una llamada de creación que incluye la marca de aplicación forzosa:

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"}'