呼び出しレートをキー別に制限する

適用対象: 開発者 | Basic | Basic v2 | Standard | Standard v2 | Premium

rate-limit-by-key ポリシーは、指定期間あたりの呼び出しレートを指定数に制限することで、キーごとに API 使用量の急増を防ぎます。 キーには任意の文字列値を設定でき、通常はポリシー式を使用して指定します。 必要に応じて増分条件を追加し、制限に対してカウントする要求を指定することもできます。 この呼び出しレートを超えると、呼び出し元は 429 Too Many Requests 応答状態コードを受信します。

レート上限とクォータの違いについては、レート上限とクォータに関するページを参照してください。

注意事項

スロットリングのアーキテクチャは分散型の性質のため、レートの制限は完全に正確ではありません。 許可される要求の構成された数と実際の数の差異は、要求のボリュームとレート、バックエンドの待ち時間、およびその他の要因によって異なります。

Note

ポリシーの要素と子要素を、ポリシー ステートメントで指定された順序で設定します。 このポリシーの構成に役立つ、ガイド付きのフォーム ベース エディターがポータルに用意されています。 API Management ポリシーを設定または編集する方法について説明します。

ポリシー ステートメント

<rate-limit-by-key calls="number"
                   renewal-period="seconds"
                   increment-condition="condition"
                   increment-count="number"
                   counter-key="key value" 
                   retry-after-header-name="custom header name, replaces default 'Retry-After'" 
                   retry-after-variable-name="policy expression variable name"
                   remaining-calls-header-name="header name"  
                   remaining-calls-variable-name="policy expression variable name"
                   total-calls-header-name="header name"/> 

属性

属性 説明 必要 Default
calls renewal-period で指定した期間中に許容する最大呼び出し総数。 ポリシー式を使用できます。 はい 該当なし
counter-key レート制限ポリシーに使用するキー。 キー値ごとに、ポリシーが構成されているすべてのスコープに対して 1 つのカウンターが使用されます。 ポリシー式を使用できます。 はい 該当なし
increment-condition レートに対して要求の件数をカウントするかどうかを指定するブール式 (true)。 ポリシー式を使用できます。 いいえ 該当なし
increment-count 要求ごとにカウンターを増やす数。 ポリシー式を使用できます。 いいえ 1
renewal-period 許可された要求の数が、calls で指定された値を超えてはならないスライディング ウィンドウの長さ (秒単位)。 許可される最大値: 300 秒。 ポリシー式を使用できます。 はい 該当なし
retry-after-header-name 値が指定された呼び出しレートを超えた後の推奨される再試行間隔 (秒単位) であるカスタム応答ヘッダーの名前。 ポリシー式は使用できません。 いいえ Retry-After
retry-after-variable-name 指定した呼び出しレートを超えた後の推奨される再試行間隔 (秒単位) を格納するポリシー式変数の名前。 ポリシー式は使用できません。 いいえ N/A
remaining-calls-header-name 各ポリシーの実行後の値が、renewal-period で指定された時間間隔に対して許可されている残りの呼び出しの数である応答ヘッダーの名前。 ポリシー式は使用できません。 いいえ 該当なし
remaining-calls-variable-name 各ポリシーの実行後に、renewal-period で指定された時間間隔に対して許可されている残りの呼び出しの数を格納する、ポリシー式変数の名前。 ポリシー式は使用できません。 いいえ 該当なし
total-calls-header-name 値が calls で指定された値である応答ヘッダーの名前。 ポリシー式は使用できません。 いいえ 該当なし

使用法

使用上の注意

  • セルフホステッド ゲートウェイのレート制限数は、Kubernetes の Helm グラフのデプロイや Azure portal デプロイ テンプレートの使用などにより、(クラスター ノード全体のゲートウェイ インスタンス間で) ローカルに同期するように構成できます。 ただし、レート制限数は、クラウドのマネージド ゲートウェイを含め、API Management インスタンスで構成されている他のゲートウェイ リソースと同期しません。 詳細情報

次の例では、60 秒ごとに 10 回のレート制限のキーに呼び出し元 IP を設定しています。 ポリシーを実行するたびに、その期間内に許可されている残りの呼び出しが変数 remainingCallsPerIP に格納されます。

<policies>
    <inbound>
        <base />
        <rate-limit-by-key  calls="10"
              renewal-period="60"
              increment-condition="@(context.Response.StatusCode == 200)"
              counter-key="@(context.Request.IpAddress)"
              remaining-calls-variable-name="remainingCallsPerIP"/>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

このポリシーの詳細と例については、「Azure API Management を使用した高度な要求スロットル」を参照してください。

ポリシーに対する処理の詳細については、次のトピックを参照してください。