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 は 2 種類のスロットリングEC2を実装しています。

リクエストレート制限

リクエストレートを制限すると、それぞれAPIが個別に評価され、1 回あたりのAPIリクエスト数に応じて調整されます。実行する各リクエストは、 APIのバケットから 1 つのトークンを削除します。例えば、非ミューテーションAPIアクションDescribeHostsである のトークンバケットサイズは 100 トークンです。1 秒あたり最大 100 件のDescribeHostsリクエストを作成できます。1 秒あたり 100 リクエストを超えるAPIと、そのリクエストに対してスロットリングされ、その 2 秒内の残りのリクエストは失敗しますが、他のリクエストAPIは影響を受けません。

バケットは設定されたレートで自動的に補充されます。バケットが最大容量を下回ると、最大容量に達するまで、設定された数のトークンが 1 秒ごとにバケットに追加されます。リフィルトークンが到着したときにバケットがいっぱいになると、バケットは破棄されます。バケットはトークンの最大数を超えて保持することはできません。例えば、非変更APIアクションDescribeHostsである のバケットサイズは 100 トークンで、リフィルレートは 20 トークン/秒です。1 秒間に 100 件のDescribeHostsリクエストを行うと、バケットはゼロ (0) トークンに減少します。その後、バケットは最大容量の 100 トークンに達するまで、1 秒あたり 20 トークン補充されます。つまり、空のバケットは、その間にリクエストが行われなかった場合、5 秒後に最大容量に達します。

API リクエストを行う前にバケットが完全にいっぱいになるまで待つ必要はありません。リフィルトークンは、バケットに追加する際に使用できます。すぐにリフィルトークンを使用すると、バケットは最大容量に達しません。例えば、非変更APIアクションDescribeHostsである のバケットサイズは 100 トークンで、リフィルレートは 20 トークン/秒です。1 秒あたり 100 件のAPIリクエストを実行してバケットを枯渇させた場合、バケットに追加されるリフィルトークンを使用して、1 秒あたり 20 件のAPIリクエストを引き続き実行できます。バケットは、1 秒あたり 20 件未満のAPIリクエストを行う場合にのみ、最大容量まで補充できます。

リソースレートの制限

RunInstances および などの一部のAPIアクションはTerminateInstances、次の表で説明するように、リクエストレート制限に加えてリソースレート制限を使用します。これらのAPIアクションには、リクエストの影響を受けるリソースの数に基づいて枯渇する個別のリソーストークンバケットがあります。リクエストトークンバケットと同様に、リソーストークンバケットにはバーストできるバケットの最大数と、必要に応じて一定レートのリクエストを維持できるリフィルレートがあります。次のAPIリクエストをサポートするためにバケットがまだ補充されていない場合などAPI、 の特定のバケット制限を超えた場合、APIスロットルの合計制限に達していない場合でも、 のアクションAPIは制限されます。

例えば、 のリソーストークンバケットサイズRunInstancesは 1000 トークンで、リフィルレートは 1 秒あたり 2 トークンです。したがって、1000 インスタンスに対する 1 つのAPIリクエストや 250 インスタンスに対する 4 つのリクエストなど、任意の数のリクエストを使用して、1000 インスタンスをすぐに起動できます。リソーストークンバケットが空になったら、2 つのインスタンスに対して 1 つのリクエスト、または 1 つのインスタンスに対して 2 つのリクエストを使用して、1 秒あたり最大 2 つのインスタンスを起動できます。

詳細については、「リソーストークンバケットのサイズとリフィルレート」を参照してください。

スロットリングの制限

以下のセクションでは、リクエストトークンバケットとリソーストークンバケットのサイズとリフィルレートについて説明します。

リクエストトークンバケットのサイズとリフィルレート

リクエストレート制限の目的で、APIアクションは次のカテゴリにグループ化されます。

  • 非変更アクション — リソースに関するデータを取得するAPIアクション。このカテゴリには、通常Describe*、、List*Search*、、 Get*APIなどのすべての DescribeRouteTablesSearchTransitGatewayRoutesアクションが含まれますGetIpamPoolCidrs。これらのAPIアクションは通常、APIスロットリング制限が最も高くなります。

  • フィルタリングされていないアクションとページ分割されていない非変更アクションページ分割またはフィルター を指定せずにリクエストされた場合、より小さなトークンバケットのトークンを使用する、非変更APIアクションの特定のサブセット。ページ分割とフィルタリングを使用して、トークンが標準 (より大きな) トークンバケットから差し引かれるようにすることをお勧めします。

  • ミューテーションアクション — リソースを作成、変更、または削除するAPIアクション。このカテゴリには、通常、、、 などAllocateHostsModifyHosts、非変更APIアクション として分類されていないすべてのアクションが含まれますCreateCapacityReservationこれらのアクションのスロットリング制限は、非ミューテーション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 1,000 2
TerminateInstances 1,000 20
StartInstances 1,000 2
StopInstances 1,000 20

API スロットリングをモニタリングする

Amazon を使用して Amazon EC2APIリクエストを CloudWatch モニタリングし、APIスロットリングに関するメトリクスを収集および追跡できます。また、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. [Account and billing] (アカウントおよび請求) を選択します。

  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と入力します。次の情報も含めてください。

    • ユースケースの説明。

    • 引き上げが必要なリージョン。

    • ピークスロットリングまたは使用量が発生した (新しいスロットリング制限を計算するため) の UTC1 時間ウィンドウ。

  9. [次のステップ: 今すぐ解決またはお問い合わせ] を選択します。

  10. Contact us タブで、希望する問い合わせ言語と問い合わせ方法を選択します。

  11. [送信] を選択します。