Gestione della quota di servizio

In questa pagina viene descritto 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 tale servizio mediante l'override della quota. Puoi utilizzare Service Usage per gestire la quota dei 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 eseguire una programmazione mediante l'API Service Usage, ti consigliamo di utilizzare una delle librerie client da noi fornite. Per sperimentare l'API, puoi seguire le istruzioni in questa guida e utilizzare il comando gcurl per testarla senza configurare un ambiente di sviluppo dell'applicazione completo.

Se utilizzi Terraform, consulta Gestire le risorse di utilizzo dei servizi con Terraform.

Prima di iniziare

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

Assicurati di acquisire familiarità con il modello della 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 di quota che si applicano a un consumer specifico su un servizio, utilizza il comando seguente:

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 applicabili al consumer, i valori per questi limiti e gli eventuali override. Di seguito è riportato 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 archivia il nome risorsa della metrica di 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é è indicato il nome di una risorsa metrica specifica, 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"
}

Allo stesso modo, ogni limite all'interno di una metrica ha un campo name. Per controllare le impostazioni della quota solo per quel limite su quella metrica, anziché per tutti i limiti di una metrica o di tutte le metriche, utilizza il rispettivo name nell'URL. Ai fini di questo tutorial, la variabile di ambiente LIMIT_RESOURCE_NAME archivia il nome 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 consumer

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

Tieni presente che un override consumer non può aumentare la quota disponibile oltre quella consentita dall'impostazione predefinita del servizio e qualsiasi override esistente da parte di altre parti (ad esempio il proprietario del servizio o l'amministratore delle quote dell'organizzazione). Per aumentare la quota disponibile, utilizza l'opzione Modifica quote nella pagina principale della quota o chiedi all'amministratore dell'organizzazione un aumento della quota.

Per identificare un limite da sostituire, utilizza prima uno dei metodi precedenti per trovare il limite di quota di interesse. Quindi, utilizza il campo del nome del limite di quota per creare un nuovo override dell'utente su quel limite. L'esempio seguente riguarda il limite per progetto della metrica di 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"}'

Quando la chiamata ha esito positivo, restituisce un identificatore dell'operazione, che rappresenta il lavoro in corso sul server, mentre la modifica della quota si propaga ai sistemi di backend:

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

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

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

Se l'operazione ha esito positivo, 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 tutti gli override consumer 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 override della quota a livello di regione o zona

Alcuni limiti di quota vengono applicati a livello di regione o zona; ciò è 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 un override a questo limite 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 della quota utilizzando il campo dimensions durante la creazione dell'override. Ad esempio, crea un override a livello di regione su 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 a livello di regione sia stato creato, elenca tutti gli override consumer per il limite:

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

L'override regionale appena creato dovrebbe essere visualizzato 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 consumer esistente sul progetto.

Ad esempio, supponi che una chiamata create precedente abbia restituito un override con un campo name simile al seguente:

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

Quindi, utilizzalo per identificare l'override da aggiornare, come segue:

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

Quando la chiamata ha esito positivo, restituisce un identificatore dell'operazione, che rappresenta il lavoro in corso sul server, mentre la modifica della quota si propaga ai sistemi di backend:

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

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

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

Se l'operazione ha esito positivo, 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 tutti gli override consumer 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 apparire nell'elenco con il suo 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 consumer

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

Ad esempio, supponi che una chiamata create precedente abbia restituito un override con un campo name simile al seguente:

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 tutti gli override consumer 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 di quota elevate

Se una modifica dell'override della quota fa sì che la quota applicata diminuisca di oltre il 10%, la chiamata viene rifiutata, come misura di sicurezza per evitare di ridurre accidentalmente la quota troppo rapidamente. Per ignorare questa limitazione, utilizza il flag force. Ad esempio, ecco una chiamata create che prende il flag di forza:

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