Gestione della quota di servizio

Questa pagina descrive come visualizzare tutte le metriche e i limiti delle quote di un progetto Google Cloud per un servizio specifico e come limitare l'utilizzo della quota per quel servizio utilizzando un'override della quota. Puoi utilizzare Service Usage per gestire la quota per i tuoi progetti per qualsiasi servizio, inclusi i servizi Google Cloud pubblici e i servizi privati creati utilizzando Cloud Endpoints. Per ulteriori informazioni sulle differenze tra API e servizi pubblici e privati, consulta Servizi pubblici e privati.

Per la maggior parte dei casi d'uso operativi, il modo più semplice per gestire la quota è utilizzare la console Google Cloud. Se devi programmare in base all'API Service Usage, consigliamo di utilizzare una delle nostre librerie client. Per fare esperimenti con l'API, puoi seguire le istruzioni riportate in questa guida e utilizzare il comando gcurl per testare l'API senza configurare un ambiente di sviluppo completo delle applicazioni.

Se utilizzi Terraform, consulta Gestire le risorse di utilizzo del servizio con Terraform.

Prima di iniziare

Per utilizzare gli esempi in questa pagina, completa tutti i passaggi elencati nella guida Per iniziare. Questi passaggi includono la definizione di gcurl, che è un alias autenticato per il comando curl standard, e la definizione della variabile di ambiente PROJECT_NUMBER.

Assicurati di acquisire familiarità con il modello di quota di servizio per comprendere meglio la terminologia utilizzata in questo tutorial.

Visualizzazione della quota di servizio

Per visualizzare tutte le metriche e i limiti delle quote che si applicano a un consumatore specifico in un servizio, utilizza il seguente comando:

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

La chiamata risponde con un elenco di metriche definite dal servizio, ciascuna con l'elenco dei limiti per le metriche che si applicano a questo consumatore, i valori di questi limiti e eventuali sostituzioni. Ecco un esempio parziale di risposta:


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

Ogni metrica nella risposta ha un campo name. Per controllare le impostazioni della quota solo per quella metrica, anziché per tutte le metriche, utilizza il relativo name nell'URL. Ai fini di questo tutorial, la variabile di ambiente METRIC_RESOURCE_NAME memorizza il nome della risorsa metrica della quota:

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

Poiché viene fornito un nome specifico della risorsa metrica, la chiamata restituisce solo le informazioni relative a quella metrica:

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

Analogamente, ogni limite all'interno di una metrica ha un campo name. Per controllare le impostazioni di quota solo per quel limite per quella metrica, anziché per tutti i limiti di una metrica o di tutte le metriche, utilizza il relativo name nell'URL. Ai fini di questo tutorial, la variabile di ambiente LIMIT_RESOURCE_NAME memorizza il nome della risorsa del limite di quota:

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

Quando viene specificato un limite specifico, la chiamata restituisce solo le informazioni relative a quel limite:

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

Creazione di un override della quota del consumer

Il proprietario di un progetto può applicare un override del consumatore a un limite di quota specifico per il progetto, per ridurre la quantità totale di quota che il consumatore può addebitare in base a quel limite.

Tieni presente che una sostituzione da parte del consumatore non può aumentare la quota disponibile oltre quanto consentito dal valore predefinito del servizio e da eventuali sostituzioni esistenti da parte di altre parti (ad esempio il proprietario del servizio o l'amministratore della quota di un'organizzazione). Per aumentare la quota disponibile, utilizza l'opzione Modifica quote nella pagina principale delle quote o chiedi all'amministratore dell'organizzazione un aumento della quota.

Per identificare un limite da ignorare, utilizza prima uno dei metodi precedenti per trovare il limite di quota che ti interessa. Quindi, utilizza il campo del nome del limite di quota per creare una nuova sostituzione del consumatore per quel limite. Il seguente esempio riguarda il limite per progetto della metrica della quota "Gateway VPN esterni" del servizio 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"}'

Se la chiamata va a buon fine, restituisce un identificatore dell'operazione, che rappresenta il lavoro in corso sul server, man mano che la modifica della quota si propaga ai sistemi di backend:

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

Per controllare l'avanzamento dell'operazione, utilizza semplicemente il relativo name:

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

Se l'operazione va a buon fine, il messaggio di risposta include done: true e contiene la risorsa di override appena creata. Se l'operazione non va a buon fine, il messaggio di risposta include done: true, ma contiene i dettagli dell'errore anziché la risorsa.

Per verificare che l'override sia stato creato, elenca tutte le sostituzioni del consumatore per il limite:

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

L'override appena creato dovrebbe essere visualizzato nell'elenco:

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

Creazione di sostituzioni delle quote a livello di regione o zona

Alcuni limiti di quota vengono applicati in base alla regione o alla zona; questo è indicato dalla presenza di {region} o {zone} nel campo unit del limite. Ad esempio, un limite con l'unità "1/{project}/{region}" viene applicato in base alla regione. L'applicazione di una sostituzione a un limite di questo tipo modifica la quota di base in ogni regione o zona. Per modificare la quota solo per una regione o una zona specifica, aggiungi una dimensione quota utilizzando il campo dimensions durante la creazione della sostituzione. Ad esempio, crea un'override regionale per un limite di quota regionale di Compute Engine come questo:

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

Per verificare che l'override regionale sia stato creato, elenca tutte le sostituzioni dei consumatori per il limite:

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

L'override regionale appena creato dovrebbe apparire nell'elenco:

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

Aggiornamento di un override della quota consumer

Il proprietario di un progetto può anche modificare il valore di un'override del consumatore esistente nel progetto.

Ad esempio, supponiamo che una chiamata create precedente abbia restituito un'override con un campo name come questo:

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

Quindi utilizza questo nome per identificare la sostituzione da aggiornare, ad esempio:

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

Se la chiamata va a buon fine, restituisce un identificatore dell'operazione, che rappresenta il lavoro in corso sul server, man mano che la modifica della quota si propaga ai sistemi di backend:

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

Per controllare l'avanzamento dell'operazione, utilizza semplicemente il relativo name:

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

Se l'operazione riesce, il messaggio di risposta include done: true e contiene la risorsa di override aggiornata. Se l'operazione non va a buon fine, il messaggio di risposta include done: true, ma contiene i dettagli dell'errore anziché la risorsa aggiornata.

Per verificare che l'override sia stato aggiornato, elenca tutte le sostituzioni del consumatore per il limite:

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"

L'override dovrebbe ora essere visualizzato nell'elenco con il valore aggiornato:

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

Eliminazione di un override della quota del consumer

Il proprietario di un progetto può anche rimuovere un'override del consumatore dal progetto.

Ad esempio, supponiamo che una chiamata create precedente abbia restituito un'override con un campo name come questo:

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

Per eliminare l'override, esegui la seguente sequenza:

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

Per verificare che l'override sia stato eliminato, elenca tutte le sostituzioni del consumatore per il limite:

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"

L'override eliminato non dovrebbe più essere visualizzato nell'elenco.

Forzare modifiche sostanziali alla quota

Se una modifica dell'override della quota causa una diminuzione della quota impostata di oltre il 10%, la chiamata viene rifiutata come misura di sicurezza per evitare una diminuzione accidentale della quota troppo rapida. Per ignorare questa limitazione, utilizza il flag force. Ad esempio, di seguito è riportata una chiamata create che accetta il flag force:

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