

# API Gateway のスループットを向上させるために REST API へのリクエストをスロットリングする
<a name="api-gateway-request-throttling"></a>

API のスロットリングおよびクォータを設定して、多すぎるリクエストで API の負荷が高くなりすぎないように保護できます。スロットルとクォータの両方はベストエフォートベースで適用されるため、これらは保証されたリクエスト上限ではなく、目標として考える必要があります。

API Gateway は、トークンバケットアルゴリズムを使用してトークンでリクエストをカウントし、API へのリクエストを調整します。特に API Gateway では、アカウントのすべての API に送信されるリクエストのレートとバーストをリージョンごとに検証します。トークンバケットアルゴリズムでは、これらの制限の事前定義されたオーバーランがバーストによって許可されますが、場合によっては、他の要因によって制限のオーバーランが発生することがあります。

リクエストの送信数がリクエストの定常レートおよびバーストを超えると、API Gateway はリクエストを調整を開始します。クライアントは、この時点で `429 Too Many Requests` エラーレスポンスを受け取ることがあります。このような例外をキャッチすると、クライアントは 失敗したリクエストをレート制限する方法で再送信できます。

API デベロッパーは、API の個々のステージまたはメソッドに目標制限を設定して、アカウントのすべての API にわたるパフォーマンス全体を向上させることができます。別の方法として、使用量プランを有効にして、指定したリクエストレートおよびクォータに基づいて、クライアントのリクエスト送信数でスロットリングを設定することもできます。

**Topics**
+ [API Gateway でスロットリング制限設定が適用される方法](#apigateway-how-throttling-limits-are-applied)
+ [リージョンごとのアカウントレベルのスロットリング](#apig-request-throttling-account-level-limits)
+ [使用量プランの API レベルとステージレベルのスロットリング目標の設定](#apigateway-api-level-throttling-in-usage-plan)
+ [ステージレベルのスロットリングターゲットの設定](#apigateway-stage-level-throttling)
+ [使用量プランのメソッドレベルのスロットリング目標の設定](#apigateway-method-level-throttling-in-usage-plan)

## API Gateway でスロットリング制限設定が適用される方法
<a name="apigateway-how-throttling-limits-are-applied"></a>

API のスロットリング設定とクォータ設定を構成する前に、API のスロットリング関連の設定のタイプと、API Gateway による設定の適用方法を理解しておくと役立ちます。

Amazon API Gateway のスロットリングに関連する設定には、4 つの基本的なタイプがあります。
+ AWS スロットリングの制限は、リージョン内のすべてのアカウントとクライアントに適用されます。**これらの制限設定は、リクエストが多すぎるために API —およびアカウント—が処理しきれなくなることを防ぎます。これらの制限は AWS によって設定され、お客様が変更することはできません。
+ アカウントごとの制限は、指定したリージョンのアカウント内のすべての API に適用されます。このアカウントレベルのレート制限は、申請に応じて引き上げることができます。API のタイムアウトが短く、ペイロードが小さい場合、高い制限を設定できます。リージョンごとのアカウントレベルのスロットリング制限の引き上げを申請するには、[AWS サポートセンター](https://console.aws.amazon.com/support/home#/)にお問い合わせください。詳細については、「[Amazon API Gateway のクォータ](limits.md)」を参照してください。これらの制限は、AWS スロットリングの制限以上に高くすることはできません。
+ API ごと、ステージごとのスロットリング制限は、ステージの API メソッドレベルで適用されます。すべてのメソッドに同じ設定を構成することも、メソッドごとに異なるスロットル設定を構成することもできます。これらの制限は、AWS スロットリングの制限以上に高くすることはできません。
+ *クライアントあたりのスロットリング制限*は、クライアント ID として使用プランに関連付けられた API キーを使用するクライアントに適用されます。これらの制限は、 アカウントごとの制限以上に高くすることはできません。

API Gateway は、スロットリング関連の設定を、次の順序で適用します。

1. [使用量プラン](api-gateway-create-usage-plans.md#api-gateway-usage-plan-create)で API ステージに設定した[クライアントあたり、またはメソッドあたりのスロットリング制限](#apigateway-method-level-throttling-in-usage-plan)

1. [API ステージに設定したメソッドあたりのスロットリング制限](set-up-stages.md#how-to-stage-settings)

1. [リージョンごとのアカウントレベルのスロットリング](#apig-request-throttling-account-level-limits)

1. AWS リージョンのスロットリング

## リージョンごとのアカウントレベルのスロットリング
<a name="apig-request-throttling-account-level-limits"></a>

API Gateway はデフォルトで、リージョンごとに AWS アカウント内のすべての API 全体で定常状態のリクエスト/秒 (RPS) を制限します。また、リージョンごとに AWS アカウント内のすべての API にわたってバースト (最大バケットサイズ) を制限します。API Gateway では、バースト制限は、API Gateway が `429 Too Many Requests` エラーレスポンスを返す前に処理する同時リクエスト送信の目標最大数を表します。スロットリングクォータの詳細については、「[Amazon API Gateway のクォータ](limits.md)」を参照してください。

## 使用量プランの API レベルとステージレベルのスロットリング目標の設定
<a name="apigateway-api-level-throttling-in-usage-plan"></a>

[使用量プラン](api-gateway-api-usage-plans.md)では、 API またはステージレベルでのすべてのメソッドのメソッドあたりのスロットリング目標を設定できます。*スロットリングレート*（1 秒あたりのリクエスト数）を指定できます。スロットリングレートとは、トークンバケットにトークンが追加されるレートです。また、トークンバケットの容量である*スロットリングバースト*を指定することもできます。

使用量プランを作成するには、AWS CLI、SDK、AWS マネジメントコンソール を使用できます。使用量プランを作成する方法の詳細については、「[API Gateway での REST API の使用量プランと API キー](api-gateway-api-usage-plans.md)」を参照してください。

## ステージレベルのスロットリングターゲットの設定
<a name="apigateway-stage-level-throttling"></a>

AWS CLI、SDK、および AWS マネジメントコンソール を使用して、ステージレベルのスロットリングターゲットを作成できます。

AWS マネジメントコンソール を使用してステージレベルのスロットリングターゲットを作成する方法の詳細については、「[ステージ設定の変更](set-up-stages.md#how-to-stage-settings)」を参照してください。AWS CLI を使用してステージレベルのスロットリングターゲットを作成する方法の詳細については、「[create-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-stage.html)」を参照してください。

## 使用量プランのメソッドレベルのスロットリング目標の設定
<a name="apigateway-method-level-throttling-in-usage-plan"></a>

[**使用量プラン**] で、[使用量プランを作成する](api-gateway-create-usage-plans.md#api-gateway-usage-plan-create) に示すように、メソッドレベルの追加のスロットリング目標を設定できます。これらは、API Gateway コンソールの、[**メソッドスロットリングの設定**] 設定で、`Resource=<resource>` 、`Method=<method>` を指定して設定されます。たとえば、[PetStore サンプル](api-gateway-create-api-step-by-step.md)に、`Resource=/pets`、`Method=GET` を指定できます。