次の方法で共有


クイック スタート: 要求レートの制限を設定する

Note

BasicStandard、および Enterprise プランは、2025 年 3 月中旬から廃止され、3 年間の提供終了期間となります。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の提供終了のお知らせ」を参照してください。

Standard 従量課金プランと専用プランは、2024 年 9 月 30 日以降は非推奨となり、6 か月後に完全にシャットダウンされます。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の Standard 従量課金プランと専用プランを Azure Container Apps に移行する」を参照してください。

この記事の適用対象:❌ Basic または Standard ✔️ Enterprise

このクイックスタートでは、Azure Spring Apps Enterprise プランで Spring Cloud Gateway を使用して要求レートの制限を設定する方法について説明します。

レート制限を使用すると、トラフィックの急増に伴う問題を回避できます。 要求レートの制限を設定すると、アプリケーションで過剰な要求を拒否できます。 この構成は、調整エラーを最小限に抑え、スループットをより正確に予測するのに役立ちます。

前提条件

要求レートの制限を設定する

Spring Cloud Gateway には、オープン ソース バージョンからのルート フィルターと、その他のいくつかのルート フィルターが含まれています。 これらのフィルターの 1 つが、RateLimit: ユーザー要求を制限するフィルターです。 RateLimit フィルターは、時間枠内のルートごとに許可される要求の数を制限します。

ルートを定義するときに、ルートのフィルターの一覧に含めることで RateLimit フィルターを追加できます。 このフィルターは、次の 4 つのオプションを受け入れます。

  • ウィンドウ中に受け入れる要求の数。
  • ウィンドウの期間。 この値は既定ではミリ秒単位ですが、sm、または h のサフィックスを指定して、値が秒、分、または時間であることを示すことができます。
  • (省略可能) ユーザー パーティション キー。 ユーザーごとのレート制限を適用することもできます。 つまり、要求で見つかる識別子に基づいて、それぞれのユーザーに独自のスループットを許可できます。 claim または header 構文を使用して、キーが JWT 要求または HTTP ヘッダーのいずれに含まれているかを示します。
  • (省略可能) IP アドレスごとにレート制限を設定できますが、ユーザーごとのレート制限と組み合わせることはできません。

次の例では、/products ルートへの要求をすべてのユーザーで 5 秒ごとに 2 つに制限します。

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s"
    ]
}

ユーザーの異なるセット (それぞれ独自 client_id の HTTP ヘッダーで識別) に対してルートを公開する場合は、次のルート定義を使用します。

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s,{header:client_id}"
    ]
}

制限を超えると、応答は 429 Too Many Requests 状態で失敗します。

次のコマンドを使用して、/products ルートに RateLimit フィルターを適用します。

az spring gateway route-config update \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --name catalog-routes \
    --app-name catalog-service \
    --routes-file azure-spring-apps-enterprise/resources/json/routes/catalog-service_rate-limit.json

次のコマンドを使用して、Spring Cloud Gateway の /products ルートの URL を取得します。

export GATEWAY_URL=$(az spring gateway show \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')

echo "https://${GATEWAY_URL}/products"

5 秒以内に /products の URL に対して複数の要求を行って、要求が 429 Too Many Requests 状態で失敗することを確認します。

リソースをクリーンアップする

後続のクイック スタートおよびチュートリアルを引き続き実行する場合は、これらのリソースをそのまま残しておくことができます。 不要になったら、リソース グループを削除します。これにより、リソース グループ内のリソースが削除されます。 Azure CLI を使用してリソース グループを削除するには、次のコマンドを使用します。

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

次のステップ

次のいずれかの省略可能なクイックスタートに進みます: