呼び出しレートをサブスクリプション別に制限する

適用対象: すべての API Management レベル

rate-limit ポリシーは、指定期間あたりの呼び出しレートを指定数に制限することで、サブスクリプションごとに API 使用量の急増を防ぎます。 この呼び出しレートを超えると、呼び出し元は 429 Too Many Requests 応答状態コードを受信します。

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

注意事項

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

Note

ポリシーの要素と子要素を、ポリシー ステートメントで指定された順序で設定します。 API Management ポリシーを設定または編集する方法について説明します。

ポリシー ステートメント

<rate-limit calls="number" renewal-period="seconds"  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">
    <api name="API name" id="API id" calls="number" renewal-period="seconds" >
        <operation name="operation name" id="operation id" calls="number" renewal-period="seconds" />
    </api>
</rate-limit>

属性

属性 説明 必要 Default
calls renewal-period で指定された期間中に許可される最大の呼び出し合計数。 ポリシー式は使用できません。 はい 該当なし
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 製品内の API に対して呼び出しレート制限をかけるには、これらの要素を 1 つまたは複数追加します。 製品と API の呼び出しレート制限は別々に適用されます。 API は name または id のいずれかによって参照できます。 両方の属性が提供された場合、id が使用されて name は無視されます。 いいえ
操作 API 内の操作に対して呼び出しレート制限をかけるには、これらの要素を 1 つまたは複数追加します。 製品、API、および操作の呼び出しレート制限は別々に適用されます。 操作は name または id のいずれかによって参照できます。 両方の属性が提供された場合、id が使用されて name は無視されます。 いいえ

api の属性

属性 説明 必要 Default
name レート制限の適用対象になる API の名前。 nameid のいずれかを指定する必要があります。 該当なし
id レート制限の適用対象になる API の ID。 nameid のいずれかを指定する必要があります。 該当なし
calls renewal-period で指定された期間中に許可される最大の呼び出し合計数。 ポリシー式は使用できません。 はい 該当なし
renewal-period 許可された要求の数が、calls で指定された値を超えてはならないスライディング ウィンドウの長さ (秒単位)。 許可される最大値: 300 秒。 ポリシー式は使用できません。 はい 該当なし

operation の属性

属性 説明 必要 Default
name レート制限の適用対象になる操作の名前。 nameid のいずれかを指定する必要があります。 該当なし
id レート制限の適用対象になる操作の ID。 nameid のいずれかを指定する必要があります。 該当なし
calls renewal-period で指定された期間中に許可される最大の呼び出し合計数。 ポリシー式は使用できません。 はい 該当なし
renewal-period 許可された要求の数が、calls で指定された値を超えてはならないスライディング ウィンドウの長さ (秒単位)。 許可される最大値: 300 秒。 ポリシー式は使用できません。 はい 該当なし

使用法

使用上の注意

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

次の例では、サブスクリプションあたりのレート上限が 90 秒ごとに 20 回です。 ポリシーを実行するたびに、その期間内に許可されている残りの呼び出しが変数 remainingCallsPerSubscription に格納されます。

<policies>
    <inbound>
        <base />
        <rate-limit calls="20" renewal-period="90" remaining-calls-variable-name="remainingCallsPerSubscription"/>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

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