Questa pagina descrive come implementare casi d'uso comuni utilizzando l'API Cloud Quotas. Questa API consente di modificare in modo programmatico le quotas e di automatizzare gli aggiustamenti delle quote nei progetti, nelle cartelle o nell'organizzazione di Google Cloud.
Per saperne di più, consulta la panoramica e il riferimento dell'API Cloud Quotas.
Limitazioni
L'API Cloud Quotas presenta le seguenti limitazioni:
L'API non supporta Google Cloud CLI.
L'API supporta gli aggiustamenti delle quote a livello di progetto. È possibile richiedere riduzioni di quota per le quote a livello di progetto, cartella e organizzazione.
L'API non supporta i Controlli di servizio VPC.
Monitora l'utilizzo e richiedi un aumento se l'utilizzo è superiore all'80%
Questo esempio monitora l'utilizzo della quota con Cloud Monitoring e richiede un aumento quando l'utilizzo supera l'80%.
- Chiama la risorsa
QuotaInfo
per il tuo servizio per determinare l'attualequotaValue
. Il servizio in questo esempio ècompute.googleapis.com
:GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos
SostituisciPROJECT_NUMBER
con il numero del progetto. - Per trovare le CPU per progetto e le località applicabili, cerca l'ID quota
CPUS-per-project-region
nella rispostaQuotaInfo
. Il valorequotaValue
è 20."quotaInfos": [ … { "name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/CPUS-per-project-region", "quotaId": "CPUS-per-project-region", "metric": "compute.googleapis.com/cpus", "containerType": "PROJECT", "dimensions": [ "region" ], "dimensionsInfo": [ { "dimensions": [], "details": { "quotaValue": 20, "resetValue": 20 }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ] }, … ]
Questo output include i seguenti valori:PROJECT_NUMBER
: un identificatore univoco generato automaticamente per il tuo progetto.
- Chiama l'API Cloud Monitoring per trovare l'utilizzo della quota. Nell'esempio seguente è stata specificata la regione
us-central1
. Le metriche delle quote supportate sono elencate inserviceruntime
.{ "name": "projects/PROJECT_NUMBER" "filter": "metric.type=\"serviceruntime.googleapis.com/quota/allocation/usage\" AND metric.labels.quota_metric=\"compute.googleapis.com/cpus\" AND resource.type=\"consumer_quota\" AND resource.label.location=\"us-central1\" ", "interval": { "startTime": "2023-11-10T18:18:18.0000Z", "endTime": "2023-11-17T18:18:18.0000Z" }, "aggregation": { "alignmentPeriod": "604800s", // 7 days "perSeriesAligner": ALIGN_MAX, "crossSeriesReducer": REDUCE_MAX } }
Questo output include i seguenti valori:PROJECT_NUMBER
: un identificatore univoco generato automaticamente per il tuo progetto.
- Per determinare l'utilizzo, gestisci la risposta dall'API Cloud Monitoring.
Confronta il valore di Cloud Monitoring con il
quotaValue
nei passaggi precedenti per determinare l'utilizzo.
Nella risposta di esempio seguente il valore di utilizzo in Cloud Monitoring è 19 nella regioneus-central1
. Il valorequotaValue
per tutte le regioni è 20. L'utilizzo è superiore all'80% della quota ed è possibile avviare un aggiornamento delle preferenze di quota.time_series { metric { labels { key: "quota_metric" value: "compute.googleapis.com/cpus" } type: "serviceruntime.googleapis.com/quota/allocation/usage" } resource { type: "consumer_quota" labels { key: "project_id" value: "PROJECT_ID" } labels { key: "location" value: "us-central1" } } metric_kind: GAUGE value_type: INT64 points { interval { start_time { seconds: "2023-11-10T18:18:18.0000Z" } end_time { seconds: "2023-11-17T18:18:18.0000Z" } } value { int64_value: 19 } } }
Questo output include i seguenti valori:PROJECT_ID
: un identificatore univoco globale per il progetto.
- Per evitare la duplicazione delle preferenze di quota, chiama prima
ListQuotaPreferences
per verificare se ci sono richieste in attesa. Il flagreconciling=true
delle chiamate in attesa.GET projects/PROJECT_NUMBER/locations/global/quotaPreferences?filter=service=%22compute.googleapis.com%22%20AND%20quotaId=%22CPUS-per-project-region%22%20AND%20reconciling=true
SostituisciPROJECT_NUMBER
con il numero del tuo progetto. - Chiama
UpdateQuotaPreference
per aumentare il valore della quota per la regioneus-central1
. Nell'esempio seguente, è stato specificato un nuovo valore preferito 100.
Il campoallow_missing
è impostato sutrue
. Questo indica al sistema di creare una risorsaQuotaPreference
dove non esiste con il nome indicato.PATCH projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1?allowMissing=true { "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 100 }, "dimensions": [ "mapField": { "key": "region", "value": "us-central1" } ], }
Questo output include i seguenti valori:PROJECT_NUMBER
: un identificatore univoco generato automaticamente per il tuo progetto.
- Chiama
GetQuotaPreference
per verificare lo stato della modifica delle preferenze di quota:GET projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1
SostituisciPROJECT_NUMBER
con il numero di progetto del tuo progetto. Mentre Google Cloud valuta il valore di quota richiesto, lo stato di riconciliazione è impostato sutrue
."name": "projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1", "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 100, "grantedValue": 50, "traceId": "123acd-345df23", "requestOrigin": "ORIGIN_UNSPECIFIED" }, "dimensions": [ "mapField": { "key": "region", "value": "us-central1" } ], "reconciling": true "createTime": "2023-01-15T01:30:15.01Z", "updateTime": "2023-01-16T02:35:16.01Z"
Questo output include i seguenti valori:PROJECT_NUMBER
: un identificatore univoco generato automaticamente per il tuo progetto.
reconciling
viene impostato sufalse
.grantedValue
corrisponde apreferredValue
. La quota preferita è completamente concessa.
Quando Google Cloud rifiuta o approva parzialmente una richiesta del cliente, il valore di quota concesso può comunque essere inferiore al valore preferito.
Ridurre una quota
L'esempio seguente riduce il numero di TPU a 10 in ogni area geografica.
- Recupera l'ID quota e il valore di quota attuale con una chiamata
ListQuotaInfos
:GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos
SostituisciPROJECT_NUMBER
con il numero del progetto del tuo progetto. - Esamina i campi della risposta per trovare una voce
QuotaInfo
perV2-TPUS-per-project-region
."quotaInfos": [ … { "name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/V2-TPUS-per-project-region", "quotaId": "V2-TPUS-per-project-region", "metric": "compute.googleapis.com/Tpus", "containerType": "PROJECT", "dimensions": [ "region" ], "dimensionsInfo": [ { "dimensions": [], "details": { "quotaValue": 20, "resetValue": 20 }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ] }, … ]
Questo output include i seguenti valori:PROJECT_NUMBER
: un identificatore univoco generato automaticamente per il tuo progetto.
V2-TPUS-per-project-region
e il valore attuale diquotaValue
è 20. - Riduci la quota TPU in ogni regione a 10 con un
CreateQuotaPreferenceRequest
. ImpostapreferredValue
su 10.POST projects/PROJECT_NUMBER/locations/global/quotaPreferences?quotaPreferenceId=compute_googleapis_com-Tpu-all-regions { "quotaConfig": { "preferredValue": 10 }, "dimensions": [], "service": "compute.googleapis.com", "quotaId": "V2-TPUS-per-project-region", }
Questo output include i seguenti valori:PROJECT_NUMBER
: un identificatore univoco generato automaticamente per il tuo progetto.
- Conferma il nuovo valore di quota con una chiamata
GetQuotaInfo
che definisce l'ID quota comeV2-TPUS-per-project-region
.GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/V2-TPUS-per-project-region
SostituisciPROJECT_NUMBER
con il numero del tuo progetto. Di seguito è riportata una risposta di esempio,value
è 10 ed è applicabile in tutte le regioni."name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/V2-TPUS-per-project-region", "quotaId": "V2-TPUS-per-project-region", "metric": "compute.googleapis.com/v2_tpus", "containerType": "PROJECT", "dimensions": [ "region" ], "dimensionsInfo": [ { "dimensions": [], "details": { "value": 10, }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ]
Questo output include i seguenti valori:PROJECT_NUMBER
: un identificatore univoco generato automaticamente per il tuo progetto.
Copia le preferenze di quota in un altro progetto
L'esempio seguente copia tutte le preferenze di quota da un progetto a un altro.
- Chiama
ListQuotaPreferences
sul progetto di origine senza filtro:GET projects/PROJECT_NUMBER1/locations/global/quotaPreferences
PROJECT_NUMBER1 è il numero del progetto di origine. La risposta contiene tutte le preferenze di quota per il progetto di origine. - Per ogni preferenza di quota nella risposta, chiama
UpdateQuotaPreference
e definisci i seguenti campi:name
: il campo del nome aggiornato viene estratto dalla risposta e il numero del progetto di origine (PROJECT_NUMBER1) viene sostituito con il numero del progetto di destinazione (PROJECT_NUMBER2).service
,quotaId
,preferredValue
,dimensions
: questi campi possono essere recuperati direttamente dalla risposta così com'è.
for (QuotaPreference srcPreference : listResponse.getQuotaPreferences()) { QuotaPreference.Builder targetPreference = QuotaPreference.newBuilder() .setName(srcPreference.getName().replace("PROJECT_NUMBER1", "PROJECT_NUMBER2")) .setService(srcPreference.getService()) .setQuotaId(srcPreference.getQuotaId()) .setQuotaConfig( QuotaConfig.newBuilder().setPreferredValue(srcPreference.getQuotaConfig().getPreferredValue())) .putAllDimensions(srcPreference.getDimensionsMap()); UpdateQuotaPreferenceRequest updateRequest = UpdateQuotaPreferenceRequest.newBuilder() .setQuotaPreference(targetPreference) .setAllowMissing(true) .build(); cloudQuotas.updateQuotaPreference(updateRequest); }
- Chiama
ListQuotaPreferences
per verificare lo stato delle preferenze di quota per il progetto di destinazione:GET projects/PROJECT_NUMBER2/locations/global/quotaPreferences
SostituisciPROJECT_NUMBER2
con il numero di progetto del tuo progetto di destinazione.
Elenco richieste di quota in attesa
Per elencare tutte le richieste di preferenze di quota in attesa per un progetto, chiama
ListQuotaPreferences
con il filtro reconciling=true
.
Get projects/PROJECT_NUMBER/locations/global/quotaPreferences?reconciling=true
Sostituisci PROJECT_NUMBER
con il numero del tuo progetto.
La risposta per questa richiesta restituisce l'ultima preferenza di quota in attesa. Poiché l'API Cloud Quotas è un'API dichiarativa, l'ultima preferenza di quota è ciò che il sistema cerca di soddisfare.
Ecco un esempio di risposta:
"quotaPreferences": [ { "name": "projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1", "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 100, "grantedValue": 30, "traceId": "123acd-345df23", "requestOrigin": "ORIGIN_UNSPECIFIED" }, "dimensions": [ "map_field": { "key": "region", "value": "us-central1" } ], "reconciling": true "createTime": "2023-01-15T01:30:15.01Z", "updateTime": "2023-01-16T02:35:16.01Z" }, { "name": "projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-cross-regions", "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 10, "grantedValue": 5, , "traceId": "456asd-678df43", "requestOrigin": "ORIGIN_UNSPECIFIED" }, "reconciling": true "createTime": "2023-01-15T01:35:15.01Z", "updateTime": "2023-01-15T01:35:15.01Z" } ]
Questo output include i seguenti valori:
PROJECT_NUMBER
: un identificatore univoco generato automaticamente per il tuo progetto.
Richiedi aumenti della quota del gruppo
Per richiedere aumenti per un gruppo di quote in un nuovo progetto, archivia le quote preferite per il nuovo progetto in un file CSV con i seguenti valori: nome servizio, ID quota, valore di quota preferito, dimensioni.
Leggi il contenuto di ogni riga del file CSV nei campi serviceName
,
quotaId
, preferredValue
e dimensionMap
.
CreateQuotaPreferenceRequest request = CreateQuotaPreferenceRequest.newBuilder() .setParent("projects/PROJECT_NUMBER/locations/global") .setQuotaPreferenceId(buildYourOwnQuotaPreferenceId(serviceName, quotaId, dimensionMap)) .setQuotaPreference( QuotaPreference.newBuilder() .setService(serviceName) .setQuotaId(quotaId) .setQuotaConfig(QuotaConfig.newBuilder().setPreferredValue(preferredValue)) .putAllDimensions(dimensionMap)) .build(); cloudQuotas.createQuotaPreference(request);
Sostituisci PROJECT_NUMBER
con il numero del tuo progetto.
Poiché il progetto di destinazione è nuovo, puoi chiamare il metodo CreateQuotaPreference
durante la lettura e l'assegnazione dei campi. In alternativa,
puoi chiamare il metodo UpdateQuotaPreference
con allow_missing
impostato su true
.
Il metodo buildYourOwnQuotaPreferenceId
crea un ID preferenza di quota dal nome del servizio, dall'ID quota e da una mappa delle dimensioni in base allo schema di denominazione. In alternativa, puoi scegliere di non impostare l'ID preferenza di quota. Viene generato automaticamente un ID preferenza di quota.
Visualizza informazioni sulla quota per una dimensione specifica di un servizio
La famiglia di GPU è una dimensione specifica del servizio. La richiesta di esempio seguente utilizza l'ID quota GPUS-PER-GPU-FAMILY-per-project-region
per ottenere la risorsa QuotaInfo
.
GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/GPUS-PER-GPU-FAMILY-per-project-region
Sostituisci PROJECT_NUMBER
con il numero del tuo progetto.
Questa è un'esempio di risposta. Per ogni chiave gpu_family
univoca, quotaValue
e applicableLocations
sono diversi:
"name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/GpusPerProjectPerRegion", "quotatName": "CPUS-per-project-region", "metric": "compute.googleapis.com/gpus_per_gpu_family", "isPrecise": true, "quotaDisplayName": "GPUs per GPU family", "metricDisplayName": "GPUs", "dimensions": [ "region", "gpu_family" ], "dimensionsInfo": [ { "dimensions": [ "mapField": { "key": "region", "value": "us-central1" }, "mapField": { "key": "gpu_family", "value": "NVIDIA_H200" } ], "details": { "quotaValue": 30, "resetValue": 30, }, "applicableLocations": [ "us-central1" ] }, { "dimensions": [ "mapField": { "key": "region", "value": "us-central1" } ], "details": { "quotaValue": 100, "resetValue": 100, }, "applicableLocations": [ "us-central1" ] }, { "dimensions": [ "mapField": { "key": "gpu_familly", "value": "NVIDIA_H100" } ], "details": { "quotaValue": 10, }, "applicableLocations": [ "us-central2", "us-west1", "us-east1" ] } { "dimensions": [], "details": { "quotaValue": 50, "resetValue": 50, }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ]
Questo output include i seguenti valori:
PROJECT_NUMBER
: un identificatore univoco generato automaticamente per il tuo progetto.
Creare una preferenza di quota per una dimensione specifica per un servizio
L'esempio seguente mostra come creare una quota per una determinata regione e famiglia di GPU con un valore preferito pari a 100. La posizione target è specificata nella
mappa delle dimensioni con la chiave region
e la famiglia di GPU target con la chiave
gpu_family
.
Il seguente esempio di CreateQuotaPreference
specifica una famiglia di GPU NVIDIA_H100
e una regione us-central1
. Sostituisci PROJECT_NUMBER
con il numero del progetto.
POST projects/PROJECT_NUMBER/locations/global/quotaPreferences?quotaPreferenceId=compute_googleapis_com-gpus-us-central1-NVIDIA_H100 { "service": "compute.googleapis.com", "quotaId": "GPUS-PER-GPU-FAMILY-per-project-region", "quotaConfig": { "preferredValue": 100 }, "dimensions": [ "mapField": { "key": "region", "value": "us-central1" } "mapField": { "key": "gpu_family", "value": "NVIDIA_H100" } ], }
Aggiornare una preferenza di quota per una dimensione specifica per un servizio
Il seguente codice campione recupera il valore corrente per le dimensioni
{"region" : "us-central1"; gpu_family:"NVIDIA_H100"},
quindi imposta il valore preferito sul doppio. Sostituisci PROJECT_NUMBER
con il numero del progetto.
// Get the current quota value for the target dimensions Map<String, String> targetDimensions = Maps.createHashMap("region", "us-central1", "gpu_family", "NVIDIA_H100"); long currentQuotaValue = 0; QuotaInfo quotaInfo = cloudQuotas.GetQuotaInfo( "projects/PROJECT_NUMBER/locations/global/services/" + serviceName + "quotaInfos/" + quotaId; for (dimensionsInfo : quotaInfo.getDimensionsInfoList()) { If (targetDimensions.entrySet().containsAll(dimensionsInfo.getDimensionsMap().entrySet()) { currentQuotaValue = dimensionsInfo.getDetails().getValue(); break; }) } // Set the preferred quota value to double the current value for the target dimensions QuotaPreference.Builder targetPreference = QuotaPreference.newBuilder() .setName(buildYourOwnQuotaPreferenceId(serviceName, quotaId, targetDimensions)) .setService(serviceName) .setQuotaId(quotaId) .setQuotaConfig(QuotaConfig.newBuilder().setPreferredValue(currentQuotaValue * 2)) .putAllDimensions(targetDimensions)); UpdateQuotaPreferenceRequest updateRequest = UpdateQuotaPreferenceRequest.newBuilder() .setQuotaPreference(targetPreference) .setAllowMissing(true) .build(); cloudQuotas.updateQuotaPreference(updateRequest);
Passaggi successivi
Informazioni sull'API Cloud Quotas
Riferimento API Cloud Quotas
Informazioni sulle quotas