呼び出しレートをキー別に制限する
適用対象: 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 で指定された値である応答ヘッダーの名前。 ポリシー式は使用できません。 |
いいえ | 該当なし |
使用法
- ポリシー セクション: inbound
- ポリシー スコープ: グローバル、ワークスペース、製品、API、操作
- ゲートウェイ: クラシック、v2、セルフホステッド、ワークスペース
使用上の注意
- 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 を使用した高度な要求スロットル」を参照してください。
関連ポリシー
関連するコンテンツ
ポリシーに対する処理の詳細については、次のトピックを参照してください。