Azure 仮想マシン スケール セットでカスタム スケールイン ポリシーを使用する

仮想マシン スケール セットのデプロイは、プラットフォームのメトリックやユーザー定義のカスタム メトリックなどの、メトリックの配列に基づいて、スケールアウトまたはスケールインできます。 スケールアウトではスケール セット モデルに基づいて新しい仮想マシンが作成されるのに対し、スケールインでは、スケール セットのワークロードの変化に応じて、構成や機能が異なる可能性のある実行中の仮想マシンが調整されます。

スケールイン ポリシー機能を使用すると、ユーザーは、3 つのスケールイン構成によって、仮想マシンがスケールインされる順序を構成できます。

  1. Default
  2. NewestVM
  3. OldestVM

Default スケールイン ポリシー

フレキシブル オーケストレーション

このポリシーでは、可用性ゾーン間での分散が行われた後に仮想マシンがスケールインされます (スケール セットがゾーン構成の場合)。また、createdTime に基づく最も古い仮想マシンが最初にスケールインされます。 障害ドメイン間の分散は、フレキシブル オーケストレーション モードの既定のポリシーでは使用できません。

均一オーケストレーション

既定では、スケールインするインスタンスを決定するためにこのポリシーが仮想マシン スケール セットで適用されます。 Default ポリシーでは、次の順序で VM がスケールイン対象に選択されます。

  1. 可用性ゾーン間で仮想マシンを均衡させます (スケール セットがゾーン構成でデプロイされている場合)
  2. 障害ドメイン間で仮想マシンを均衡させます (ベスト エフォート)
  3. インスタンス ID が最も大きい仮想マシンを削除します

既定の順序に従うだけの場合、ユーザーはスケールイン ポリシーを指定する必要はありません。

可用性ゾーンまたは障害ドメイン間で分散しても、インスタンスは可用性ゾーンや障害ドメイン間で移動されません。 均衡は、仮想マシンの分散が均衡になるまで、不均衡な可用性ゾーンまたは障害ドメインから仮想マシンを削除することによって実現されます。

NewestVM スケールイン ポリシー

このポリシーでは、可用性ゾーン間で VM を分散した後 (ゾーン デプロイの場合) に、スケール セット内の最新の、または最近作成された仮想マシンが削除されます。 このポリシーを有効にするには、仮想マシン スケール セット モデルで構成を変更する必要があります。

OldestVM スケールイン ポリシー

このポリシーでは、可用性ゾーン間で VM が均衡された後 (ゾーン デプロイの場合)、スケール セット内で最も古く作成された仮想マシンが削除されます。 このポリシーを有効にするには、仮想マシン スケール セット モデルで構成を変更する必要があります。

スケールイン ポリシーを有効にする

スケールイン ポリシーは、仮想マシン スケール セット モデルで定義されています。 前のセクションで説明したように、''NewestVM'' および ''OldestVM'' ポリシーを使用する場合は、スケールイン ポリシー定義が必要です。 スケール セット モデルにスケールイン ポリシーの定義が見つからない場合、仮想マシン スケール セットでは "Default" スケールイン ポリシーが自動的に使用されます。

スケールイン ポリシーは、次の方法を使用して仮想マシン スケール セット モデルで定義できます。

Azure portal

次の手順で、新しいスケール セットを作成するときのスケールイン ポリシーを定義します。

  1. [仮想マシン スケール セット] に移動します。
  2. [+ 追加] を選択して、新しいスケール セットを作成します。
  3. [スケーリング] タブにアクセスします。
  4. [スケールイン ポリシー] セクションを見つけます。
  5. ドロップダウンからスケールイン ポリシーを選択します。
  6. 新しいスケール セットの作成が完了したら、[確認と作成] ボタンを選択します。

API の使用

API 2019-03-01 を使用して、仮想マシン スケール セットで PUT を実行します。

PUT
https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<myRG>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVMSS>?api-version=2019-03-01

{ 
"location": "<VMSS location>", 
    "properties": { 
        "scaleInPolicy": {  
            "rules": ["OldestVM"]  
        } 
    }    
} 

Azure PowerShell

重要

2023 年 11 月以降、PowerShell と Azure CLI を使用して作成された VM スケール セットは、オーケストレーション モードが指定されていない場合、既定でフレキシブル オーケストレーション モードになります。 この変更の詳細と実行する必要があるアクションについては、「VMSS PowerShell/CLI のお客様向けの重大な変更 - Microsoft Community Hub」を参照してください

リソース グループを作成した後、スケールイン ポリシーを OldestVM に設定して新しいスケール セットを作成します。

New-AzResourceGroup -ResourceGroupName "myResourceGroup" -Location "<VMSS location>"
New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Location "<VMSS location>" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -ScaleInPolicy “OldestVM”

Azure CLI

重要

2023 年 11 月以降、PowerShell と Azure CLI を使用して作成された VM スケール セットは、オーケストレーション モードが指定されていない場合、既定でフレキシブル オーケストレーション モードになります。 この変更の詳細と実行する必要があるアクションについては、「VMSS PowerShell/CLI のお客様向けの重大な変更 - Microsoft Community Hub」を参照してください

次の例では、新しいスケール セットを作成するときにスケールイン ポリシーが定義されます。 まずリソース グループを作成し、その後、スケールイン ポリシーを OldestVM に設定して新しいスケール セットを作成します。

az group create --name <myResourceGroup> --location <VMSSLocation>
az vmss create \
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --orchestration-mode flexible \
  --image Ubuntu2204 \
  --admin-username <azureuser> \
  --generate-ssh-keys \
  --scale-in-policy OldestVM

テンプレートの使用

テンプレートの "properties" の下に、scaleInPolicy プロパティを追加します。

"scaleInPolicy": {  
      "rules": ["OldestVM"]  
}

これらのコード ブロックでは、(自動スケーリングまたは手動削除によって) スケールインがトリガーされたら、仮想マシン スケール セットで、ゾーン均衡になっているスケール セット内の最も古い VM が削除されるように、指定されています。

仮想マシン スケール セットがゾーン均衡になっていない場合、そのスケール セットでは最初に不均衡なゾーン全体の VM が削除されます。 不均衡なゾーン内では、スケール セットで指定されたスケールイン ポリシーが使用され、スケールインする VM が決定されます。 この場合、不均衡なゾーン内では、そのゾーンで最も古い VM が削除対象として選択されます。

非ゾーン仮想マシン スケール セットの場合は、スケール セット全体で最も古い VM が削除対象に選択されます。

"NewestVM" スケールイン ポリシーを使用する場合も同じプロセスが適用されます。

スケールイン ポリシーの変更

スケールイン ポリシーの変更は、スケールイン ポリシーの適用と同じプロセスで行います。 たとえば、ポリシーを "OldestVM" から "NewestVM" に変更する場合、次の方法で行うことができます。

Azure portal

Azure portal を使用して、既存のスケール セットのスケールイン ポリシーを変更できます。

  1. 既存の仮想マシン スケール セットで、左側のメニューから [スケーリング] を選択します。
  2. [スケールイン ポリシー] タブを選択します。
  3. ドロップダウンからスケールイン ポリシーを選択します。
  4. 終了したら、 [保存] を選択します。

API の使用

API 2019-03-01 を使用して、仮想マシン スケール セットで PUT を実行します。

PUT
https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<myRG>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVMSS>?api-version=2019-03-01 

{ 
"location": "<VMSS location>", 
    "properties": { 
        "scaleInPolicy": {  
            "rules": ["NewestVM"]  
        } 
    }    
}

Azure PowerShell

既存のスケール セットのスケールイン ポリシーを更新します。

Update-AzVmss `
 -ResourceGroupName "myResourceGroup" `
 -VMScaleSetName "myScaleSet" `
 -ScaleInPolicy “OldestVM”

Azure CLI

次に示すのは、既存のスケール セットのスケールイン ポリシーを更新する例です。

az vmss update \  
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --scale-in-policy OldestVM

テンプレートの使用

テンプレートの "properties" を次のように変更して再デプロイします。

"scaleInPolicy": {  
      "rules": ["NewestVM"]  
} 

"NewestVM" を "Default" または "OldestVM" に変更する場合も、同じプロセスが適用されます

インスタンスの保護とスケールイン ポリシー

仮想マシン スケール セットには、2 種類のインスタンス保護があります。

  1. スケールインから保護する
  2. スケール セット アクションから保護する

保護された仮想マシンは、スケールイン ポリシーが適用されるかどうかに関係なく、スケールイン アクションによって削除されません。 たとえば、VM_0 (スケール セット内の最も古い VM) がスケールインから保護されていて、スケール セットで "OldestVM" スケールイン ポリシーが有効になっている場合、VM_0 は、スケール セット内で最も古い VM であっても、スケールインは考慮されません。

ユーザーは、スケール セットで有効になっているスケールイン ポリシーに関係なく、保護された仮想マシンをいつでも手動で削除できます。

使用例

以下の例では、スケールイン イベントがトリガーされたときに、仮想マシン スケール セットによって削除対象の VM が選択される方法を示します。 インスタンス ID が最も大きい仮想マシンは、スケール セット内で最も新しい VM と見なされ、インスタンス ID が最も小さい VM は、スケール セット内で最も古い VM と見なされます。

OldestVM スケールイン ポリシー

Event ゾーン 1 でのインスタンス ID ゾーン 2 でのインスタンス ID ゾーン 3 でのインスタンス ID スケールインの選択
Initial 3、4、5、10 2、6、9、11 1、7、8
スケールイン 3、4、5、10 2、6、9、11 1、7、8 最も古い VM があるのはゾーン 3 ですが、ゾーン 1 と 2 のどちらかが選択されます。 ゾーン 2 で最も古い VM2 が削除されます。
スケールイン 3、4、5、10 6、9、11 1、7、8 最も古い VM があるのはゾーン 3 ですが、ゾーン 1 が選択されます。 ゾーン 1 で最も古い VM3 が削除されます。
スケールイン 4、5、10 6、9、11 1、7、8 ゾーンは均衡しています。 スケール セット内で最も古い VM であるゾーン 3 の VM1 が削除されます。
スケールイン 4、5、10 6、9、11 7、8 ゾーン 1 とゾーン 2 のどちらかが選択されます。 2 つのゾーンで最も古い VM であるゾーン 1 の VM4 が削除されます。
スケールイン 5、10 6、9、11 7、8 最も古い VM があるのはゾーン 1 ですが、ゾーン 2 が選択されます。 ゾーン 1 で最も古い VM6 が削除されます。
スケールイン 5、10 9、11 7、8 ゾーンは均衡しています。 スケール セット内で最も古い VM であるゾーン 1 の VM5 が削除されます。

非ゾーン仮想マシン スケール セットの場合は、スケール セット全体で最も古い VM が削除対象に選択されます。 "保護された" VM は、削除からスキップされます。

NewestVM スケールイン ポリシー

Event ゾーン 1 でのインスタンス ID ゾーン 2 でのインスタンス ID ゾーン 3 でのインスタンス ID スケールインの選択
Initial 3、4、5、10 2、6、9、11 1、7、8
スケールイン 3、4、5、10 2、6、9、11 1、7、8 ゾーン 1 と 2 のどちらかが選択されます。 2 つのゾーンで最も新しい VM であるゾーン 2 の VM11 が削除されます。
スケールイン 3、4、5、10 2、6、9 1、7、8 他の 2 つのゾーンより多くの VM があるため、ゾーン 1 が選択されます。 ゾーン 1 で最も新しい VM10 が削除されます。
スケールイン 3、4、5 2、6、9 1、7、8 ゾーンは均衡しています。 スケール セット内で最も新しい VM であるゾーン 2 の VM9 が削除されます。
スケールイン 3、4、5 2、6 1、7、8 ゾーン 1 とゾーン 3 のどちらかが選択されます。 ゾーン 3 で最も新しい VM8 が削除されます。
スケールイン 3、4、5 2、6 1、7 最も新しい VM があるのはゾーン 3 ですが、ゾーン 1 が選択されます。 ゾーン 1 で最も新しい VM5 が削除されます。
スケールイン 3、4 2、6 1、7 ゾーンは均衡しています。 スケール セット内で最も新しい VM であるゾーン 3 の VM7 が削除されます。

非ゾーン仮想マシン スケール セットの場合は、スケール セット全体で最も新しい VM が削除対象に選択されます。 "保護された" VM は、削除からスキップされます。

トラブルシューティング

  1. スケールイン ポリシーを有効にできない "タイプ 'properties' のオブジェクトにメンバー 'scaleInPolicy' が見つかりませんでした" で始まるエラー メッセージの "BadRequest" エラーが発生する場合は、仮想マシン スケール セットに使用されている API のバージョンを確認します。 この機能では、API バージョン 2019-03-01 以降が必要です。

  2. スケールインに対する VM の選択が間違っています。このドキュメントの例を参照してください。 仮想マシン スケール セットがゾーン デプロイの場合、スケールイン ポリシーは、最初に不均衡なゾーンに適用され、ゾーンが均衡された後でスケール セット全体に適用されます。 スケールインの順序がここに示されている例と一致しない場合は、仮想マシン スケール セット チームにトラブルシューティングのためのクエリを提出してください。

次のステップ

Virtual Machine Scale Sets に自分のアプリケーションをデプロイする方法を学習します。