クイック スタート: 要求レートの制限を設定する
Note
Basic、Standard、および 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 を使用して要求レートの制限を設定する方法について説明します。
レート制限を使用すると、トラフィックの急増に伴う問題を回避できます。 要求レートの制限を設定すると、アプリケーションで過剰な要求を拒否できます。 この構成は、調整エラーを最小限に抑え、スループットをより正確に予測するのに役立ちます。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Azure Marketplace の Enterprise プランの「要件」セクションを理解し、要件を満たします。
- Azure CLI バージョン 2.45.0 以降。
- Git.
- jq
- Azure Spring Apps Enterprise プランの拡張機能。 次のコマンドを使用して、以前のバージョンを削除し、最新の Enterprise プランの拡張機能をインストールします。 以前に
spring-cloud
拡張機能をインストールした場合は、構成とバージョンの不一致を回避するためにそれをアンインストールします。az extension add --upgrade --name spring az extension remove --name spring-cloud
- 「Enterprise プランを使用してアプリをビルドし Azure Spring Apps にデプロイする」の手順を完了します。
要求レートの制限を設定する
Spring Cloud Gateway には、オープン ソース バージョンからのルート フィルターと、その他のいくつかのルート フィルターが含まれています。 これらのフィルターの 1 つが、RateLimit: ユーザー要求を制限するフィルターです。 RateLimit フィルターは、時間枠内のルートごとに許可される要求の数を制限します。
ルートを定義するときに、ルートのフィルターの一覧に含めることで RateLimit フィルターを追加できます。 このフィルターは、次の 4 つのオプションを受け入れます。
- ウィンドウ中に受け入れる要求の数。
- ウィンドウの期間。 この値は既定ではミリ秒単位ですが、s、m、または 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 ..."
次のステップ
次のいずれかの省略可能なクイックスタートに進みます: