本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為 Amazon 請求限流 EC2 API
Amazon 會根據每個區域對每個 AWS 帳戶的EC2API請求進行EC2限流。我們這樣做是為了協助服務的效能,並確保所有 Amazon EC2客戶都能享有公平的使用。限流可確保對 Amazon 的請求EC2API不超過允許的API請求限制上限。API 無論請求是源自於下列各項,請求都會受到請求限制的約束:
-
第三方應用程式
-
命令列工具
-
Amazon EC2主控台
如果您超過API限流限制,會收到RequestLimitExceeded
錯誤碼。
如何套用限流
Amazon API EC2使用權杖儲存貯體演算法
Amazon API EC2實作兩種限流:
請求率限制
透過限制請求率,每個 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*
、List*
、Search*
和Get*
API動作,例如DescribeRouteTables
、SearchTransitGatewayRoutes
和GetIpamPoolCidrs
。這些API動作通常具有最高的API限流限制。 -
未篩選和未分頁的非靜音動作 — 非靜音API動作的特定子集,在未指定分頁或篩選條件的情況下,使用較小的權杖儲存貯體中的權杖。建議您使用分頁和篩選,以便從標準 (大型) 權杖儲存貯體中扣除權杖。
-
轉換動作 — 建立、修改或刪除資源API的動作。此類別通常包含未分類為非靜音API動作 的所有動作,例如
AllocateHosts
、ModifyHosts
和CreateCapacityReservation
。 這些動作的限流限制低於非靜音API動作。 -
資源密集型動作 — 將花費最多時間並耗用最多資源完成API的動作相互轉換。相較於靜音動作 ,這些動作的限流限制甚至更低。它們與其他靜音動作 分開調節。
-
主控台非靜音動作 — 從 Amazon EC2主控台請求的非靜音API動作。這些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 監控您的 Amazon API EC2API請求,並收集和追蹤限流指標。您也可以建立警示,在接近API限流限制時提醒您。如需詳細資訊,請參閱使用 Amazon 監控 Amazon EC2API請求 CloudWatch。
重試和指數退避
您的應用程式可能需要重試API請求。例如:
-
檢查資源狀態的更新
-
列舉大量資源 (例如,所有磁碟區)
-
在請求失敗並出現伺服器錯誤 (5xx) 或限流錯誤後重試
不過,對於用戶端錯誤 (4xx),您必須先修改請求以修正問題,然後再嘗試請求。
資源狀態變更
在您開始輪詢以檢查狀態更新之前,請給出可能完成的請求時間。例如,請等待幾分鐘,再檢查執行個體是否處於作用中狀態。開始輪詢時,請在連續請求之間使用適當的睡眠間隔,以降低API請求速率。為了獲得最佳結果,請使用較長或可變的休眠間隔。
或者,您可以使用 Amazon EventBridge 通知您一些資源的狀態。例如,您可以使用EC2執行個體狀態變更通知事件來通知您執行個體的狀態變更。如需詳細資訊,請參閱EC2使用 自動化 Amazon EventBridge。
重試
當您需要輪詢或重試API請求時,我們建議您使用指數退避演算法來計算API請求之間的睡眠間隔。指數退避的背後概念是,對於連續錯誤回應,讓重試之間的等待時間漸進拉長。您應該實作延遲間隔上限,以及重試次數上限。您也可以使用抖動 (隨機延遲) 來防止連續的衝突。如需詳細資訊,請參閱使用抖動 逾時、重試和退避
每個 AWS SDK 都會實作自動重試邏輯。如需詳細資訊,請參閱 AWS SDKs和 工具參考指南 中的重試行為。
請求 提高限制
您可以請求增加 API 的限流限制 AWS 帳戶。
請求存取此功能
-
開啟AWS Support 中心
。 -
選擇建立案例。
-
選擇 帳戶和帳單。
-
針對服務 ,選擇一般資訊 和入門 。
-
針對類別 ,選擇使用 AWS 和服務 。
-
選擇 Next step: Additional information (下一步:其他資訊)。
-
對於 Subject (主旨),請輸入
Request an increase in my Amazon EC2 API throttling limits
。 -
對於 Description (說明),輸入
Please increase the API throttling limits for my account. Related page: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/throttling.html
。也包含下列資訊:您的使用案例的描述。
您需要增加的區域。
尖峰限流或使用發生時 (計算新的限流限制)UTC,以 為單位的一小時時段。
-
選擇下一步驟:立即解決或聯絡我們。
-
在聯絡我們索引標籤上,選擇您偏好的聯絡語言和聯絡方法。
-
選擇提交。