Entender como o Azure Resource Manager limita as solicitações

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

A limitação ocorre em dois níveis. O Azure Resource Manager limita as solicitações para assinatura e locatário. Se a solicitação estiver dentro dos limites de limitação para assinatura e o locatário, o Resource Manager roteia a solicitação para o provedor de recursos. O provedor de recursos aplica limites de limitação que são ajustados às suas operações.

As imagens a seguir mostram como a limitação é aplicada, uma vez que uma solicitação passa do usuário para o Azure Resource Manager e para o provedor de recursos. A imagem mostra que as solicitações são inicialmente limitadas por ID de entidade de segurança 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 da entidade de segurança e por hora.

O diagrama que mostra como a limitação é aplicada, uma vez que uma solicitação passa do usuário para o Azure Resource Manager e para o provedor de recursos.

Limites de assinatura e locatário

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

Os limites de limitação por hora padrão são mostrados na tabela a seguir.

Escopo Operations Limite
Subscription reads 12000
Subscription deletes 15000
Subscription writes 1200
Locatário reads 12000
Locatário writes 1200

O escopo desses limites são a entidade de segurança (usuário ou aplicativo) que faz as solicitações e a ID da assinatura ou a ID do locatário. Se suas solicitações vierem de mais de uma entidade de segurança, seu limite na assinatura ou no locatário será maior que 12.000 e 1.200 por hora.

Esses limites se aplicam a cada instância do Azure Resource Manager. Há várias instâncias em todas as regiões do Azure e o Azure Resource Manager é implantado em todas as regiões do Azure. Portanto, na prática, os limites são maiores que 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 do cabeçalho de resposta.

Migrar para a limitação regional e o 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 alteração, você experimentará novos valores de limitação. Os novos valores de limitação são aplicados por região em vez de por instância do Azure Resource Manager. A nova arquitetura usa um algoritmo de bucket de token para gerenciar a limitação da 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 da cota.

Os novos limites são:

Escopo Operações Tamanho do bucket Taxa de recarga por segundo
Assinatura reads 250 25
Assinatura deletes 200 10
Assinatura writes 200 10
Locatário reads 250 25
Locatário deletes 200 10
Locatário writes 200 10

Os limites de assinatura se aplicam por assinatura, por entidade de serviço e por tipo de operação. Há também limites de assinatura globais equivalentes a 15 vezes os limites individuais da entidade de serviço para cada tipo de operação. Os limites globais se aplicam a todas as entidades de serviço. As solicitações serão limitadas se os limites globais, de entidade de serviço ou de locatário específicos 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 se tornam disponíveis.

Como fazer para saber se a minha assinatura usa a nova experiência de limitação?

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

Por que a limitação está mudando para por região em vez de 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 a nova experiência de limitação afeta meus limites?

Você pode enviar mais solicitações. As solicitações de gravação aumentam 30 vezes. As solicitações de exclusão aumentam 2,4 vezes. As solicitações de leitura aumentam 7,5 vezes.

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

Não, todas as assinaturas serão eventualmente migradas.

Limites do provedor de recursos

Os provedores de recursos aplicam seus próprios limites de limitação. Em cada assinatura, o provedor de recursos limita por região do recurso na solicitação. Como o Resource Manager limita por instância de Resource Manager e existem várias instâncias dele 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 aborda os limites de limitação de alguns provedores de recursos amplamente usados.

Limitação de armazenamento

Os limites a seguir se aplicarão somente quando você executar operações de gerenciamento usando o Azure Resource Manager com o Armazenamento do Azure. Os limites se aplicam por região do recurso na solicitação.

Recurso Limite
Operações de gerenciamento de conta de armazenamento (leitura) 800 a cada 5 minutos
Operações de gerenciamento de conta de armazenamento (gravação) 10 por segundo/1.200 por hora
Operações de gerenciamento de conta de armazenamento (lista) 100 a cada 5 minutos

Limitação de rede

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

Operação Limite
gravação / exclusão (PUT) 1000 a cada 5 minutos
leitura (GET) 10000 a cada 5 minutos

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

Operação de zona DNS Limite (por zona)
Criar ou Atualizar 40 por minuto
Delete 40 por minuto
Get 1000 por minuto
Lista 60 por minuto
Listar por Grupo de Recursos 60 por minuto
Atualizar 40 por minuto
Operação de conjunto de registros do DNS Limite (por zona)
Criar ou Atualizar 200 por minuto
Delete 200 por minuto
Obter 2000 por minuto
Listar por zona DNS 60 por minuto
Listar por Tipo 60 por minuto
Atualizar 200 por minuto

Limitação da computação

Para obter informações sobre limites de limitação para operações de computação, veja Solucionando erros de limitação de API – Computação.

Para verificar as instâncias de máquina virtual em um Conjunto de dimensionamento de máquinas virtuais, use as operações dos Conjuntos de dimensionamento de máquinas virtuais. Por exemplo, use o conjunto de dimensionamento de máquinas virtuais VMs – List com parâmetros que verifiquem o estado de energia de instâncias de máquina virtual. Este 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 mostram como determinar as solicitações restantes e como responder quando o limite é atingido, e também se aplicam ao Resource Graph. No entanto, o Resource Graph define seu próprio limite e sua taxa de redefinição. Para saber mais, veja Cabeçalho de limitação do Resource Graph.

Outros provedores de recursos

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

Código do erro

Quando você alcança o limite, recebe o código de status HTTP 429 Excesso de solicitações. A resposta inclui o valor Retry-After, que especifica o número de segundos que o aplicativo deve aguardar (ou ficar suspenso) antes de enviar a próxima solicitação. Se você enviar uma solicitação antes que o valor de repetição seja decorrido, 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 poderá ter uma configuração de repetição automática. Para saber mais, veja Diretrizes de repetição para serviços do Azure.

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

Solicitações restantes

Você pode determinar o número de solicitações restantes ao examinar 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 em busca desses valores:

Cabeçalho de resposta Descrição
x-ms-ratelimit-remaining-subscription-deletes Gravações no escopo da assinatura restantes. Esse valor é retornado em operações de exclusão.
x-ms-ratelimit-remaining-subscription-reads Leituras no escopo da assinatura restantes. Esse valor é retornado em operações de leitura.
x-ms-ratelimit-remaining-subscription-writes Gravações no escopo da assinatura restantes. Esse valor é retornado em operações de gravação.
x-ms-ratelimit-remaining-tenant-reads Leituras no escopo do locatário restantes
x-ms-ratelimit-remaining-tenant-writes Gravações no escopo do locatário restantes
x-ms-ratelimit-remaining-subscription-resource-requests Solicitações de tipo de recurso no escopo da assinatura restantes.

Este 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 coletas de tipo de recurso no escopo da assinatura restantes.

Este 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 (listar recursos).
x-ms-ratelimit-remaining-tenant-resource-requests Solicitações de tipo de recurso no escopo do locatário restantes.

Este cabeçalho só será 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 das leituras ou gravações do locatário.
x-ms-ratelimit-remaining-tenant-resource-entities-read Solicitações de coletas de tipo de recurso no escopo do locatário restantes.

Este cabeçalho só será 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 devolver cabeçalhos de resposta com informações sobre as solicitações restantes. Para obter informações sobre cabeçalhos de resposta devolvidos pelo provedor de recursos de computação, veja Cabeçalhos de resposta informativo da taxa de chamada.

Recuperar os valores de cabeçalho

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

Por exemplo, em C#, recupere o valor de cabeçalho de um objeto HttpWebResponse chamado response com o código a seguir:

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

No PowerShell, você recupera o valor de 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 um exemplo completo do PowerShell, consulte Verificar os limites do gerenciador de recursos para uma assinatura.

Se você deseja ver as solicitações restantes de depuração, forneça o parâmetro -Debug no 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 valores a seguir:

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 valores a seguir:

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 valores a seguir:

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óximas etapas