クイックスタート: Azure Spring Apps Standard 従量課金および専用プランでアプリケーションの自動スケーリングを設定する
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 に移行する」を参照してください。
この記事の適用対象: ✔️ Standard 従量課金および専用 (プレビュー) ❌ Basic/Standard ❌ Enterprise
この記事では、Azure Spring Apps Standard 従量課金および専用プランでアプリケーションの自動スケーリング規則を設定する方法について説明します。 このプランでは、Azure Container Apps 環境を使用して Spring アプリケーションをホストし、次の管理とサポートを提供します。
- 宣言型スケーリング ルールのセットにより、自動水平スケーリングを管理します。
- Azure Container Apps でサポートされるすべてのスケーリング ルールをサポートします。
詳細については、Azure Container Apps のドキュメントを参照してください。
前提条件
- Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントをご確認ください。
- Azure Spring Apps Standard 従量課金および専用プラン サービス インスタンス。 詳細については、クイック スタート: Azure Spring Apps Standard 従量課金および専用プラン サービス インスタンスをプロビジョニングするに関する記事を参照してください。
- Azure Spring Apps にデプロイされた Spring アプリ。
スケール定義
スケーリングは、制限とルールの組み合わせによって定義されます。
制限とは、Spring で許可されるインスタンスの最小数と最大数です。
スケールの制限 既定値 最小値 最大値 デプロイあたりのインスタンスの最小数 1 0 30 デプロイあたりのインスタンスの最大数 10 1 30 既定では、デプロイが常に実行されるように、Spring アプリケーションの最小インスタンス数は 1 に設定されています。 0 にスケールインする場合は、最小インスタンス数を 0 に設定できます。
ルールとは、インスタンスを追加または削除するために自動スケーリングが従う条件です。 スケールのルールには、「Azure Container Apps でスケーリング ルールを設定する」の「スケーリング ルール」セクションで説明されているように、HTTP、TCP、およびカスタムルールが含まれます。
複数のスケール ルールを定義すると、いずれかのルールの最初の条件が満たされたときに自動スケーリングが開始されます。
"ポーリング間隔" と "クールダウン期間" は、自動スケーリング中に発生する 2 つの期間です。
- ポーリング間隔は、ルールで定義されているリアルタイム データの各ポーリング アクション間の期間を定義します。 ポーリング間隔は、既定で 30 秒に設定されています。
- クールダウン期間は、0 にスケーリングする場合にのみ適用されます。たとえば、最後に自動スケーリングによってメッセージ キューがチェックされ、空だったときに 5 分待機します。
自動スケーリング設定を設定する
Azure portal または Azure CLI を使用して、アプリケーションの自動スケーリング設定を設定できます。
自動スケーリングの設定とルールを定義するには、次の手順に従います。
- Azure portal にサインインします。
- [Azure サービス] で [Azure Spring Apps] を選択します。
- [名前] 列で、自動スケーリングする Azure Spring Apps インスタンスを選択します。
- Azure Spring Apps インスタンスの概要ページで、ナビゲーション ペインの [アプリ] を選択します。
- 自動スケーリングするアプリケーションを選択します。
- 選択したアプリの概要ページで、ナビゲーション ペインの [スケールアウト] を選択します。
- [スケールアウト (プレビュー)] ページで、自動スケーリングするデプロイを選択します。
- デプロイのインスタンス制限を設定します。
- [追加] を選択してスケール ルールを追加します。
カスタム スケーリング ルール
カスタム 規則の定義については、「Keda スケーラー」をご覧ください。 次のセクションでは、MySQL と Cron にスケール ルールを設定する 2 つの例を示します。
MySQL データベースで自動スケーリングルールを設定する
次の CLI コマンドは、Keda MySQL Scaler をベースにして Spring アプリケーションを自動スケーリングする方法を示しています。 まず、SQL 接続文字列を格納するシークレットを作成します。 このシークレットは、スケール ルールの認証に使用されます。 次に、テーブルの行数に基づいてアプリをスケーリングするルールを設定します。
az spring app update \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-service-instance-name> \
--name <app-name> \
--secrets mysqlconnectionstring="<username>:<pwd>@tcp(<server name>:3306)/<database name>"
az spring app scale \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-service-instance-name> \
--name <app-name> \
--scale-rule-type mysql \
--scale-rule-name <your rule name> \
--scale-rule-auth "connectionString=mysqlconnectionstring" \
--scale-rule-metadata queryValue=4 query="SELECT count(*) FROM mytable" \
--min-replicas 0 \
--max-replicas 3
Linux cron をベースにしてルールを作成する
次のコマンドは、Keda Cron Scaler をベースにしてルールを設定する方法を示しています。 レプリカは、cron 時間間隔中に目的の数にスケーリングされます。
az spring app scale \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-service-instance-name> \
--name <app-name> \
--scale-rule-type cron \
--scale-rule-name testscalerule \
--scale-rule-metadata timezone="Asia/Shanghai" \
start="10 * * * *" \
end="15 * * * *" \
desiredReplicas="3" \
--min-replicas 0 \
--max-replicas 3
イベントのスケーリング
基になるコンテナー アプリのシステム ログからスケーリング イベントを見つけ、次の例に示すように KEDA
を使用して EventSource をフィルター処理できます。
ContainerAppSystemLogs_CL
| where ContainerAppName_s == 'YourAppName' and EventSource_s == 'KEDA'
リソースをクリーンアップする
この記事で作成したリソースは、不要になったら必ず削除してください。 リソースを削除するには、それらのリソースを含むリソース グループを削除するだけです。 リソース グループは、Azure portal を使用して削除できます。 また、Azure CLI を使用してリソース グループを削除するには、次のコマンドを使用します。
echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."