APIゲートウェイ・バック・エンドへのリクエストの数の制限
リクエスト・ポリシーを使用して、API Gatewayによりバックエンド・サービスに送信されるリクエスト数を制限する方法をご紹介します。
APIゲートウェイを作成し、1つ以上のAPIをデプロイした後で、通常、APIクライアントがバックエンド・サービスにリクエストを作成できるレートを制限します。たとえば、次のためです:
- 過剰なリクエストからバック・エンドを保護することにより、高可用性およびリソースの公平な使用を維持
- サービス拒否攻撃の防止
- リソース使用量のコストの制約
- APIを収益化するための使用の顧客のユーザーによる制限
APIデプロイメント仕様のすべてのルートにグローバルにレート制限を適用します。
レート制限を超えているためにリクエストが拒否された場合は、リクエストが再試行されるタイミングがレスポンス・ヘッダーで指定されます。
リクエスト・ポリシーを使用して、リクエストの数を制限します(APIデプロイメント仕様へのリクエスト・ポリシーとレスポンス・ポリシーの追加を参照)。
次を実行して、APIデプロイメント仕様にレート制限リクエスト・ポリシーを追加できます:
- コンソールの使用
- JSONファイルの編集
コンソールを使用したレート制限リクエスト・ポリシーの追加
コンソールを使用してAPIデプロイメント仕様にレート制限リクエスト・ポリシーを追加するには:
-
コンソールを使用してAPIデプロイメントを作成し、「最初から」オプションを選択して、「基本情報」ページで詳細を入力します。
詳細は、APIデプロイメントの作成によるAPIゲートウェイへのAPIのデプロイおよびAPIゲートウェイの更新を参照してください。
-
「Basic Information」ページの「API Request Policies」セクションで、「Rate Limiting」の横にある「Add」ボタンを選択し、次を指定します:
- 1秒当たりのリクエスト数: APIデプロイメントに送信する1秒当たりのリクエストの最大数。
- レート制限のタイプ: 1秒当たりの最大リクエスト数のしきい値の適用方法。最大数を、任意の1つのAPIクライアント(IPアドレスで識別)から送信されたリクエスト数に適用するか、すべてのAPIクライアントから送信されたリクエストの総数に適用するかを指定できます。
-
「Save Changes」を選択します。
-
「次へ」を選択し、「認証」ページで認証オプションを指定します。
認証オプションの詳細は、APIデプロイメントへの認証と認可の追加を参照してください。
-
「次」を選択して、「ルート」ページのAPIデプロイメント内の個々のルートの詳細を入力します。APIデプロイメント仕様では、個々のルートにレート制限ポリシーを適用できないことに注意してください。
- 「次」を選択して、APIデプロイメント用に入力した詳細を確認します。
- APIデプロイメントを作成または更新するには、「作成」または「変更の保存」を選択します。
- (オプション) コールしてAPIが正常にデプロイされていることを確認します(APIゲートウェイにデプロイされたAPIのコールを参照)。
JSONファイルの編集によるレート制限リクエスト・ポリシーの追加
JSONファイルのAPIデプロイメント仕様にレート制限リクエスト・ポリシーを追加するには:
-
任意のJSONエディタを使用して、リクエスト制限を追加する既存のAPIデプロイメント仕様を編集するか、新しいAPIデプロイメント仕様を作成します(APIデプロイメント仕様の作成を参照)。
たとえば、次の基本的なAPIデプロイメント仕様では、OCI Functionsの単純なHello Worldサーバーレス・ファンクションを単一のバック・エンドとして定義しています:
{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
-
routes
セクションの前にrequestPolicies
セクションを挿入します(まだ存在しない場合)。例:{ "requestPolicies": {}, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
-
次の
rateLimiting
ポリシーを新しいrequestPolicies
セクションに追加して、仕様で定義されたすべてのルートに適用します:{ "requestPolicies": { "rateLimiting": { "rateKey": "<ratekey-value>", "rateInRequestsPerSecond": <requests-per-second> } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
ここでは:
<ratekey-value>
は、個々のAPIクライアント(それぞれのIPアドレスで識別)からのリクエストの数、またはバックエンド・サービスに送信されたリクエストの総数に、リクエストの最大数のしきい値を適用するかどうかを指定します。有効な値は、CLIENT_IP
とTOTAL
です。<requests-per-second>
は、APIデプロイメントに送信する1秒当たりの最大数です。
例:
{ "requestPolicies": { "rateLimiting": { "rateKey": "CLIENT_IP", "rateInRequestsPerSecond": 10 } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
- APIデプロイメント仕様を含むJSONファイルを保存します。
-
APIデプロイメント仕様は、次の方法でAPIデプロイメントを作成または更新するときに使用します:
- JSONファイルをコンソールで「既存のAPIのアップロード」オプションで指定します
- APIゲートウェイREST APIへのリクエストでJSONファイルを指定します
詳細は、APIデプロイメントの作成によるAPIゲートウェイへのAPIのデプロイおよびAPIゲートウェイの更新を参照してください。
- (オプション) コールしてAPIが正常にデプロイされていることを確認します(APIゲートウェイにデプロイされたAPIのコールを参照)。