Limitazione delle richieste di Resource Manager

Per ogni sottoscrizione e tenant, Resource Manager definisce un limite di 15.000 richieste di lettura e 1.200 richieste di scrittura al giorno. Questi limiti si applicano a ogni istanza di Azure Resource Manager; sono presenti più istanze in ogni area di Azure e Azure Resource Manager viene distribuito a tutte le aree di Azure. Pertanto, in pratica, i limiti sono effettivamente molto superiori a quelli elencati in precedenza, poiché le richieste utente sono in genere gestite da molte istanze diverse.

Se l'applicazione o script raggiunge questi limiti, è necessario restringere le richieste. In questo argomento viene illustrato come determinare il numero di richieste rimanenti prima di raggiungere il limite e come rispondere in caso di raggiungimento.

Quando si raggiunge il limite, viene visualizzato il codice di stato HTTP 429 Too many requests (429 Troppe richieste).

Il numero di richieste ha come ambito la sottoscrizione o il tenant. Se si dispone di più applicazioni simultanee che effettuano richieste nella sottoscrizione, le richieste da tali applicazioni vengono aggiunte insieme in modo da determinare il numero di richieste rimanenti.

Per le richieste nell'ambito della sottoscrizione occorre la trasmissione dell'ID sottoscrizione, ad esempio il recupero del gruppo di risorse nella sottoscrizione. Le richieste nell'ambito del tenant non includono l'ID sottoscrizione, ad esempio il recupero delle posizioni di Azure valide.

Richieste rimanenti

È possibile determinare il numero di richieste rimanenti esaminando le intestazioni di risposta. Ogni richiesta include i valori per il numero di richieste di scrittura e lettura rimanenti. Nella tabella seguente vengono descritte le intestazioni di risposta che è possibile esaminare per tali valori:

Intestazione risposta Descrizione
x-ms-ratelimit-remaining-subscription-reads Richieste di lettura rimanenti nell'ambito della sottoscrizione
x-ms-ratelimit-remaining-subscription-writes Richieste di scrittura rimanenti nell'ambito della sottoscrizione
x-ms-ratelimit-remaining-tenant-reads Richieste di lettura rimanenti nell'ambito del tenant
x-ms-ratelimit-remaining-tenant-writes Richieste di scrittura rimanenti nell'ambito del tenant
x-ms-ratelimit-remaining-subscription-resource-requests Richieste di tipo di risorsa rimanenti nell'ambito della sottoscrizione.

Questo valore di intestazione viene restituito solo se un servizio ha superato il limite predefinito. Resource Manager aggiunge questo valore invece delle richieste di lettura o scrittura per la sottoscrizione.
x-ms-ratelimit-remaining-subscription-resource-entities-read Richieste di raccolta di tipo di risorsa rimanenti nell'ambito della sottoscrizione.

Questo valore di intestazione viene restituito solo se un servizio ha superato il limite predefinito. Questo valore fornisce il numero di richieste di raccolta rimanenti (elenco di risorse).
x-ms-ratelimit-remaining-tenant-resource-requests Richieste di tipo di risorsa rimanenti nell'ambito del tenant.

Questa intestazione viene aggiunta solo per le richieste a livello di tenant e solo se un sevizio ha superato il limite predefinito. Resource Manager aggiunge questo valore invece delle richieste di lettura o scrittura per il tenant.
x-ms-ratelimit-remaining-tenant-resource-entities-read Richieste di raccolta di tipo di risorsa rimanenti nell'ambito del tenant.

Questa intestazione viene aggiunta solo per le richieste a livello di tenant e solo se un sevizio ha superato il limite predefinito.

Recupero dei valori di intestazione

Il recupero di questi valori di intestazione nel codice o nello script non è diverso rispetto al recupero di qualsiasi valore di intestazione.

Ad esempio, in C# viene recuperato il valore di intestazione da un oggetto HttpWebResponse di nome response con il codice seguente:

response.Headers.GetValues("x-ms-ratelimit-remaining-subscription-reads").GetValue(0)

In PowerShell viene recuperato il valore di intestazione da un'operazione Invoke-WebRequest.

$r = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/{guid}/resourcegroups?api-version=2016-09-01 -Method GET -Headers $authHeaders
$r.Headers["x-ms-ratelimit-remaining-subscription-reads"]

In alternativa, se desidera visualizzare le richieste rimanenti per il debug, è possibile fornire il parametro -Debug nel cmdlet PowerShell.

Get-AzureRmResourceGroup -Debug

Tale parametro restituisce molti valori, incluso il valore di risposta seguente:

...
DEBUG: ============================ HTTP RESPONSE ============================

Status Code:
OK

Headers:
Pragma                        : no-cache
x-ms-ratelimit-remaining-subscription-reads: 14999
...

In Interfaccia della riga di comando di Azure il valore di intestazione viene recuperato tramite l'opzione più dettagliata.

azure group list -vv --json

Tale opzione restituisce numerosi valori, inclusi l'oggetto seguente:

...
silly: returnObject
{
  "statusCode": 200,
  "header": {
    "cache-control": "no-cache",
    "pragma": "no-cache",
    "content-type": "application/json; charset=utf-8",
    "expires": "-1",
    "x-ms-ratelimit-remaining-subscription-reads": "14998",
    ...

Attesa prima dell'invio della richiesta successiva

Quando si raggiunge il limite di richieste, Resource Manager restituisce il codice di stato HTTP 429 e un valore Retry-After nell'intestazione. Il valore Retry-After specifica il numero di secondi durante i quali l'applicazione deve attendere (o restare in sospensione) prima di inviare la richiesta successiva. Se si invia una richiesta prima che sia trascorso il valore per la ripetizione del tentativo, la richiesta non viene elaborata e viene restituito un nuovo valore per la ripetizione del tentativo.

Passaggi successivi