Share via


チュートリアル: Azure CLI を使用して仮想マシン スケール セットを変更する

アプリケーションのライフサイクルを通して、仮想マシン スケール セットを変更したり更新したりすることが必要になる場合があります。 スケール セットの構成を更新したりアプリケーションの構成を変更したりする際の方法が、こうした更新の対象になることもあります。 この記事では、Azure CLI を使用して既存のスケール セットを変更する方法について説明します。

スケール セット モデルを更新する

スケール セットには、スケール セット全体の "望ましい" 状態をキャプチャする "スケール セット モデル" があります。 スケール セット モデルは、az vmss show を使用して照会することができます。

az vmss show --resource-group myResourceGroup --name myScaleSet

出力の正確な表示は、コマンドに指定したオプションによって異なります。 次の例は、Azure CLI から得たサンプル出力の抜粋です。

{
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
  "location": "eastus",
  "name": "myScaleSet",
  "orchestrationMode": "Flexible",
  "platformFaultDomainCount": 1,
  "resourceGroup": "myResourceGroup",
  "sku": {
    "capacity": 2,
    "name": "Standard_DS1_v2",
    "tier": "Standard"
  },
  "timeCreated": "2022-11-29T22:16:43.250912+00:00",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
    "networkProfile": {
      "networkApiVersion": "2020-11-01",
      "networkInterfaceConfigurations": [
        {
          "deleteOption": "Delete",
          "disableTcpStateTracking": false,
          "dnsSettings": {
            "dnsServers": []
          },
          "enableIpForwarding": false,
          "ipConfigurations": [
            {
              "applicationGatewayBackendAddressPools": [],
              "applicationSecurityGroups": [],
              "loadBalancerBackendAddressPools": [
                {
                  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/loadBalancers/myScaleSetLB/backendAddressPools/myScaleSetLBBEPool",
                  "resourceGroup": "myResourceGroup"
                }
              ],
              "name": "mysca2215IPConfig",
              "privateIpAddressVersion": "IPv4",
              "subnet": {
                "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myScaleSetVNET/subnets/myScaleSetSubnet",
                "resourceGroup": "myResourceGroup"
              }
            }
          ],
          "name": "mysca2215Nic",
          "networkSecurityGroup": {
            "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myScaleSetNSG",
            "resourceGroup": "myResourceGroup"
          },
          "primary": true
        }
      ]
    },
    "osProfile": {
      "allowExtensionOperations": true,
      "computerNamePrefix": "myScaleS",
      "linuxConfiguration": {
        "disablePasswordAuthentication": true,
        "enableVmAgentPlatformUpdates": false,
        "patchSettings": {
          "assessmentMode": "ImageDefault",
          "patchMode": "ImageDefault"
        },
        "provisionVmAgent": true,
      },
    },
    "storageProfile": {
      "imageReference": {
        "offer": "0001-com-ubuntu-server-jammy",
        "publisher": "Canonical",
        "sku": "22_04-lts",
        "version": "latest"
      },
      "osDisk": {
        "caching": "ReadWrite",
        "createOption": "FromImage",
        "deleteOption": "Delete",
        "diskSizeGb": 30,
        "managedDisk": {
          "storageAccountType": "Premium_LRS"
        },
        "osType": "Linux",
      }
    },
  },
}

az vmss update を使用して、スケール セットのさまざまなプロパティを更新できます。 たとえば、ライセンスの種類や VM インスタンス保護ポリシーの更新などです。

az vmss update --name MyScaleSet --resource-group MyResourceGroup --license-type windows_server
az vmss update --name MyScaleSet --resource-group MyResourceGroup --instance-id 4 --protect-from-scale-set-actions False --protect-from-scale-in

さらに、az vmss create コマンドを使用してスケール セットを既にデプロイした場合は、az vmss create コマンドをもう一度実行してスケール セットを更新できます。 変更するプロパティを除き、az vmss create コマンドのすべてのプロパティが以前と同じであることを確認してください。 たとえば、以下ではインスタンス数を 5 に増やしています。

重要

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

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image RHELRaw8LVMGen2 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --instance-count 5

スケール セット内の個々の VM インスタンスを更新する

スケール セットにモデル ビューがあるのと同様に、スケール セット内の各 VM インスタンスには独自のモデル ビューがあります。 スケール セット内の特定の VM インスタンスに関してモデル ビューにクエリを実行するには、az vm show を使用できます。

az vm show --resource-group myResourceGroup --name myScaleSet_Instanace1

出力の正確な表示は、コマンドに指定したオプションによって異なります。 次の例は、Azure CLI から得たサンプル出力の抜粋です。

{
  "hardwareProfile": {
    "vmSize": "Standard_DS1_v2",
  },
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1",
  "location": "eastus",
  "name": "myScaleSet_Instance1",
  "networkProfile": {
    "networkInterfaces": [
      {
        "deleteOption": "Delete",
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-5cf164f7",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      }
    ]
  },
  "osProfile": {
    "allowExtensionOperations": true,
    "computerName": "myScaleset_Computer1",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true,
    },
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "storageProfile": {
    "dataDisks": [],
    "imageReference": {
      "exactVersion": "22.04.202204200",
      "offer": "0001-com-ubuntu-server-jammy",
      "publisher": "Canonical",
      "sku": "22_04-lts",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
        "resourceGroup": "myResourceGroup",
        "storageAccountType": "Premium_LRS"
      },
      "name": "myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
      "osType": "Linux",
    }
  },
  "timeCreated": "2022-11-29T22:16:44.500895+00:00",
  "type": "Microsoft.Compute/virtualMachines",
  "virtualMachineScaleSet": {
    "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
    "resourceGroup": "myResourceGroup"
  },
}

これらのプロパティは、スケール セット全体の構成ではなく、スケール セット内の VM インスタンスの構成を示しています。

スタンドアロン VM と同様に、スケール セット内の個々の VM インスタンスに対して更新を実行できます。 たとえば、新しいデータ ディスクをインスタンス 1 にアタッチします。

az vm disk attach --resource-group myResourceGroup --vm-name myScaleSet_Instance1 --name disk_name1 --new

az vm show を再度実行すると、VM インスタンスに新しいディスクがアタッチされていることがわかります。

  "storageProfile": {
    "dataDisks": [
      {
        "caching": "None",
        "createOption": "Empty",
        "deleteOption": "Detach",
        "diskSizeGb": 1023,
        "lun": 0,
        "managedDisk": {
          "id": "/subscriptions/49d84582-7207-4a4f-824e-044e83c71887/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/disk_name1",
          "resourceGroup": "myResourceGroup",
          "storageAccountType": "Premium_LRS"
        },
        "name": "disk_name1",
        "toBeDetached": false,
      }
    ],

スケール セットにインスタンスを追加する

スケール セットに新しい VM を追加するが、スケール セット モデルに表示される構成オプションとは異なる構成オプションが必要な場合があります。 az vm create コマンドを使用し、インスタンスを追加するスケール セット名を指定することで、作成時に VM をスケール セットに追加できます。

az vm create --name myNewInstance --resource-group myResourceGroup --vmss myScaleSet --image RHELRaw8LVMGen2
{
  "fqdns": "",
  "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myNewInstance",
  "location": "eastus",
  "macAddress": "60-45-BD-D7-13-DD",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.6",
  "publicIpAddress": "20.172.144.96",
  "resourceGroup": "myResourceGroup",
  "zones": ""

スケール セットを確認してみると、新しいインスタンスが追加されていることがわかります。

az vm list --resource-group myResourceGroup --output table
Name                 ResourceGroup    Location
-------------------  ---------------  ----------
myNewInstance         myResourceGroup  eastus
myScaleSet_Instance1  myResourceGroup  eastus
myScaleSet_Instance1  myResourceGroup  eastus

最新のスケール セット モデルで VM を最新の状態にする

注意

現在、フレキシブル オーケストレーション モードを使用する仮想マシン スケール セットでは、アップグレード モードはサポートされていません。

スケール セットには、VM を最新のスケール セット モデルで最新の状態にする方法を決定する "アップグレード ポリシー" があります。 アップグレード ポリシーの 3 つのモードは次のとおりです。

  • 自動 - このモードでは、スケール セットは VM の停止順序を保証しません。 スケール セットは、すべての VM を同時に停止できます。
  • ローリング - このモードでは、スケール セットは更新をバッチでロールアウトします。必要に応じて、バッチ間の一時停止時間を設定します。
  • 手動 - このモードでは、スケール セット モデルの更新時に、手動更新がトリガーされるまで、既存の VM はそのままです。

スケール セットが手動アップグレードに設定されている場合は、az vmss update を使用して手動アップグレードをトリガーできます。

az vmss update --resource-group myResourceGroup --name myScaleSet

Note

Service Fabric クラスターは "自動" モードのみを使用できますが、更新は別途処理されます。 詳しくは、「Service Fabric アプリケーションのアップグレード」をご覧ください。

スケール セットを再イメージ化する

Virtual Machine Scale Sets では、スケール セット内の各 VM に対して一意の名前が生成されます。 名前付け規則は、オーケストレーション モードによって異なります。

  • フレキシブル オーケストレーション モード: {scale-set-name}_{8-char-guid}
  • 均一オーケストレーション モード: {scale-set-name}_{instance-id}

特定のインスタンスを再イメージ化する必要がある場合は、az vmss reimage を使用し、インスタンス名を指定します。

az vmss reimage --resource-group myResourceGroup --name myScaleSet --instance-id myScaleSet_Instance1

スケール セットの OS イメージの更新

以前のバージョンの Ubuntu を実行するスケール セットが存在する場合があります。 新しいバージョンの Ubuntu (バージョン 22.04.202204200 など) に更新することが望ましいです。 イメージ参照バージョン プロパティは一覧に含まれないため、az vmss update を使用してこれらのプロパティを直接変更できます。

az vmss update --resource-group myResourceGroup --name myScaleSet --set virtualMachineProfile.storageProfile.imageReference.version=22.04.202204200

または、スケール セットで使用されるイメージを変更したい場合があります。 たとえば、スケール セットで使用されるカスタム イメージを更新または変更したいような場合です。 イメージ参照 ID プロパティを更新することにより、スケール セットで使用されるイメージを変更できます。 イメージ参照 ID プロパティは一覧に含まれないため、az vmss update を使用してこのプロパティを直接変更できます。

az vmss update \
--resource-group myResourceGroup \
--name myScaleSet \
--set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage

Azure プラットフォーム イメージを使用している場合は、imageReference を変更してイメージを更新することができます (詳しくは、REST API のドキュメントをご覧ください)。

Note

プラットフォーム イメージでは、イメージ参照バージョンに "最新" を指定することが一般的です。 作成、スケール アウト、再イメージ化を行うと、VM が使用可能な最新バージョンで作成されます。 ただし、新しいイメージ バージョンがリリースされたときに OS イメージが自動的に更新されることは意味しません。 別の機能によって、OS の自動更新が提供されます。 詳しくは、OS アップグレードのドキュメントをご覧ください。

カスタム イメージを使用している場合は、imageReference ID を更新してイメージを更新することができます (詳しくは、REST API のドキュメントをご覧ください)。

スケール セットのロード バランサーの更新

Azure Load Balancer を使用するスケール セットがあり、Azure Load Balancer を Azure Application Gateway で置換するとします。 スケール セットのロード バランサーと Application Gateway のプロパティは一覧に含まれるため、プロパティを直接変更する代わりに一覧の要素を削除または追加するコマンドを使用できます。

# Remove the load balancer backend pool from the scale set model
az vmss update --resource-group myResourceGroup --name myScaleSet --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerBackendAddressPools 0

# Remove the load balancer backend pool from the scale set model; only necessary if you have NAT pools configured on the scale set
az vmss update --resource-group myResourceGroup --name myScaleSet --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerInboundNatPools 0

# Add the application gateway backend pool to the scale set model
az vmss update --resource-group myResourceGroup --name myScaleSet --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'

注意

これらのコマンドでは、スケール セットの IP 構成とロード バランサーが 1 つだけであると想定されます。 複数ある場合は、0 以外のリスト インデックスを使用する必要があります。

次のステップ

このチュートリアルでは、スケール セットと個々のインスタンスのさまざまな側面を変更する方法について学習しました。

  • スケール セット モデルを更新する
  • スケール セット内の個々の VM インスタンスを更新する
  • スケール セットにインスタンスを追加する
  • 最新のスケール セット モデルで VM を最新の状態にする
  • スケール セットを再イメージ化する
  • スケール セットの OS イメージの更新
  • スケール セットのロード バランサーの更新