為 Amazon 請求限流 EC2 API - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為 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動作,例如 DescribeRouteTablesSearchTransitGatewayRoutesGetIpamPoolCidrs。這些API動作通常具有最高的API限流限制。

  • 未篩選和未分頁的非靜音動作 — 非靜音API動作的特定子集,在未指定分頁篩選條件的情況下,使用較小的權杖儲存貯體中的權杖。建議您使用分頁和篩選,以便從標準 (大型) 權杖儲存貯體中扣除權杖。

  • 轉換動作 — 建立、修改或刪除資源API的動作。此類別通常包含未分類為非靜音API動作 的所有動作,例如 AllocateHostsModifyHostsCreateCapacityReservation這些動作的限流限制低於非靜音API動作。

  • 資源密集型動作 — 將花費最多時間並耗用最多資源完成API的動作相互轉換。相較於靜音動作 ,這些動作的限流限制甚至更低。它們與其他靜音動作 分開調節。

  • 主控台非靜音動作 — 從 Amazon EC2主控台請求的非靜音API動作。這些API動作與其他非靜音API動作分開限流。

  • 未分類的動作 — 這些API動作會接收自己的字符儲存貯體大小和補充率,即使根據定義,它們適合其他類別之一。

下表顯示所有 AWS 區域的請求權杖儲存貯體大小和補充率。

API 動作類別 動作 儲存貯體容量上限 儲存貯體補充速率
非靜音動作

所有未篩選和未分頁的非靜音Get*API動作或未分類動作 的 Describe* List*Search*、、 和 動作。

100 20
未篩選和未分頁的非靜音動作
  • DescribeInstances

  • DescribeInstanceStatus

  • DescribeNetworkInterfaces

  • DescribeSecurityGroups

  • DescribeSnapshots

  • DescribeSpotInstanceRequests

  • DescribeVolumes

50 10
靜音動作

所有非資源密集API型動作或未分類動作 的靜音動作

50 5
資源密集型動作
  • AcceptVpcPeeringConnection

  • AuthorizeSecurityGroupIngress

  • CancelSpotInstanceRequests

  • CreateKeyPair

  • CreateVpcPeeringConnection

  • DeleteVpcPeeringConnection

  • RejectVpcPeeringConnection

  • RevokeSecurityGroupIngress

  • RequestSpotInstances

50 5
主控台非靜音動作
  • Describe*

  • Get*

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 帳戶。

請求存取此功能
  1. 開啟AWS Support 中心

  2. 選擇建立案例

  3. 選擇 帳戶和帳單

  4. 針對服務 ,選擇一般資訊 和入門

  5. 針對類別 ,選擇使用 AWS 和服務

  6. 選擇 Next step: Additional information (下一步:其他資訊)。

  7. 對於 Subject (主旨),請輸入 Request an increase in my Amazon EC2 API throttling limits

  8. 對於 Description (說明),輸入 Please increase the API throttling limits for my account. Related page: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/throttling.html。也包含下列資訊:

    • 您的使用案例的描述。

    • 您需要增加的區域。

    • 尖峰限流或使用發生時 (計算新的限流限制)UTC,以 為單位的一小時時段。

  9. 選擇下一步驟:立即解決或聯絡我們

  10. 聯絡我們索引標籤上,選擇您偏好的聯絡語言和聯絡方法。

  11. 選擇提交