Leer en inglés

Compartir a través de

了解 Azure 资源管理器如何限制请求

本文介绍 Azure 资源管理器如何限制请求。 介绍了如何在达到限制之前跟踪剩余的请求数,以及在达到限制时如何应对。

限制在两个级别发生。 Azure 资源管理器限制对订阅和租户的请求。 如果请求低于订阅和租户的限制,资源管理器会将该请求路由到资源提供程序。 资源提供程序可应用专为其操作定制的限制。

订阅和租户限制

每个订阅级别和租户级别的操作都收到限制的约束。 订阅请求是需要传递订阅 ID 的请求,例如在订阅中检索资源组。 例如,向 https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups?api-version=2022-01-01 发送请求是订阅级操作。 租户请求不包括您的订阅 ID,例如检索有效的 Azure 位置。 例如,向 https://management.chinacloudapi.cn/tenants?api-version=2022-01-01 中发送请求则是租户级操作。

下表显示了每小时的默认限制。

范围 操作 限制
订阅 读取 12000
订阅 删除 15000
订阅 写入 1200
租户 读取 12000
租户 写入 1200

这些限制的范围局限于发出请求的安全主体(用户或应用程序)以及订阅 ID 或租户 ID。 如果请求来自多个安全主体,则对订阅或租户的限制分别大于每小时 12,000 个和每小时 1,200 个。

这些限制适用于每个 Azure 资源管理器实例。 每个 Azure 区域中有多个实例,Azure 资源管理器将部署到所有 Azure 区域。 因此,实践中的限制要高于这些限制。 来自用户的请求通常由不同的 Azure 资源管理器实例进行处理。

其余请求在响应头值中返回。

资源供应商限制

资源提供程序可应用其自身的限制。 在每个订阅中,资源提供程序会限制请求中资源的每个区域。 由于资源管理器受资源管理器实例的限制,并且每个区域中有多个资源管理器实例,因此资源提供程序收到的请求数可能会超过上一部分的默认限制。

本部分讨论了一些广泛使用的资源提供程序的限制。

存储限制

仅当将 Azure 资源管理器与 Azure 存储和存储资源提供程序配合使用来执行管理操作时,以下限制才适用。 该限制适用于请求中资源的每个订阅的每个区域。

资源 限制
存储帐户管理操作数(读取) 每 5 分钟 800 次
存储帐户管理操作(写入) 每秒 10 次/每小时 1200 次
管理存储帐户操作(列表) 每 5 分钟 100 次

网络限制

Microsoft.Network 资源提供程序应用以下速率限制:

操作 限制
写入/删除 (PUT) 每 5 分钟 1000 次
读取 (GET) 每 5 分钟 10000 次

除了这些常规限制外,以下限制也适用于 DNS 操作:

DNS 区域操作 限制(每区域)
创建或更新 每分钟 40 个
删除 每分钟 40 个
获取 每分钟 1000 个
列出 每分钟 60 个
按资源组列表 每分钟 60 个
更新 每分钟 40 个
DNS 记录集操作 限制(每区域)
创建或更新 每分钟 200 个
删除 每分钟 200 个
获取 每分钟 2000 个
按 DNS 区域列出 每分钟 60 个
按类型列出 每分钟 60 次
更新 每分钟 200 个

计算限制

有关计算操作的限制的信息,请参阅排查 API 限制错误 - 计算

若要检查虚拟机规模集中的虚拟机实例,请使用虚拟机规模集操作。 例如,使用虚拟机规模集 VM - 列出和相应的参数来检查虚拟机实例的电源状态。 此 API 可减少请求数。

Azure Resource Graph 限制

Azure Resource Graph 会限制对其操作发出的请求数。 本文所述的用于确定剩余请求数以及在达到限制时如何采取应对措施的步骤同样适用于 Resource Graph。 但是,Resource Graph 设置了自身的限制和重置速率。 有关详细信息,请参阅 Resource Graph 限制标头

其他资源提供程序

有关其他资源提供程序中的限制的信息,请参阅:

错误代码

达到限制时,会收到 HTTP 状态代码“429 请求过多”。 响应包含 Retry-After 值,该值指定在发送下一个请求之前应用程序应该等待(或休眠)的秒数。 如果在重试值用尽之前发送请求,将不会处理该请求,并会返回一个新的重试值。

如果使用的是 Azure SDK,该 SDK 可能会采用自动重试配置。

某些资源提供程序返回 429 来报告暂时性问题。 该问题可能是一种过载状态,它不是由你的请求直接造成的。 或者,它可能表示目标资源或依赖资源的暂时性的状态错误。 例如,当目标资源被另一个操作锁定时,网络资源提供程序将返回 429 和 RetryableErrorDueToAnotherOperation 错误代码。 若要确定错误是由限流还是暂时性状况造成,请查看响应中的错误详细信息。

剩余请求

可以通过检查响应标头来确定剩余的请求数。 读取请求在标头中返回一个值,表示剩余读取请求的数目。 写入请求包含的值表示剩余写入请求的数目。 以下表格列出了您可以检查这些值的响应标头:

响应头 说明
x-ms-ratelimit-remaining-subscription-deletes 剩余的订阅范围删除数。 执行删除操作时返回此值。
x-ms-ratelimit-remaining-subscription-reads 剩余的订阅范围读取数。 执行读取操作时返回此值。
x-ms-ratelimit-remaining-subscription-writes 剩余的订阅范围写入数。 执行写入操作时返回此值。
x-ms-ratelimit-remaining-tenant-reads 租户范围的剩余读取数
x-ms-ratelimit-remaining-tenant-writes 租户范围的剩余写入数
x-ms-ratelimit-remaining-subscription-resource-requests 划归到订阅的剩余资源类型请求数。

仅当服务替代了默认限制时,才返回此标头值。 资源管理器将添加此值而不是订阅读取或写入数。
x-ms-ratelimit-remaining-subscription-resource-entities-read 划归到订阅的剩余资源类型集合请求数。

仅当服务替代了默认限制时,才返回此标头值。 此值提供剩余集合请求数(列出资源)。
x-ms-ratelimit-remaining-tenant-resource-requests 划归到租户的剩余资源类型请求数。

仅在租户级别,且仅当服务替代了默认限制时,为请求添加此标头。 Resource Manager 将添加这个值,而不是由租户进行读取或写入。
x-ms-ratelimit-remaining-tenant-resource-entities-read 剩余的租户范围资源类型集合请求数

仅在租户级别,且仅当服务替代了默认限制时,为请求添加此标头。

资源提供程序还可以返回包含剩余请求数相关信息的响应标头。 有关计算资源提供程序返回的响应标头的信息,请参阅调用速率信息响应标头

检索标头值

检索代码或脚本中的这些标头值与检索任何标头值没有什么不同。

例如,在 C# 中,可使用以下代码从名为 responseHttpWebResponse 对象中检索标头值:

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

PowerShell 中,可以从 Invoke-WebRequest 操作检索标头值。

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

有关完整的 PowerShell 示例,请参阅查看订阅的资源管理器限制

若要查看剩余请求数以进行调试,可在 PowerShell cmdlet 中提供 -Debug 参数。

Get-AzResourceGroup -Debug

这会返回许多值,包括以下响应值:

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

Status Code:
OK

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

若要获取写入限制,请使用写入操作:

New-AzResourceGroup -Name myresourcegroup -Location chinanorth -Debug

这会返回许多值,包括以下值:

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

Status Code:
Created

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

Azure CLI 中,可以使用更详细的选项检索标头值。

az group list --verbose --debug

这会返回许多值,包括以下值:

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'

若要获取写入限制,请使用写入操作:

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

这会返回许多值,包括以下值:

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'

后续步骤