本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
请求对 Amazon 进行限制 EC2 API
Amazon EC2 会根据每个区域限制对每个 AWS 账户的EC2API请求。我们这样做是为了帮助提高服务的性能,并确保所有亚马逊EC2买家都能公平使用。限制可确保向 Amazon 发出的请求EC2API不超过允许的最大API请求限制。API无论请求来自以下来源,均受请求限制的约束:
-
第三方应用程序
-
命令行工具
-
亚马逊EC2控制台
如果您超过了API限制限制,则会收到RequestLimitExceeded
错误代码。
如何应用节流
Amazon EC2 使用令牌存储桶算法
Amazon EC2 实施了两种类型的API限制:
请求速率限制
通过请求速率限制,将对每个API请求进行单独评估,并且您会根据每个请求的数量进行限制。API您发出的每个请求都会从API的存储桶中移除一个令牌。例如,非变异API操作的令牌存储桶大小为 100 个令牌。DescribeHosts
一秒钟内您最多可以发出 100 个DescribeHosts
请求。如果您在一秒钟内超过 100 个请求,则会受到限制,API而该秒内剩余的请求将失败,但是,其他请求不会API受到影响。
存储桶会以设定的速率自动填充。如果存储桶低于其最大容量,则每秒向其添加一定数量的令牌,直到其达到最大容量。如果充值令牌到达时桶已满,则它们将被丢弃。存储桶容纳的代币数量不能超过其最大数量。例如,非变异API操作的存储桶大小为 100 个代币,充值速率为每秒 20 个代币。DescribeHosts
如果您在一秒钟内发出 100 个DescribeHosts
请求,则存储桶将减少为零 (0) 个令牌。然后,该存储桶每秒充满 20 个令牌,直到其最大容量达到 100 个令牌。这意味着,如果空存储桶在 5 秒钟内没有发出任何请求,则该存储桶将在 5 秒钟后达到其最大容量。
您无需等到存储桶完全装满后即可提出API请求。您可以在将充值令牌添加到存储桶时使用它们。如果您立即使用充值令牌,则存储桶无法达到其最大容量。例如,非变异API操作的存储桶大小为 100 个代币,充值速率为每秒 20 个代币。DescribeHosts
如果您通过在一秒钟内发出 100 个API请求来耗尽存储桶,则可以在向存储桶添加时使用充值令牌继续每秒发出 20 个API请求。只有当您每秒发出的API请求少于 20 个时,存储桶才能重新填充到最大容量。
资源速率限制
某些API操作(例如RunInstances
和)TerminateInstances
,如下表所述,除了请求速率限制外,还使用资源速率限制。这些API操作有一个单独的资源令牌存储桶,该存储桶会根据受请求影响的资源数量而耗尽。与请求令牌存储桶一样,资源令牌存储桶的最大存储桶允许您进行爆发,而填充速率则允许您在需要的时间内保持稳定的请求速率。如果您超过了的特定存储桶限制API,包括尚未为支持下一个API请求而重新填充存储分区,API则即使您尚未达到总限制限制,其操作也会受到API限制。
例如,的资源令牌存储桶大小RunInstances
为 1000 个令牌,填充速率为每秒两个令牌。因此,您可以使用任意数量的API请求立即启动 1000 个实例,例如一个针对 1000 个实例的请求或针对 250 个实例的四个请求。资源令牌存储桶为空后,您最多可以每秒启动两个实例,对两个实例使用一个请求或对一个实例使用两个请求。
有关更多信息,请参阅 资源令牌桶大小和充值率。
节流限制
以下各节描述了请求令牌存储桶和资源令牌存储桶的大小以及填充率。
请求代币桶大小和充值率
出于限制请求速率的目的,API操作分为以下几类:
-
非变异API操作 — 检索资源相关数据的操作。此类别通常包括所有
Describe*
List*
、Search*
、和Get*
API操作,例如DescribeRouteTables
SearchTransitGatewayRoutes
、和GetIpamPoolCidrs
。这些API操作通常具有最高的API限制限制。 -
未经过滤和未分页的非变异操作 — 非变API异操作的特定子集,当请求时未指定分页或过滤器时,使用较小的令牌桶中的令牌。建议您使用分页和筛选功能,以便从标准(较大的)令牌桶中扣除代币。
-
变更API操作 — 创建、修改或删除资源的操作。此类别通常包括所有API未归类为非变异操作的操作,例如
AllocateHosts
ModifyHosts
、和。CreateCapacityReservation
这些操作的限制限制低于非API变异操作。 -
资源密集型操作 — 修改需要最长时间、消耗最多资源的API操作才能完成。与变异操作相比,这些操作的限制还要低。它们与其他变异动作是分开进行限制的。
-
控制台非变更操作 — 从 Amazon 控制台API请求的非变异操作。EC2这些API操作与其他非API变异操作是分开限制的。
-
未分类的操作 — 这些API操作会获得自己的代币桶大小和充值率,尽管顾名思义,它们属于其他类别之一。
下表显示了所有 AWS 地区的请求令牌存储桶大小和充值率。
API动作类别 | 操作 | 存储桶最大容量 | 水桶填充率 |
---|---|---|---|
非变异动作 |
所有 |
100 | 20 |
未经过滤和未分页的非变异动作 |
|
50 | 10 |
变异动作 | 所有非资源密集型API操作或未分类操作的变异操作。 |
50 | 5 |
资源密集型行动 |
|
50 | 5 |
控制台非变异动作 |
|
100 | 10 |
未分类的操作 | AcceptVpcEndpointConnections |
10 | 1 |
AdvertiseByoipCidr |
1 | 0.1 | |
AssignIpv6Addresses |
100 | 5 | |
AssignPrivateIpAddresses |
100 | 5 | |
AssignPrivateNatGatewayAddress |
10 | 1 | |
AssociateEnclaveCertificateIamRole |
10 | 1 | |
AssociateIamInstanceProfile |
100 | 5 | |
AssociateNatGatewayAddress |
10 | 1 | |
AttachVerifiedAccessTrustProvider |
10 | 2 | |
CreateDefaultSubnet |
1 | 1 | |
CreateDefaultVpc |
1 | 1 | |
CopyImage |
100 | 1 | |
CreateLaunchTemplateVersion |
100 | 5 | |
CreateNatGateway |
10 | 1 | |
CreateNetworkInterface |
100 | 5 | |
CreateRestoreImageTask |
50 | 0.1 | |
CreateSnapshot |
100 | 5 | |
CreateSnapshots |
100 | 5 | |
CreateStoreImageTask |
50 | 0.1 | |
CreateTags |
100 | 10 | |
CreateVerifiedAccessEndpoint |
20 | 4 | |
CreateVerifiedAccessGroup |
10 | 2 | |
CreateVerifiedAccessInstance |
10 | 2 | |
CreateVerifiedAccessTrustProvider |
10 | 2 | |
CreateVolume |
100 | 5 | |
CreateVpcEndpoint |
4 | 0.3 | |
CreateVpcEndpointServiceConfiguration |
10 | 1 | |
DeleteNatGateway |
10 | 1 | |
DeleteNetworkInterface |
100 | 5 | |
DeleteSnapshot |
100 | 5 | |
DeleteTags |
100 | 10 | |
DeleteQueuedReservedInstances |
5 | 5 | |
DeleteVerifiedAccessEndpoint |
20 | 4 | |
DeleteVerifiedAccessGroup |
10 | 2 | |
DeleteVerifiedAccessInstance |
10 | 2 | |
DeleteVerifiedAccessTrustProvider |
10 | 2 | |
DeleteVolume |
100 | 5 | |
DeleteVpcEndpoints |
4 | 0.3 | |
DeleteVpcEndpointServiceConfigurations |
10 | 1 | |
DeprovisionByoipCidr |
1 | 0.1 | |
DeregisterImage |
100 | 5 | |
DetachVerifiedAccessTrustProvider |
10 | 2 | |
DescribeByoipCidrs |
1 | 0.5 | |
DescribeCapacityBlockOfferings |
10 | 0.15 | |
DescribeInstanceTopology |
1 | 1 | |
DescribeMovingAddresses |
1 | 1 | |
DescribeReservedInstancesOfferings |
10 | 10 | |
DescribeSpotFleetRequestHistory |
100 | 5 | |
DescribeSpotFleetInstances |
100 | 5 | |
DescribeSpotFleetRequests |
50 | 3 | |
DescribeStoreImageTasks |
50 | 0.5 | |
DescribeVerifiedAccessInstanceLoggingConfigurations |
10 | 2 | |
DisableFastLaunch |
5 | 2 | |
DisableImageBlockPublicAccess |
1 | 0.1 | |
DisableSnapshotBlockPublicAccess |
1 | 0.1 | |
DisassociateEnclaveCertificateIamRole |
10 | 1 | |
DisassociateIamInstanceProfile |
100 | 5 | |
DisassociateNatGatewayAddress |
10 | 1 | |
EnableFastLaunch |
5 | 2 | |
EnableImageBlockPublicAccess |
1 | 0.1 | |
EnableSnapshotBlockPublicAccess |
1 | 0.1 | |
GetAssociatedEnclaveCertificateIamRoles |
10 | 1 | |
ModifyImageAttribute |
100 | 5 | |
ModifyInstanceMetadataOptions |
100 | 5 | |
ModifyLaunchTemplate |
100 | 5 | |
ModifyNetworkInterfaceAttribute |
100 | 5 | |
ModifySnapshotAttribute |
100 | 5 | |
ModifyVerifiedAccessEndpoint |
20 | 4 | |
ModifyVerifiedAccessEndpointPolicy |
20 | 4 | |
ModifyVerifiedAccessGroup |
10 | 2 | |
ModifyVerifiedAccessGroupPolicy |
20 | 4 | |
ModifyVerifiedAccessInstance |
10 | 2 | |
ModifyVerifiedAccessInstanceLoggingConfiguration |
10 | 2 | |
ModifyVerifiedAccessTrustProvider |
10 | 2 | |
ModifyVpcEndpoint |
4 | 0.3 | |
ModifyVpcEndpointServiceConfiguration |
10 | 1 | |
MoveAddressToVpc |
1 | 1 | |
ProvisionByoipCidr |
1 | 0.1 | |
PurchaseCapacityBlock |
10 | 0.15 | |
PurchaseReservedInstancesOffering |
5 | 5 | |
RejectVpcEndpointConnections |
10 | 1 | |
RestoreAddressToClassic |
1 | 1 | |
RunInstances |
5 | 2 | |
StartInstances |
5 | 2 | |
TerminateInstances |
100 | 5 | |
UnassignPrivateIpAddresses |
100 | 5 | |
UnassignPrivateNatGatewayAddress |
10 | 1 | |
WithdrawByoipCidr |
1 | 0.1 |
资源令牌桶大小和充值率
下表列出了使用资源速率限制的API操作的资源令牌存储桶大小和充值率。
API行动 | 存储桶最大容量 | 水桶填充率 |
---|---|---|
RunInstances |
1000 | 2 |
TerminateInstances |
1000 | 20 |
StartInstances |
1000 | 2 |
StopInstances |
1000 | 20 |
显示器API限制
您可以使用Amazon CloudWatch 来监控您的亚马逊EC2API请求,并收集和跟踪有关API限制的指标。您还可以创建警报,在接近API限流限制时向您发出警报。有关更多信息,请参阅 使用亚马逊监控亚马逊的EC2API请求 CloudWatch。
重试和指数退缩
您的应用程序可能需要重试API请求。例如:
-
检查资源状态是否有更新
-
枚举大量资源(例如,您的所有卷)
-
在请求因服务器错误 (5xx) 或限制错误而失败后重试请求
但是,对于客户端错误 (4xx),您必须先修改请求以更正问题,然后再尝试请求。
资源状态更改
在开始轮询以检查状态更新之前,请留出可能完成的请求时间。例如,等待几分钟,然后再检查您的实例是否处于活动状态。开始轮询时,请在连续请求之间使用适当的睡眠间隔来降低API请求速率。为了获得最佳的效果,请使用递增或可变的睡眠间隔。
或者,您可以使用 Amazon EventBridge 通知您某些资源的状态。例如,您可以使用EC2实例状态更改通知事件来通知您实例的状态变化。有关更多信息,请参阅EC2使用自动化 Amazon EventBridge。
重试
当您需要轮询或重试API请求时,我们建议使用指数退避算法来计算请求之间的睡眠间隔。API指数回退的原理是对于连续错误响应,重试等待间隔越来越长。您应该实施最长延迟间隔和最大重试次数。您也可以使用抖动(随机延迟)来防止连续的碰撞。有关更多信息,请参阅超时、重试和回退并抖动
每个都 AWS SDK实现了自动重试逻辑。有关更多信息,请参阅《工具参考指南》AWS SDKs和《工具参考指南》中的重试行为。
请求提高限制
您可以申请提高您的API限制限制。 AWS 账户
请求访问此功能
-
选择创建案例。
-
选择账户和账单。
-
对于 “服务”,选择 “一般信息” 和 “入门”。
-
在 “类别” 中,选择 “使用 AWS 和服务”。
-
选择 Next step: Additional information(下一步:其他信息)。
-
对于 Subject (主题),请输入
Request an increase in my Amazon EC2 API throttling limits
。 -
对于描述,输入
Please increase the API throttling limits for my account. Related page: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/throttling.html
。还包括以下信息:您的使用案例的描述。
您需要加薪的地区。
出现峰值限制或使用量的一小时窗口(用于计算新的限制限制)。UTC
-
选择下一步:立即解决或联系我们。
-
在 “联系我们” 选项卡上,选择您的首选联系语言和联系方式。
-
选择提交。