本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EC2 API 的請求限流
Amazon EC2 會根據區域調節每個 AWS 帳戶的 EC2 API 請求。我們這樣做是為了協助服務的效能,並確保所有 Amazon EC2 客戶的公平使用。調節可確保對 Amazon EC2 API 的請求不超過允許的 API 請求限制上限。API 請求受請求限制的約束,無論其來源是:
-
第三方應用程式
-
命令列工具
-
Amazon EC2 主控台
如果您超過 API 限流限制,您會收到RequestLimitExceeded
錯誤碼。
如何套用限流
Amazon EC2 使用字符儲存貯體演算法
Amazon EC2 實作兩種類型的 API 限流:
請求率限制
使用請求速率限制時,每個 API 都會個別評估,而且您根據每個 API 提出的請求數量受到限流。您提出的每個請求都會從 API 的儲存貯體中移除一個權杖。例如,DescribeHosts
非變動 API 動作 的字符儲存貯體大小為 100 個字符。一秒內最多可以提出 100 個DescribeHosts
請求。如果您在一秒內超過 100 個請求,則會對該 API 進行調節,而該秒內剩餘的請求會失敗,不過,對其他 API 的請求不會受到影響。
儲存貯體會自動以設定的速率重新填充。如果儲存貯體低於容量上限,則每秒會新增一組字符數量,直到達到容量上限為止。如果補充字符送達時儲存貯體已滿,則會捨棄它們。儲存貯體不能保留超過其字符數量上限。例如,DescribeHosts
非變動 API 動作的 儲存貯體大小為 100 個字符,而重新填充速率為每秒 20 個字符。如果您在一秒內提出 100 個DescribeHosts
請求,儲存貯體會減少為零 (0) 個字符。然後,儲存貯體每秒會重新填充 20 個字符,直到達到 100 個字符的最大容量為止。這表示如果在此期間沒有提出任何請求,空儲存貯體會在 5 秒後達到其最大容量。
您不需要等待儲存貯體完全填滿,即可提出 API 請求。您可以使用新增至儲存貯體的重新填充字符。如果您立即使用重新填充字符,儲存貯體不會達到其容量上限。例如,DescribeHosts
非變動 API 動作的 儲存貯體大小為 100 個字符,而重新填充速率為每秒 20 個字符。如果您在一秒內提出 100 個 API 請求以耗盡儲存貯體,則可以使用新增至儲存貯體的重新填充字符,繼續每秒提出 20 個 API 請求。只有在每秒提出少於 20 個 API 請求時,儲存貯體才能重新填充至最大容量。
如需詳細資訊,請參閱請求字符儲存貯體大小和重新填充率。
資源速率限制
如下表所述TerminateInstances
,某些 API 動作,例如 RunInstances
和 ,除了請求速率限制之外,還使用資源速率限制。這些 API 動作具有單獨的資源字符儲存貯體,根據受請求影響的資源數量耗盡。與請求字符儲存貯體一樣,資源字符儲存貯體具有可讓您爆量的儲存貯體上限,以及可讓您視需要維持穩定請求速率的重新填充速率。如果您超過 API 的特定儲存貯體限制,包括當儲存貯體尚未重新填充以支援下一個 API 請求時,即使您尚未達到總 API 節流限制,API 的動作也會受到限制。
例如, 的資源字符儲存貯體大小RunInstances
為 1000 個字符,而重新填充速率為每秒兩個字符。因此,您可以使用任意數量的 API 請求立即啟動 1000 個執行個體,例如 1 個請求的 1000 個執行個體,或 4 個請求的 250 個執行個體。在資源字符儲存貯體為空之後,您可以每秒啟動最多兩個執行個體,針對兩個執行個體使用一個請求,或針對一個執行個體使用兩個請求。
如需詳細資訊,請參閱資源字符儲存貯體大小和重新填充率。
請求字符儲存貯體大小和重新填充率
為了限制請求率,API 動作會分組為下列類別:
-
非變動動作 — 擷取資源相關資料的 API 動作。此類別通常包含所有
Describe*
、Search*
、List*
和Get*
API 動作,例如DescribeRouteTables
、SearchTransitGatewayRoutes
和GetIpamPoolCidrs
。這些 API 動作通常具有最高的 API 限流限制。 -
未篩選和未分頁的非變動動作 — 非變動 API 動作的特定子集,在未指定分頁或篩選條件的情況下,使用較小的字符儲存貯體中的字符。建議您使用分頁和篩選,以便從標準 (大型) 字符儲存貯體中扣除字符。
-
變動動作 — 建立、修改或刪除資源的 API 動作。此類別通常包含未分類為非變動動作的所有 API 動作,例如
AllocateHosts
、ModifyHosts
和CreateCapacityReservation
。這些動作的限流限制低於非變動 API 動作。 -
資源密集型動作 — 將花費最多時間且耗用最多資源的 API 動作進行轉換。相較於變動動作,這些動作的限流限制甚至更低。它們與其他變動動作分開調節。
-
主控台非變動動作 — 從 Amazon EC2 主控台請求的非變動 API 動作。這些 API 動作會與其他非變動 API 動作分開調節。
-
未分類的動作 — 這些是接收自己的字符儲存貯體大小和重新填充率的 API 動作,即使根據定義,它們適合其他類別之一。
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 |
AssociateCapacityReservationBillingOwner |
1 | 0.5 |
AssociateEnclaveCertificateIamRole |
10 | 1 |
AssociateIamInstanceProfile |
100 | 5 |
AssociateNatGatewayAddress |
10 | 1 |
AttachVerifiedAccessTrustProvider |
10 | 2 |
AuthorizeClientVpnIngress |
5 | 2 |
CancelDeclarativePoliciesReport |
1 | 1 |
CopyImage |
100 | 1 |
CreateClientVpnRoute |
5 | 2 |
CreateCoipCidr |
5 | 1 |
CreateCoipPool |
5 | 1 |
CreateDefaultSubnet |
1 | 1 |
CreateDefaultVpc |
1 | 1 |
CreateLaunchTemplateVersion |
100 | 5 |
CreateNatGateway |
10 | 1 |
CreateNetworkInterface |
100 | 5 |
CreateRestoreImageTask |
50 | 0.1 |
CreateSnapshot |
100 | 5 |
CreateSnapshots |
100 | 5 |
CreateSpotDatafeedSubscription |
50 | 3 |
CreateStoreImageTask |
50 | 0.1 |
CreateSubnetCidrReservation |
5 | 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 |
DeleteClientVpnRoute |
5 | 2 |
DeleteCoipCidr |
5 | 1 |
DeleteCoipPool |
5 | 1 |
DeleteCoipPoolPermission |
5 | 1 |
DeleteNatGateway |
10 | 1 |
DeleteNetworkInterface |
100 | 5 |
DeleteSnapshot |
100 | 5 |
DeleteSpotDatafeedSubscription |
50 | 3 |
DeleteSubnetCidrReservation |
5 | 1 |
DeleteQueuedReservedInstances |
5 | 5 |
DeleteTags |
100 | 10 |
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 |
DescribeAggregateIdFormat |
10 | 10 |
DescribeByoipCidrs |
1 | 0.5 |
DescribeCapacityBlockExtensionOfferings |
10 | 0.15 |
DescribeCapacityBlockOfferings |
10 | 0.15 |
DescribeDeclarativePoliciesReports |
5 | 5 |
DescribeHostReservations |
5 | 2 |
DescribeHostReservationOfferings |
5 | 2 |
DescribeIdentityIdFormat |
10 | 10 |
DescribeIdFormat |
10 | 10 |
DescribeInstanceTopology |
1 | 1 |
DescribeMovingAddresses |
1 | 1 |
DescribePrincipalIdFormat |
10 | 10 |
DescribeReservedInstancesOfferings |
10 | 10 |
DescribeSecurityGroupReferences |
20 | 5 |
DescribeSpotDatafeedSubscription |
100 | 13 |
DescribeSpotFleetInstances |
100 | 5 |
DescribeSpotFleetRequestHistory |
100 | 5 |
DescribeSpotFleetRequests |
50 | 3 |
DescribeStaleSecurityGroups |
20 | 5 |
DescribeStoreImageTasks |
50 | 0.5 |
DescribeVerifiedAccessInstanceLoggingConfigurations |
10 | 2 |
DetachVerifiedAccessTrustProvider |
10 | 2 |
DisableFastLaunch |
5 | 2 |
DisableImageBlockPublicAccess |
1 | 0.1 |
DisableSnapshotBlockPublicAccess |
1 | 0.1 |
DisassociateCapacityReservationBillingOwner |
1 | 0.5 |
DisassociateEnclaveCertificateIamRole |
10 | 1 |
DisassociateIamInstanceProfile |
100 | 5 |
DisassociateNatGatewayAddress |
10 | 1 |
EnableFastLaunch |
5 | 2 |
EnableImageBlockPublicAccess |
1 | 0.1 |
EnableSnapshotBlockPublicAccess |
1 | 0.1 |
GetAssociatedEnclaveCertificateIamRoles |
10 | 1 |
GetDeclarativePoliciesReportSummary |
5 | 5 |
GetHostReservationPurchasePreview |
5 | 2 |
ModifyImageAttribute |
100 | 5 |
ModifyInstanceMetadataDefaults |
2 | 2 |
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 |
PurchaseCapacityBlockExtension |
10 | 0.15 |
PurchaseHostReservation |
5 | 2 |
PurchaseReservedInstancesOffering |
5 | 5 |
RejectVpcEndpointConnections |
10 | 1 |
RestoreAddressToClassic |
1 | 1 |
RevokeClientVpnIngress |
5 | 2 |
RunInstances |
5 | 2 |
StartDeclarativePoliciesReport |
1 | 1 |
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 來監控 Amazon EC2 API 請求,以及收集和追蹤 API 限流的相關指標。您也可以建立警示,在接近 API 限流限制時提醒您。如需詳細資訊,請參閱使用 Amazon CloudWatch 監控 Amazon EC2 API 請求 Amazon CloudWatch。
重試和指數退避
您的應用程式可能需要重試 API 請求。例如:
-
檢查資源狀態的更新
-
列舉大量資源 (例如,所有磁碟區)
-
在伺服器錯誤 (5xx) 或限流錯誤失敗後重試請求
不過,對於用戶端錯誤 (4xx),您必須先修改請求以修正問題,然後再嘗試請求。
資源狀態變更
在您開始輪詢以檢查狀態更新之前,請給予可能完成的請求時間。例如,請等待幾分鐘,然後檢查您的執行個體是否處於作用中狀態。當您開始輪詢時,請在連續請求之間使用適當的休眠間隔,以降低 API 請求的速率。為了獲得最佳結果,請使用較長或可變的休眠間隔。
或者,您可以使用 Amazon EventBridge 來通知您一些資源的狀態。例如,您可以使用 EC2 執行個體狀態變更通知事件來通知您執行個體的狀態變更。如需詳細資訊,請參閱使用 EventBridge 自動化 Amazon EC2。
重試
當您需要輪詢或重試 API 請求時,我們建議您使用指數退避演算法來計算 API 請求之間的睡眠間隔。指數退避的背後概念是,對於連續錯誤回應,讓重試之間的等待時間漸進拉長。您應該實作延遲間隔上限,以及重試次數上限。您也可以使用抖動 (隨機延遲) 來防止連續的碰撞。如需詳細資訊,請參閱逾時、重試和抖動退避
每個 AWS SDK 都會實作自動重試邏輯。如需詳細資訊,請參閱 AWS SDKs和工具參考指南中的重試行為。
請求 提高限制
您可以請求提高 的 API 限流限制 AWS 帳戶。
建議
-
在單一請求中請求您現有限制的最多三倍。
-
在增加儲存貯體容量上限之前,優先提高儲存貯體重新填充率。
-
如果請求的儲存貯體重新填充率超過儲存貯體容量上限,請同時增加儲存貯體容量上限。
-
提供需要增加的所有 API 動作。限制會套用至個別 API 動作,而非 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/ec2/latest/devguide/ec2-api-throttling.html Description:
Brief notes about your use case. If available, include the IDs of a few Amazon EC2 requests that were throttled.
Time window:One-hour window when peak throttling or usage occurred.
region_1
increases:action
:new_bucket_maximum_capacity
action
:new_bucket_refill_rate
action
:new_bucket_maximum_capacity
|new_bucket_refill_rate
region_2
increases:action
:new_bucket_maximum_capacity
action
:new_bucket_refill_rate
action
:new_bucket_maximum_capacity
|new_bucket_refill_rate
-
選擇下一步驟:立即解決或聯絡我們。
-
在聯絡我們索引標籤上,選擇您偏好的聯絡語言和聯絡方式。
-
選擇提交。