スケール セットを作成するときに、実行する VM インスタンスの数を定義します。 アプリケーションの需要の変化に応じて、VM インスタンスの数を自動的に増減することができます。 自動スケールにより、顧客のニーズに対応したり、アプリのライフサイクル全体でアプリケーション パフォーマンスの変化に対応したりできます。 このチュートリアルで学習する内容は次のとおりです。
- スケール セットの自動スケールを使用する
- 自動スケール ルールを作成および使用する
- CPU 負荷をシミュレートして自動スケール ルールをトリガーする
- 需要の変化に応じて自動スケール アクションを監視する
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
前提条件
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
- このチュートリアルには、Azure CLI のバージョン 2.0.32 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。
スケール セットを作成する
az group create を使用して、リソース グループを作成します。
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export REGION="WestUS2"
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_SUFFIX"
az group create --name $MY_RESOURCE_GROUP_NAME --___location $REGION
ここでは、az vmss create を使用して仮想マシン スケール セットを作成します。 次の例では、インスタンス数が 2 のスケール セットを作成し、SSH キーが存在しない場合は生成し、有効なイメージ Ubuntu2204 を使用します。
export MY_SCALE_SET_NAME="myScaleSet$RANDOM_SUFFIX"
az vmss create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_SCALE_SET_NAME \
--image Ubuntu2204 \
--orchestration-mode Flexible \
--instance-count 2 \
--admin-username azureuser \
--generate-ssh-keys
自動スケール プロファイルの定義
スケール セットで自動スケールを有効にするには、最初に自動スケール プロファイルを定義します。 このプロファイルでは、スケール セット容量の既定値、最小値、および最大値が定義されます。 これらの制限により、VM インスタンスが継続的に作成されないようにしてコストを制御し、許容されるパフォーマンスと、スケールイン イベントに残るインスタンスの最小数のバランスをとることができます。 az monitor autoscale create を使用して、自動スケール プロファイルを作成します。 次の例では、2 つの VM インスタンスの既定の容量と最小容量を設定し、最大 10 個を設定します。
az monitor autoscale create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--resource $MY_SCALE_SET_NAME \
--resource-type Microsoft.Compute/virtualMachineScaleSets \
--name autoscale \
--min-count 2 \
--max-count 10 \
--count 2
自動スケールアウト ルールの作成
アプリケーションの需要が増加すると、スケール セット内の VM インスタンスに対する負荷が増加します。 この負荷の増加が短い需要ではなく一貫している場合は、VM インスタンスの数を増やすために自動スケール ルールを構成できます。 これらのインスタンスが作成され、アプリケーションがデプロイされると、スケール セットはロード バランサーを介してそれらにトラフィックを分散し始めます。 監視するメトリック、特定のしきい値を満たす必要がある負荷の長さ、追加する VM インスタンスの数を制御します。
5 分間の平均 CPU 負荷が 70% を超えたときに VM インスタンスの数を増やす ルールを az monitor 自動スケール ルール作成で作成 します。 ルールがトリガーされると、VM インスタンスの数が 3 つ増えます。
az monitor autoscale rule create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--autoscale-name autoscale \
--condition "Percentage CPU > 70 avg 5m" \
--scale out 3
自動スケールイン ルールの作成
アプリケーションの需要が減少すると、VM インスタンスの負荷が低下します。 この負荷の低下が一定期間にわたって持続する場合は、スケール セット内の VM インスタンスの数を減らすように自動スケール ルールを構成できます。 このスケールイン アクションは、現在の需要を満たすために必要なインスタンスの数のみを実行することで、コストを削減するのに役立ちます。
5 分間に平均 CPU 負荷が 30% を下回った場合に VM インスタンスの数を減らす、 az monitor 自動スケーリング ルール作成 を使用して別のルールを作成します。 次の例では、VM インスタンスの数を 1 つずつスケーリングします。
az monitor autoscale rule create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--autoscale-name autoscale \
--condition "Percentage CPU < 30 avg 5m" \
--scale in 1
スケール セットでの CPU 負荷をシミュレートする
自動スケール ルールをテストするには、スケール セット内の VM インスタンスに対する持続的な CPU 負荷をシミュレートする必要があります。 この最小限のアプローチでは、組み込みの yes
コマンドを使用して CPU 負荷を生成することで、追加のパッケージをインストールしないようにします。 次のコマンドは、データを 60 秒間 /dev/null
に継続的に出力する 3 つのバックグラウンド プロセスを開始し、それらを終了します。
for i in {1..3}; do
yes > /dev/null &
done
sleep 60
pkill yes
このコマンドは、パッケージのインストール エラーを発生させずに CPU 負荷をシミュレートします。
アクティブな自動スケール ルールの監視
スケール セット内の VM インスタンスの数を監視するには、 watch
コマンドを使用します。 自動スケール ルールが CPU 負荷に応じてスケールアウト プロセスを開始するまでに最大 5 分かかる場合があります。 ただし、それが発生したら、 Ctrl + C キーを押してウォッチを終了できます。
その後、スケール セットは、需要に合わせて VM インスタンスの数を自動的に増やします。 次のコマンドは、スケール セット内の VM インスタンスの一覧を示しています。
az vmss list-instances \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_SCALE_SET_NAME \
--output table
CPU しきい値に達すると、自動スケール ルールによってスケール セット内の VM インスタンスの数が増えます。 新しいインスタンスが作成されると、出力に VM インスタンスの一覧が表示されます。
InstanceId LatestModelApplied Location Name ProvisioningState ResourceGroup VmId
------------ -------------------- ---------- --------------- ------------------- -------------------- ------------------------------------
1 True WestUS2 myScaleSet_1 Succeeded myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2 True WestUS2 myScaleSet_2 Succeeded myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
4 True WestUS2 myScaleSet_4 Creating myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5 True WestUS2 myScaleSet_5 Creating myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
6 True WestUS2 myScaleSet_6 Creating myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CPU 負荷が沈静化すると、平均 CPU 負荷は通常の状態に戻ります。 その 5 分後、自動スケール ルールによって VM インスタンスの数がスケールインされます。 スケールイン アクションでは、ID が最も高い VM インスタンスが最初に削除されます。 スケール セットで可用性セットまたは可用性ゾーンを使用する場合、スケールイン アクションは VM インスタンス間で均等に分散されます。 次の出力サンプルには、スケール セットの自動スケールインによって削除された 1 つの VM インスタンスが示されています。
6 True WestUS2 myScaleSet_6 Deleting myResourceGroupxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
リソースをクリーンアップする
スケール セットと関連するリソースを削除するには、任意の方法を使用してリソース グループを手動で削除してください。
次のステップ
このチュートリアルでは、Azure CLI を使用してスケール セットを自動的にスケールインまたはスケールアウトする方法について学習しました。
- スケール セットの自動スケールを使用する
- 自動スケール ルールを作成および使用する
- CPU 負荷をシミュレートして自動スケール ルールをトリガーする
- 需要の変化に応じて自動スケール アクションを監視する