翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 スロットリングタイプ
リクエストレート制限
リクエストレートを制限すると、それぞれ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などのすべてのDescribeRouteTables
SearchTransitGatewayRoutes
アクションが含まれますGetIpamPoolCidrs
。これらのAPIアクションは通常、APIスロットリング制限が最も高くなります。 -
フィルタリングされていないアクションとページ分割されていない非変更アクション — ページ分割またはフィルター を指定せずにリクエストされた場合、より小さなトークンバケットのトークンを使用する、非変更APIアクションの特定のサブセット。ページ分割とフィルタリングを使用して、トークンが標準 (より大きな) トークンバケットから差し引かれるようにすることをお勧めします。
-
ミューテーションアクション — リソースを作成、変更、または削除するAPIアクション。このカテゴリには、通常、、、 など
AllocateHosts
ModifyHosts
、非変更APIアクション として分類されていないすべてのアクションが含まれます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 |
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 アカウント。
この機能へのアクセスをリクエストするには
-
AWS Support センター
を開きます。 -
[ケースを作成] を選択します。
-
[Account and billing] (アカウントおよび請求) を選択します。
-
サービス では、全般情報 と入門 を選択します。
-
カテゴリ では、「 の使用 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
と入力します。次の情報も含めてください。ユースケースの説明。
引き上げが必要なリージョン。
ピークスロットリングまたは使用量が発生した (新しいスロットリング制限を計算するため) の UTC1 時間ウィンドウ。
-
[次のステップ: 今すぐ解決またはお問い合わせ] を選択します。
-
Contact us タブで、希望する問い合わせ言語と問い合わせ方法を選択します。
-
[送信] を選択します。