Compreender como o Azure Resource Manager limita os pedidos

Este artigo descreve como o Azure Resource Manager limita as solicitações. Ele mostra como controlar o número de solicitações que permanecem antes de atingir o limite e como responder quando você atinge o limite.

A limitação ocorre em dois níveis. O Azure Resource Manager limita os pedidos para a subscrição e o inquilino. Se o pedido estiver abaixo dos limites de limitação da subscrição e do inquilino, o Resource Manager direcionará o pedido para o fornecedor de recursos. O fornecedor de recursos aplicará os limites da limitação personalizados às operações.

A imagem a seguir mostra como a limitação é aplicada quando uma solicitação passa do usuário para o Azure Resource Manager e o provedor de recursos. A imagem mostra que as solicitações são inicialmente limitadas por ID principal e por instância do Azure Resource Manager na região do usuário que envia a solicitação. As solicitações são limitadas por hora. Quando a solicitação é encaminhada para o provedor de recursos, as solicitações são limitadas por região do recurso, em vez de por instância do Azure Resource Manager na região do usuário. As solicitações do provedor de recursos também são limitadas por ID de usuário principal e por hora.

Diagrama que mostra como a limitação é aplicada à medida que uma solicitação vai do usuário para o Azure Resource Manager e o provedor de recursos.

Limites de subscrição e inquilino

Todas as operações de nível de assinatura e de locatário estão sujeitas a limites de limitação. As solicitações de assinatura são aquelas que envolvem a passagem de sua ID de assinatura, como a recuperação dos grupos de recursos em sua assinatura. Por exemplo, enviar uma solicitação para é uma operação no https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups?api-version=2022-01-01 nível de assinatura. As solicitações de locatário não incluem sua ID de assinatura, como a recuperação de locais válidos do Azure. Por exemplo, enviar uma solicitação para é uma operação no https://management.azure.com/tenants?api-version=2022-01-01 nível do locatário.

Os limites predefinidos de limitação por hora são apresentados na seguinte tabela.

Âmbito Operações Limite
Subscrição leituras 12000
Subscrição eliminações 15000
Subscrição escritas 1200
Inquilino leituras 12000
Inquilino escritas 1200

Estes limites estão circunscritos ao principal de segurança (utilizador ou aplicação) que faz os pedidos e o ID de subscrição ou ID de inquilino. Se os seus pedidos forem provenientes de mais de um principal de segurança, o limite da subscrição ou do inquilino é superior a 12 000 e 1200 por hora.

Esses limites se aplicam a cada instância do Azure Resource Manager. Há várias instâncias em cada região do Azure e o Azure Resource Manager é implantado em todas as regiões do Azure. Assim, na prática, os limites são superiores a esses limites. As solicitações de um usuário geralmente são tratadas por instâncias diferentes do Azure Resource Manager.

As solicitações restantes são retornadas nos valores de cabeçalho de resposta.

Migrando para limitação regional e algoritmo de bucket de token

A partir de 2024, a Microsoft está migrando assinaturas do Azure para uma nova arquitetura de limitação. Com essa mudança, você experimentará novos limites de limitação. Os novos limites de limitação são aplicados por região e não por instância do Azure Resource Manager. A nova arquitetura usa um algoritmo de bucket de token para gerenciar a limitação de API.

O bucket de token representa o número máximo de solicitações que você pode enviar para cada segundo. Quando você atinge o número máximo de solicitações, a taxa de recarga determina a rapidez com que os tokens ficam disponíveis no bucket.

Esses limites atualizados facilitam a atualização e o gerenciamento de sua cota.

Os novos limites são os seguintes:

Âmbito Operações Tamanho da caçamba Taxa de recarga por segundo
Subscrição leituras 250 25
Subscrição eliminações 200 10
Subscrição escritas 200 10
Inquilino leituras 250 25
Inquilino eliminações 200 10
Inquilino escritas 200 10

Os limites de subscrição aplicam-se por subscrição, por entidade de serviço e por tipo de operação. Há também limites de assinatura global que são equivalentes a 15 vezes os limites de entidade de serviço individual para cada tipo de operação. Os limites globais aplicam-se a todas as entidades de serviço. As solicitações serão limitadas se os limites globais, da entidade de serviço ou do locatário forem excedidos.

Os limites podem ser menores para clientes gratuitos ou de avaliação.

Por exemplo, suponha que você tenha um tamanho de bucket de 250 tokens para solicitações de leitura e taxa de recarga de 25 tokens por segundo. Se você enviar 250 solicitações de leitura em um segundo, o bucket estará vazio e suas solicitações serão limitadas. A cada segundo, 25 tokens ficam disponíveis até que o bucket atinja sua capacidade máxima de 250 tokens. Você pode usar tokens à medida que eles ficam disponíveis.

Como posso saber se a minha subscrição utiliza a nova experiência de limitação?

Depois que sua assinatura for migrada para a nova experiência de limitação, o cabeçalho de resposta mostrará as solicitações restantes por minuto em vez de por hora. Além disso, seu Retry-After valor mostra um minuto ou menos, em vez de cinco minutos. Para obter mais informações, consulte Código de erro.

Por que a limitação está mudando para por região e não por instância?

Como regiões diferentes têm um número diferente de instâncias do Resource Manager, a limitação por instância causa um desempenho de limitação inconsistente. A limitação por região torna a limitação consistente e previsível.

Como é que a nova experiência de limitação afeta os meus limites?

Pode enviar mais pedidos. As solicitações de gravação aumentam em 30 vezes. As solicitações de exclusão aumentam em 2,4 vezes. As solicitações de leitura aumentam 7,5 vezes.

Posso impedir que a minha subscrição migre para a nova experiência de limitação?

Não, todas as subscrições acabarão por ser migradas.

Limites do provedor de recursos

Os fornecedores de recursos aplicam os seus próprios limites de limitação. Dentro de cada assinatura, o provedor de recursos é limitado por região do recurso na solicitação. Como o Gerenciador de Recursos é limitado por instância do Gerenciador de Recursos e há várias instâncias do Gerenciador de Recursos em cada região, o provedor de recursos pode receber mais solicitações do que os limites padrão na seção anterior.

Esta seção discute os limites de limitação de alguns provedores de recursos amplamente utilizados.

Limitação de armazenamento

Os seguintes limites aplicam-se apenas quando realiza operações de gestão com o Azure Resource Manager no Armazenamento do Microsoft Azure. Os limites aplicam-se por região do recurso na solicitação.

Recurso Limite
Operações de gestão da conta de armazenamento (leitura) 800 por 5 minutos
Operações de gestão da conta de armazenamento (escrita) 10 por segundo/1200 por hora
Operações de gestão da conta de armazenamento (lista) 100 por 5 minutos

Limitação da rede

O fornecedor de recursos Microsoft.Network aplica os seguintes limites de limitação:

Operação Limite
escrita/eliminação (PUT) 1000 por 5 minutos
leitura (GET) 10000 por 5 minutos

Além desses limites gerais, os seguintes limites se aplicam às operações DNS:

Operação da zona DNS Limite (por zona)
Criar ou atualizar 40 por minuto
Delete 40 por minuto
Obtenção 1000 por minuto
Listagem 60 por minuto
Lista por grupo de recursos 60 por minuto
Atualizar 40 por minuto
Operação do conjunto de registros DNS Limite (por zona)
Criar ou atualizar 200 por minuto
Delete 200 por minuto
Obtenção 2000 por minuto
Lista por zona DNS 60 por minuto
Lista por tipo 60 por minuto
Atualizar 200 por minuto

Limitação de computação

Para obter informações sobre limites de limitação para operações de computação, consulte Solução de problemas de erros de limitação de API - Computação.

Para verificar instâncias de máquina virtual dentro de um Conjunto de Dimensionamento de Máquina Virtual, use as operações Conjuntos de Dimensionamento de Máquina Virtual. Por exemplo, use o Conjunto de Dimensionamento de Máquina Virtual VMs - Lista com parâmetros para verificar o estado de energia das instâncias de máquina virtual. Essa API reduz o número de solicitações.

Limitação do Azure Resource Graph

O Azure Resource Graph limita o número de solicitações para suas operações. As etapas neste artigo para determinar as solicitações restantes e como responder quando o limite for atingido também se aplicam ao Gráfico de Recursos. No entanto, o Resource Graph define seu próprio limite e taxa de redefinição. Para obter mais informações, consulte Cabeçalhos de limitação do Gráfico de Recursos.

Outros fornecedores de recursos

Para obter informações sobre limitação em outros provedores de recursos, consulte:

Código de erro

Quando você atinge o limite, você recebe o código de status HTTP 429 Muitas solicitações. A resposta inclui um valor Retry-After que especifica o número de segundos que seu aplicativo deve aguardar (ou suspender) antes de enviar a próxima solicitação. Se você enviar uma solicitação antes do valor de repetição expirar, sua solicitação não será processada e um novo valor de repetição será retornado.

Se você estiver usando um SDK do Azure, o SDK pode ter uma configuração de repetição automática. Para obter mais informações, consulte Diretrizes de repetição para serviços do Azure.

Alguns provedores de recursos retornam 429 para relatar um problema temporário. O problema pode ser uma condição de sobrecarga que não é causada diretamente pelo seu pedido. Ou, pode representar um erro temporário sobre o estado do recurso de destino ou recurso dependente. Por exemplo, o provedor de recursos de rede retorna 429 com o código de erro RetryableErrorDueToAnotherOperation quando o recurso de destino é bloqueado por outra operação. Para determinar se o erro vem da limitação ou de uma condição temporária, exiba os detalhes do erro na resposta.

Pedidos restantes

Você pode determinar o número de solicitações restantes examinando os cabeçalhos de resposta. As solicitações de leitura retornam um valor no cabeçalho para o número de solicitações de leitura restantes. As solicitações de gravação incluem um valor para o número de solicitações de gravação restantes. A tabela a seguir descreve os cabeçalhos de resposta que você pode examinar para esses valores:

Cabeçalho da resposta Description
x-ms-ratelimit-remaining-subscription-deletes O escopo da assinatura exclui as exclusões restantes. Esse valor é retornado em operações de exclusão.
x-ms-ratelimit-remaining-subscription-reads As leituras com escopo da assinatura permanecem. Esse valor é retornado em operações de leitura.
x-ms-ratelimit-remaining-subscription-writes Gravações com escopo de assinatura restantes. Esse valor é retornado em operações de gravação.
x-ms-ratelimit-remaining-tenant-reads O escopo do locatário lê o restante
x-ms-ratelimit-remaining-tenant-writes O escopo do locatário grava o restante
x-ms-ratelimit-remaining-subscription-resource-requests Solicitações de tipo de recurso com escopo de assinatura restantes.

Esse valor de cabeçalho só será retornado se um serviço substituir o limite padrão. O Resource Manager adiciona esse valor em vez das leituras ou gravações da assinatura.
x-ms-ratelimit-remaining-subscription-resource-entities-read Solicitações de coleta de tipo de recurso com escopo de assinatura restantes.

Esse valor de cabeçalho só será retornado se um serviço substituir o limite padrão. Esse valor fornece o número de solicitações de coleta restantes (recursos de lista).
x-ms-ratelimit-remaining-tenant-resource-requests Solicitações de tipo de recurso com escopo do locatário restantes.

Esse cabeçalho só é adicionado para solicitações no nível do locatário e somente se um serviço substituir o limite padrão. O Resource Manager adiciona esse valor em vez de o locatário ler ou gravar.
x-ms-ratelimit-remaining-tenant-resource-entities-read Solicitações de coleta de tipo de recurso com escopo do locatário restantes.

Esse cabeçalho só é adicionado para solicitações no nível do locatário e somente se um serviço substituir o limite padrão.

O provedor de recursos também pode retornar cabeçalhos de resposta com informações sobre solicitações restantes. Para obter informações sobre cabeçalhos de resposta retornados pelo provedor de recursos de computação, consulte Cabeçalhos de resposta informativos de taxa de chamada.

Recuperando os valores de cabeçalho

Recuperar esses valores de cabeçalho em seu código ou script não é diferente de recuperar qualquer valor de cabeçalho.

Por exemplo, em C#, você recupera o valor do cabeçalho de um objeto HttpWebResponse chamado response com o seguinte código:

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

No PowerShell, você recupera o valor do cabeçalho de uma operação 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"]

Para obter um exemplo completo do PowerShell, consulte Verificar limites do Gerenciador de Recursos para uma assinatura.

Se quiser ver as solicitações restantes de depuração, você pode fornecer o parâmetro -Debug em seu cmdlet do PowerShell .

Get-AzResourceGroup -Debug

Que retorna muitos valores, incluindo o seguinte valor de resposta:

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

Status Code:
OK

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

Para obter limites de gravação, use uma operação de gravação:

New-AzResourceGroup -Name myresourcegroup -Location westus -Debug

Que retorna muitos valores, incluindo os seguintes valores:

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

Status Code:
Created

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

Na CLI do Azure, você recupera o valor do cabeçalho usando a opção mais detalhada.

az group list --verbose --debug

Que retorna muitos valores, incluindo os seguintes valores:

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'

Para obter limites de gravação, use uma operação de gravação:

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

Que retorna muitos valores, incluindo os seguintes valores:

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'

Próximos passos