本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 請求之間的睡眠間隔。指數退避的背後概念是,對於連續錯誤回應,讓重試之間的等待時間漸進拉長。您應該實作延遲間隔上限,以及重試次數上限。您也可以使用抖動 (隨機延遲) 來防止連續的碰撞。如需詳細資訊,請參閱 Timeouts, retries, and backoff with jitter
每個 AWS SDK 都會實作自動重試邏輯。如需詳細資訊,請參閱 AWS SDKs和工具參考指南中的重試行為。
檢視您目前的 API 限制
您可以使用 AWS 帳戶 Service Quotas 主控台檢視 的每個 Amazon EC2 API 動作的目前和預設限制。
配額與調節限制的關係
每個 API 節流限制都由兩個配額組成,這些配額共同定義爆量和持續請求率:
-
儲存貯體最大容量 — 決定您在爆量中可以提出的請求數量上限。這是您的爆量率。
-
儲存貯體重新填充率 — 決定每秒新增到儲存貯體的字符數量。這是您的持續速率。
範例:檢視 RunInstances 調節限制
若要檢視RunInstances限流限制,請搜尋 RunInstances。主控台會顯示:
-
RunInstances請求儲存貯體最大容量 — 例如 5 (爆量) -
RunInstances請求儲存貯體重新填充率 — 例如每秒 2 個 (持續)
這兩個配額一起定義了完整的RunInstances限流限制。
了解配額值
-
已套用帳戶層級配額值表示套用至您帳戶的任何配額覆寫。這是您目前的有效配額。
-
AWS 預設配額值表示預設 API 限流配額。
注意
任何配額調整最多需要 24 小時才會反映在 Service Quotas 主控台中。
檢視您目前的配額
-
在 https://https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/
開啟 Service Quotas 主控台。 -
搜尋 API 動作名稱 (例如
RunInstances) 和配額名稱模式,以尋找對應的配額項目。
下表說明配額名稱模式。
| 配額名稱模式 | 說明 |
|---|---|
{API_NAME} 請求儲存貯體容量上限 |
爆量率 — 可用的字符數量上限 |
{API_NAME} 請求儲存貯體重新填充率 |
持續速率 — 每秒新增的字符 |
{API_NAME} 未篩選的請求儲存貯體最大容量 |
爆量率 — 未篩選 (未分頁) 請求可用的字符數量上限 |
{API_NAME} 未篩選的請求儲存貯體重新填充率 |
持續速率 — 未篩選 (未分頁) 請求每秒新增的字符 |
請求 提高限制
您可以請求提高 的 API 限流限制 AWS 帳戶。
建議
-
在單一請求中請求您現有限制的最多三倍。
-
在增加儲存貯體最大容量之前,優先提高儲存貯體重新填充率。
-
如果請求的儲存貯體重新填充率超過儲存貯體容量上限,請同時增加儲存貯體容量上限。
-
提供需要增加的所有 API 動作。限制會套用至個別 API 動作,而非 API 動作類別。
-
下列 API 動作有請求率和資源率限制:
RunInstances、StopInstances、StartInstances和TerminateInstances。請務必指出應該增加哪些限制
請求存取此功能
-
開啟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_1request rate increases:action:new_bucket_maximum_capacityaction:new_bucket_refill_rateaction:new_bucket_maximum_capacity|new_bucket_refill_rateregion_1resource rate increases:action:new_bucket_maximum_capacityaction:new_bucket_refill_rateaction:new_bucket_maximum_capacity|new_bucket_refill_rateregion_2request rate increases:action:new_bucket_maximum_capacityaction:new_bucket_refill_rateaction:new_bucket_maximum_capacity|new_bucket_refill_rateregion_2resource rate increases:action:new_bucket_maximum_capacityaction:new_bucket_refill_rateaction:new_bucket_maximum_capacity|new_bucket_refill_rate -
選擇下一步驟:立即解決或聯絡我們。
-
在聯絡我們索引標籤上,選擇您偏好的聯絡語言和聯絡方式。
-
選擇提交。