APIゲートウェイ・バック・エンドへのリクエストの数の制限

リクエスト・ポリシーを使用して、APIゲートウェイでバックエンド・サービスに送信されるリクエスト数を制限する方法について学習します。

APIゲートウェイを作成し、1つ以上のAPIをデプロイした後で、通常、APIクライアントがバックエンド・サービスにリクエストを作成できるレートを制限します。たとえば、次のためです:

  • 過剰なリクエストからバック・エンドを保護することにより、高可用性およびリソースの公平な使用を維持
  • サービス拒否攻撃の防止
  • リソース使用量のコストの制約
  • APIを収益化するための使用の顧客のユーザーによる制限

APIデプロイメント仕様のすべてのルートにグローバルにレート制限を適用します。

レート制限を超えているためにリクエストが拒否された場合は、リクエストが再試行されるタイミングがレスポンス・ヘッダーで指定されます。

リクエスト・ポリシーを使用して、リクエストの数を制限します(APIデプロイメント仕様へのリクエスト・ポリシーとレスポンス・ポリシーの追加を参照)。

次を実行して、APIデプロイメント仕様にレート制限リクエスト・ポリシーを追加できます:

  • コンソールの使用
  • JSONファイルの編集

コンソールを使用したレート制限リクエスト・ポリシーの追加

コンソールを使用してAPIデプロイメント仕様にレート制限リクエスト・ポリシーを追加するには:

  1. コンソールを使用してAPIデプロイメントを作成または更新し、「最初から」オプションを選択して、「基本情報」ページで詳細を入力します。

    詳細は、APIデプロイメントの作成によるAPIゲートウェイへのAPIのデプロイおよびAPIゲートウェイまたはAPIデプロイメントの更新を参照してください。

  2. 「基本情報」ページの「APIリクエスト・ポリシー」セクションで、「レート制限」の横にある「追加」ボタンをクリックし、次を指定します:

    • リクエスト数/秒: APIデプロイメントに送信する1秒当たりの最大数。
    • レート制限のタイプ: 1秒当たりの最大リクエスト数のしきい値の適用方法。最大数を、任意の1つのAPIクライアント(IPアドレスで識別)から送信されたリクエスト数に適用するか、すべてのAPIクライアントから送信されたリクエストの総数に適用するかを指定できます。
  3. 「変更の保存」をクリックします。

  4. 「次へ」をクリックし、「認証」ページで認証オプションを指定します。

    認証オプションの詳細は、APIデプロイメントへの認証と認可の追加を参照してください。

  5. 「次」をクリックして、「ルート」ページのAPIデプロイメント内の個々のルートの詳細を入力します。APIデプロイメント仕様では、個々のルートにレート制限ポリシーを適用できないことに注意してください。

  6. 「次」をクリックして、APIデプロイメント用に入力した詳細を確認します。
  7. APIデプロイメントを作成または更新するには、「作成」または「変更の保存」をクリックします。
  8. (オプション) コールしてAPIが正常にデプロイされていることを確認します(APIゲートウェイにデプロイされたAPIのコールを参照)。

JSONファイルの編集によるレート制限リクエスト・ポリシーの追加

JSONファイルのAPIデプロイメント仕様にレート制限リクエスト・ポリシーを追加するには:

  1. 任意の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"
          }
        }
      ]
    }
  2. routesセクションの前にrequestPoliciesセクションを挿入します(まだ存在しない場合)。例:

    {
      "requestPolicies": {},													
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  3. 次の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_IPTOTALです。
    • <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"
          }
        }
      ]
    }
  4. APIデプロイメント仕様を含むJSONファイルを保存します。
  5. APIデプロイメント仕様は、次の方法でAPIデプロイメントを作成または更新するときに使用します:

    • 「既存のAPIのアップロード」オプションを選択して、コンソールでJSONファイルを指定します
    • APIゲートウェイREST APIへのリクエストでJSONファイルを指定します

    詳細は、APIデプロイメントの作成によるAPIゲートウェイへのAPIのデプロイおよびAPIゲートウェイまたはAPIデプロイメントの更新を参照してください。

  6. (オプション) コールしてAPIが正常にデプロイされていることを確認します(APIゲートウェイにデプロイされたAPIのコールを参照)。