次の方法で共有


クイックスタート: Azure Spring Apps Standard 従量課金および専用プランでアプリケーションの自動スケーリングを設定する

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 に移行する」を参照してください。

この記事の適用対象: ✔️ Standard 従量課金および専用 (プレビュー) ❌ Basic/Standard ❌ Enterprise

この記事では、Azure Spring Apps Standard 従量課金および専用プランでアプリケーションの自動スケーリング規則を設定する方法について説明します。 このプランでは、Azure Container Apps 環境を使用して Spring アプリケーションをホストし、次の管理とサポートを提供します。

  • 宣言型スケーリング ルールのセットにより、自動水平スケーリングを管理します。
  • Azure Container Apps でサポートされるすべてのスケーリング ルールをサポートします。

詳細については、Azure Container Apps のドキュメントを参照してください。

前提条件

スケール定義

スケーリングは、制限とルールの組み合わせによって定義されます。

  • 制限とは、Spring で許可されるインスタンスの最小数と最大数です。

    スケールの制限 既定値 最小値 最大値
    デプロイあたりのインスタンスの最小数 1 0 30
    デプロイあたりのインスタンスの最大数 10 1 30

    既定では、デプロイが常に実行されるように、Spring アプリケーションの最小インスタンス数は 1 に設定されています。 0 にスケールインする場合は、最小インスタンス数を 0 に設定できます。

  • ルールとは、インスタンスを追加または削除するために自動スケーリングが従う条件です。 スケールのルールには、「Azure Container Apps でスケーリング ルールを設定する」の「スケーリング ルール」セクションで説明されているように、HTTP、TCP、およびカスタムルールが含まれます。

    複数のスケール ルールを定義すると、いずれかのルールの最初の条件が満たされたときに自動スケーリングが開始されます。

  • "ポーリング間隔" と "クールダウン期間" は、自動スケーリング中に発生する 2 つの期間です。

    • ポーリング間隔は、ルールで定義されているリアルタイム データの各ポーリング アクション間の期間を定義します。 ポーリング間隔は、既定で 30 秒に設定されています。
    • クールダウン期間は、0 にスケーリングする場合にのみ適用されます。たとえば、最後に自動スケーリングによってメッセージ キューがチェックされ、空だったときに 5 分待機します。

自動スケーリング設定を設定する

Azure portal または Azure CLI を使用して、アプリケーションの自動スケーリング設定を設定できます。

自動スケーリングの設定とルールを定義するには、次の手順に従います。

  1. Azure portal にサインインします。
  2. [Azure サービス][Azure Spring Apps] を選択します。
  3. [名前] 列で、自動スケーリングする Azure Spring Apps インスタンスを選択します。
  4. Azure Spring Apps インスタンスの概要ページで、ナビゲーション ペインの [アプリ] を選択します。
  5. 自動スケーリングするアプリケーションを選択します。
  6. 選択したアプリの概要ページで、ナビゲーション ペインの [スケールアウト] を選択します。
  7. [スケールアウト (プレビュー)] ページで、自動スケーリングするデプロイを選択します。
  8. デプロイのインスタンス制限を設定します。
  9. [追加] を選択してスケール ルールを追加します。

Azure Spring Apps インスタンス内のアプリの [スケールアウト] ページを示す Azure portal プレビュー バージョンのスクリーンショット。

カスタム スケーリング ルール

カスタム 規則の定義については、「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 ..."

次の手順