Azure API Management でレート制限を実装する方法

レート制限を使用すると、特定の期間内にユーザーまたはサービスが実行できる API 呼び出しの数を制限できます。 レート制限は、公平な使用を保証し、単一のユーザーまたはサービスが API リソースを独占するのを防ぐのに役立ちます。 Azure API Management (APIM) には、API のレート制限を実装するための便利な方法が用意されています。

Azure API Managementの理由

Azure API Managementは、組織が外部、パートナー、および内部開発者に API を発行するのに役立つ、強力で汎用性の高いクラウド サービスです。 API 呼び出しをセキュリティで保護、管理、スケーリングするためのツールが用意されています。 その機能の 1 つは、API の正常性と信頼性を維持するために役立つレート制限を制御することです。

Azure API Management でレート制限を構成する

Azure API Managementでは、ポリシーを使用してレート制限を適用します。 これらのポリシーは、グローバル、製品、または API 固有のさまざまなスコープで定義できます。 この柔軟性により、API の要件と使用パターンに応じてレート制限を調整できます。

レート制限の実装を開始する前に、レート制限を決定します。 設定する制限は、API の容量と予想されるトラフィックによって異なります。 一般的な制限は、1 秒、分、または 1 時間あたりの呼び出し数として設定されます。 たとえば、ユーザーごとに 1 分あたり 1000 回の呼び出しを許可できます。

Azure API Management で API のレート制限を定義するには、 または rate-limit-by-key ポリシーをrate-limit使用します。 前者はすべてのユーザーに制限を設定しますが、後者では特定されたキー (サブスクリプションやユーザー ID など) ごとの制限が許可されます。

呼び出しを 1 分あたり 1000 に制限するポリシーの例を次に示します。

<policies>
  <inbound>
    <base />
    <rate-limit calls="1000" renewal-period="60" />
  </inbound>
  <backend>
    <base />
  </backend>
  <outbound>
    <base />
  </outbound>
  <on-error>
    <base />
  </on-error>
</policies>

指定した呼び出し数を超えると、Azure API Managementは 429 要求数が多すぎる状態コードとretry-after、応答ヘッダーと、再試行できるタイミングを示すメッセージを送信します。

HTTP/1.1 429 Too Many Requests
content-type: application/json
retry-after: 60
    
{
  "statusCode": 429,
  "message": "Rate limit is exceeded. Try again in 60 seconds."
}

応答ヘッダーのレート制限情報を公開する

既定では、Azure API Management では応答ヘッダーのレート制限情報は公開されません。 レート制限を通信しないと、アプリが制限を超え、調整されないようにするのが困難になります。 レート制限情報を公開するには、 プロパティと total-calls-header-name プロパティを使用してrate-limitポリシーをremaining-calls-header-name拡張します。

<policies>
  <inbound>
    <base />
    <rate-limit calls="1000" renewal-period="60" remaining-calls-header-name="ratelimit-remaining" total-calls-header-name="ratelimit-limit" />
  </inbound>
  <backend>
    <base />
  </backend>
  <outbound>
    <base />
  </outbound>
  <on-error>
    <base />
  </on-error>
</policies>

ここで API を呼び出すと、各応答に ヘッダーと ratelimit-limit ヘッダーが含まれますratelimit-remaining。これは、制限を超える前に API が処理できる呼び出しの数を伝えます。

まとめ

Azure API Managementでレート制限を実装すると、堅牢でスケーラブルな API を作成するのに役立ちます。 レート制限を使用することで、API がユーザーに確実かつ効率的にサービスを提供できるようにします。 重要なのは、適切なバランスを見つけることです。厳密すぎると、使いやすさが妨げられる可能性があります。が少なすぎるため、API を圧倒するリスクがあります。 慎重な計画と継続的な監視により、このバランスを取り、正常な API 環境を維持できます。

次の手順