次の方法で共有


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

適用対象: Developer | Basic | Basic v2 | Standard | Standard v2 | Premium | Premium v2

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 で指定された値である応答ヘッダーの名前。 ポリシー式は使用できません。 いいえ 該当なし

使用法

使用上の注意

  • API Management では、ポリシーで指定した counter-key 値ごとに 1 つのカウンターが使用されます。 このカウンターは、ポリシーがそのキー値で構成されているすべてのスコープで更新されます。 異なるスコープ (特定の API や製品など) で個別のカウンターを構成する場合は、異なるスコープで異なるキー値を指定します。 たとえば、式の値にスコープを識別する文字列を追加します。
  • セルフホステッド ゲートウェイのレート制限数は、Kubernetes の Helm グラフのデプロイや Azure portal デプロイ テンプレートの使用などにより、(クラスター ノード全体のゲートウェイ インスタンス間で) ローカルに同期するように構成できます。 ただし、レート制限数は、クラウドのマネージド ゲートウェイを含め、API Management インスタンスで構成されている他のゲートウェイ リソースと同期しません。 詳細情報

次の例では、60 秒ごとに 10 回のレート制限のキーに呼び出し元 IP を設定しています。 各ポリシーの実行後、その期間中にその呼び出し元 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 を使用した高度な要求スロットル」を参照してください。

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