Förstå hur Azure Resource Manager begränsar begäranden

Den här artikeln beskriver hur Azure Resource Manager begränsar begäranden. Den visar hur du spårar antalet begäranden som återstår innan du når gränsen och hur du svarar när du når gränsen.

Begränsning sker på två nivåer. Azure Resource Manager begränsar begäranden för prenumerationen och klientorganisationen. Om begäran är under gränsvärdena för prenumerationen och klientorganisationen dirigerar Resource Manager begäran till resursprovidern. Resursprovidern tillämpar gränsvärden som är skräddarsydda för dess åtgärder.

Följande bild visar hur begränsning tillämpas när en begäran går från användaren till Azure Resource Manager och resursprovidern. Bilden visar att begäranden till en början begränsas per huvudnamns-ID och per Azure Resource Manager-instans i regionen där användaren skickar begäran. Begäranden begränsas per timme. När begäran vidarebefordras till resursprovidern begränsas begäranden per region för resursen i stället för per Azure Resource Manager-instans i användarens region. Resursproviderns begäranden begränsas också per huvudkontots användar-ID och per timme.

Diagram som visar hur begränsning tillämpas när en begäran går från användaren till Azure Resource Manager och resursprovidern.

Prenumerations- och klientbegränsningar

Varje åtgärd på prenumerationsnivå och klientnivå omfattas av begränsningsgränser. Prenumerationsbegäranden är sådana som innebär att du skickar ditt prenumerations-ID, till exempel att hämta resursgrupperna i din prenumeration. Att till exempel skicka en begäran till https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups?api-version=2022-01-01 är en åtgärd på prenumerationsnivå. Klientbegäranden inkluderar inte ditt prenumerations-ID, till exempel att hämta giltiga Azure-platser. Att till exempel skicka en begäran till https://management.azure.com/tenants?api-version=2022-01-01 är en åtgärd på klientorganisationsnivå.

I följande tabell visas standardgränser per timme.

Omfång Operations Gräns
Prenumeration läsningar 12000
Prenumeration borttagningar 15000
Prenumeration skrivningar 1200
Klientorganisation läsningar 12000
Klientorganisation skrivningar 1200

De här gränserna gäller det säkerhetsobjekt (användare eller program) som skickar förfrågningarna och prenumerationens eller klientorganisationens ID. Om dina förfrågningar kommer från fler än ett säkerhetsobjekt är begränsningen för prenumerationen eller klientorganisationen högre än 12 000 respektive 1 200 per timme.

Dessa gränser gäller för varje Azure Resource Manager-instans. Det finns flera instanser i varje Azure-region och Azure Resource Manager distribueras till alla Azure-regioner. Så i praktiken är gränserna högre än dessa gränser. Begäranden från en användare hanteras vanligtvis av olika instanser av Azure Resource Manager.

Återstående begäranden returneras i svarshuvudvärdena.

Migrera till regional begränsning och token bucket-algoritm

Från och med 2024 migrerar Microsoft Azure-prenumerationer till en ny begränsningsarkitektur. Med den här ändringen får du nya begränsningar. De nya begränsningsgränserna tillämpas per region i stället för per instans av Azure Resource Manager. Den nya arkitekturen använder en token bucket-algoritm för att hantera API-begränsning.

Token-bucketen representerar det maximala antalet begäranden som du kan skicka för varje sekund. När du når det maximala antalet begäranden avgör påfyllningsfrekvensen hur snabbt token blir tillgängliga i bucketen.

Dessa uppdaterade gränser gör det enklare för dig att uppdatera och hantera din kvot.

De nya gränserna är:

Omfång Operations Bucketstorlek Påfyllningshastighet per sekund
Prenumeration läsningar 250 25
Prenumeration borttagningar 200 10
Prenumeration skrivningar 200 10
Klientorganisation läsningar 250 25
Klientorganisation borttagningar 200 10
Klientorganisation skrivningar 200 10

Prenumerationsgränserna gäller per prenumeration, per tjänstens huvudnamn och per åtgärdstyp. Det finns också globala prenumerationsgränser som motsvarar 15 gånger de enskilda gränserna för tjänstens huvudnamn för varje åtgärdstyp. De globala gränserna gäller för alla tjänsthuvudnamn. Begäranden begränsas om de globala gränserna, tjänstens huvudnamn eller klientorganisationsspecifika gränser överskrids.

Gränserna kan vara mindre för kostnadsfria kunder eller utvärderingskunder.

Anta till exempel att du har en bucketstorlek på 250 token för läsbegäranden och påfyllningshastighet på 25 token per sekund. Om du skickar 250 läsbegäranden på en sekund är bucketen tom och dina begäranden begränsas. Varje sekund blir 25 token tillgängliga tills bucketen når sin maximala kapacitet på 250 token. Du kan använda token när de blir tillgängliga.

Hur gör jag för att veta om min prenumeration använder den nya begränsningsupplevelsen?

När prenumerationen har migrerats till den nya begränsningsmiljön visar svarshuvudet återstående begäranden per minut i stället för per timme. Dessutom visar värdet Retry-After en minut eller mindre, i stället för fem minuter. Mer information finns i Felkod.

Varför ändras begränsningen till per region i stället för per instans?

Eftersom olika regioner har ett annat antal Resource Manager-instanser orsakar begränsning per instans inkonsekventa begränsningsprestanda. Begränsning per region gör begränsningen konsekvent och förutsägbar.

Hur påverkar den nya begränsningsupplevelsen mina gränser?

Du kan skicka fler begäranden. Skrivbegäranden ökar med 30 gånger. Borttagningsbegäranden ökar med 2,4 gånger. Läsbegäranden ökar med 7,5 gånger.

Kan jag förhindra att min prenumeration migreras till den nya begränsningsmiljön?

Nej, alla prenumerationer migreras så småningom.

Begränsningar för resursprovider

Resursprovidrar tillämpar sina egna begränsningar. I varje prenumeration begränsar resursprovidern resursens region i begäran. Eftersom Resource Manager begränsar efter instans av Resource Manager och det finns flera instanser av Resource Manager i varje region kan resursprovidern ta emot fler begäranden än standardgränserna i föregående avsnitt.

I det här avsnittet beskrivs begränsningarna för vissa resursprovidrar som används ofta.

Lagringsbegränsning

Följande begränsningar gäller endast när du utför hanteringsåtgärder med Azure Resource Manager med Azure Storage. Gränserna gäller per region för resursen i begäran.

Resurs Gräns
Hanteringsåtgärder för lagringskonto (läsning) 800 per 5 minuter
Hanteringsåtgärder för lagringskonto (skrivning) 10 per sekund / 1 200 per timme
Hanteringsåtgärder för lagringskonto (lista) 100 per 5 minuter

Nätverksbegränsning

Microsoft.Network-resursprovidern tillämpar följande begränsningar:

Åtgärd Gräns
skrivning/borttagning (PUT) 1 000 per 5 minuter
läsning (GET) 1 0000 per 5 minuter

Utöver dessa allmänna gränser gäller följande gränser för DNS-åtgärder:

DNS-zonåtgärd Gräns (per zon)
Skapa eller uppdatera 40 per minut
Delete 40 per minut
Hämta 1 000 per minut
List 60 per minut
Lista efter resursgrupp 60 per minut
Uppdatera 40 per minut
DNS-postuppsättningsåtgärd Gräns (per zon)
Skapa eller uppdatera 200 per minut
Delete 200 per minut
Hämta 2 000 per minut
Lista efter DNS-zon 60 per minut
Lista efter typ 60 per minut
Uppdatera 200 per minut

Beräkningsbegränsning

Information om begränsningsgränser för beräkningsåtgärder finns i Felsöka API-begränsningsfel – Beräkning.

Om du vill kontrollera virtuella datorinstanser i en VM-skalningsuppsättning använder du åtgärderna Vm-skalningsuppsättningar. Använd till exempel virtuella datorer för vm-skalningsuppsättning – lista med parametrar för att kontrollera energitillståndet för virtuella datorinstanser. Det här API:et minskar antalet begäranden.

Azure Resource Graph-begränsning

Azure Resource Graph begränsar antalet begäranden till dess åtgärder. Stegen i den här artikeln för att fastställa återstående begäranden och hur du svarar när gränsen nås gäller även för Resource Graph. Resource Graph anger dock sin egen gräns och återställningshastighet. Mer information finns i Resource Graph-begränsningshuvuden.

Andra resursprovidrar

Information om begränsning i andra resursprovidrar finns i:

Felkod

När du når gränsen får du HTTP-statuskoden 429 För många begäranden. Svaret innehåller värdet Försök efter igen, som anger hur många sekunder programmet ska vänta (eller vila) innan nästa begäran skickas. Om du skickar en begäran innan återförsöksvärdet förflutit bearbetas inte din begäran och ett nytt återförsöksvärde returneras.

Om du använder en Azure SDK kan SDK:et ha en konfiguration för automatiskt återförsök. Mer information finns i Vägledning för återförsök för Azure-tjänster.

Vissa resursprovidrar returnerar 429 för att rapportera ett tillfälligt problem. Problemet kan vara ett överlagringsvillkor som inte direkt orsakas av din begäran. Eller så kan det innebära ett tillfälligt fel om målresursens eller den beroende resursens tillstånd. Nätverksresursprovidern returnerar till exempel 429 med felkoden RetryableErrorDueToAnotherOperation när målresursen låses av en annan åtgärd. Om du vill ta reda på om felet kommer från begränsning eller ett tillfälligt villkor kan du visa felinformationen i svaret.

Återstående begäranden

Du kan fastställa antalet återstående begäranden genom att undersöka svarshuvuden. Läsbegäranden returnerar ett värde i rubriken för antalet återstående läsbegäranden. Skrivbegäranden innehåller ett värde för antalet återstående skrivbegäranden. I följande tabell beskrivs de svarshuvuden som du kan undersöka för dessa värden:

Svarsrubrik beskrivning
x-ms-ratelimit-remaining-subscription-deletes Återstående borttagna prenumerationsomfång. Det här värdet returneras vid borttagningsåtgärder.
x-ms-ratelimit-remaining-subscription-reads Återstående läsningar med prenumerationsomfång. Det här värdet returneras vid läsåtgärder.
x-ms-ratelimit-remaining-subscription-writes Återstående skrivningar med prenumerationsomfång. Det här värdet returneras vid skrivåtgärder.
x-ms-ratelimit-remaining-tenant-reads Återstående läsningar med klientomfattning
x-ms-ratelimit-remaining-tenant-writes Återstående skrivningar med klientomfattning
x-ms-ratelimit-remaining-subscription-resource-requests Begäranden av prenumerationsomfångsbegränsad resurstyp finns kvar.

Det här rubrikvärdet returneras endast om en tjänst åsidosätter standardgränsen. Resource Manager lägger till det här värdet i stället för prenumerationens läsningar eller skrivningar.
x-ms-ratelimit-remaining-subscription-resource-entities-read Begäranden om resurstypssamling som är begränsade till prenumerationen finns kvar.

Det här rubrikvärdet returneras endast om en tjänst åsidosätter standardgränsen. Det här värdet innehåller antalet återstående samlingsbegäranden (listresurser).
x-ms-ratelimit-remaining-tenant-resource-requests Kvarstående begäranden av resurstyp med klientomfattning.

Det här huvudet läggs bara till för begäranden på klientorganisationsnivå och endast om en tjänst åsidosätter standardgränsen. Resource Manager lägger till det här värdet i stället för klientorganisationens läsningar eller skrivningar.
x-ms-ratelimit-remaining-tenant-resource-entities-read Kvarstående begäranden om resurstypsinsamling för klientorganisation.

Det här huvudet läggs bara till för begäranden på klientorganisationsnivå och endast om en tjänst åsidosätter standardgränsen.

Resursprovidern kan också returnera svarshuvuden med information om återstående begäranden. Information om svarshuvuden som returneras av beräkningsresursprovidern finns i Meddelandehuvuden för samtalsfrekvensinformation.

Hämtar huvudvärdena

Att hämta dessa rubrikvärden i koden eller skriptet skiljer sig inte från att hämta ett huvudvärde.

I C# hämtar du till exempel rubrikvärdet från ett HttpWebResponse-objekt med namnet response med följande kod:

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

I PowerShell hämtar du rubrikvärdet från en Invoke-WebRequest-åtgärd.

$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"]

Ett fullständigt PowerShell-exempel finns i Kontrollera Resource Manager-gränser för en prenumeration.

Om du vill se återstående begäranden om felsökning kan du ange parametern -Debug på din PowerShell-cmdlet .

Get-AzResourceGroup -Debug

Vilket returnerar många värden, inklusive följande svarsvärde:

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

Status Code:
OK

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

Använd en skrivåtgärd för att hämta skrivgränser:

New-AzResourceGroup -Name myresourcegroup -Location westus -Debug

Vilket returnerar många värden, inklusive följande värden:

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

Status Code:
Created

Headers:
Pragma                        : no-cache
x-ms-ratelimit-remaining-subscription-writes: 1199

I Azure CLI hämtar du rubrikvärdet med hjälp av det mer utförliga alternativet.

az group list --verbose --debug

Vilket returnerar många värden, inklusive följande värden:

msrest.http_logger : Response status: 200
msrest.http_logger : Response headers:
msrest.http_logger :     'Cache-Control': 'no-cache'
msrest.http_logger :     'Pragma': 'no-cache'
msrest.http_logger :     'Content-Type': 'application/json; charset=utf-8'
msrest.http_logger :     'Content-Encoding': 'gzip'
msrest.http_logger :     'Expires': '-1'
msrest.http_logger :     'Vary': 'Accept-Encoding'
msrest.http_logger :     'x-ms-ratelimit-remaining-subscription-reads': '11998'

Använd en skrivåtgärd för att hämta skrivgränser:

az group create -n myresourcegroup --location westus --verbose --debug

Vilket returnerar många värden, inklusive följande värden:

msrest.http_logger : Response status: 201
msrest.http_logger : Response headers:
msrest.http_logger :     'Cache-Control': 'no-cache'
msrest.http_logger :     'Pragma': 'no-cache'
msrest.http_logger :     'Content-Length': '163'
msrest.http_logger :     'Content-Type': 'application/json; charset=utf-8'
msrest.http_logger :     'Expires': '-1'
msrest.http_logger :     'x-ms-ratelimit-remaining-subscription-writes': '1199'

Nästa steg