チュートリアル: Azure CLI を使用した仮想マシン スケール セットの作成および管理

仮想マシン スケール セットを使用すると、仮想マシンのセットをデプロイおよび管理できます。 仮想マシン スケール セットのライフサイクルを通して、1 つ以上の管理タスクを実行することが必要になる場合があります。 このチュートリアルで学習する内容は次のとおりです。

  • リソース グループを作成する
  • 仮想マシン スケール セットの作成
  • スケールアウトとスケールイン
  • VM インスタンスの停止、起動、再起動

Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

この記事では、Azure CLI のバージョン 2.0.29 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

リソース グループを作成する

Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 仮想マシン スケール セットの前にリソース グループを作成する必要があります。 az group create コマンドを使用して、リソース グループを作成します。 この例では、myResourceGroup という名前のリソース グループが eastus リージョンに作成されます。

az group create --name myResourceGroup --location eastus

このチュートリアルでスケール セットを作成または変更するときにこのリソース グループ名を指定します。

スケール セットを作成する

重要

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

仮想マシン スケール セットを作成するには、az vmss create コマンドを使用します。 次の例では、myScaleSet という名前のスケール セットを作成し、存在しない場合は SSH キーを生成します。

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image <SKU image> \
  --admin-username azureuser \
  --generate-ssh-keys

すべてのスケール セット リソースと VM インスタンスを作成して構成するには数分かかります。 個々の VM インスタンスにトラフィックを分散するために、ロード バランサーも作成されます。

スケール セット内の VM インスタンスに関する情報を表示する

スケール セット内の VM インスタンスの一覧を表示するには、次のように az vm list を使用します。

az vm list --resource-group myResourceGroup --output table

次の出力例には、スケール セット内の 2 つの VM インスタンスが示されています。

Name                 ResourceGroup    Location    Zones
-------------------  ---------------  ----------  -------
myScaleSet_instance1  myResourceGroup  eastus
myScaleSet_instance2  myResourceGroup  eastus

特定の VM インスタンスに関する追加情報を表示するには、az vm show を使用し、VM 名を指定します。

az vm show --resource-group myResourceGroup --name myScaleSet_instance1
{
  "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-0396c71c",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      }
    ]
  },
  "osProfile": {
    "adminUsername": "azureuser",
    "allowExtensionOperations": true,
    "computerName": "myScaleSN30BP1",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true,
      "ssh": {
        "publicKeys": [
          {
            "keyData": "ssh-rsa",
            "path": "/home/azureuser/.ssh/authorized_keys"
          }
        ]
      }
    },
    "requireGuestProvisionSignal": true,
    "secrets": [],
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "storageProfile": {
    "dataDisks": [],
    "imageReference": {
      "exactVersion": "XXXXX",
      "offer": "myOffer",
      "publisher": "myPublisher",
      "sku": "mySKU",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myScaleSet_instance1_disk1",
        "resourceGroup": "myResourceGroup",
        "storageAccountType": "Premium_LRS"
      },
      "name": "myScaleSet_instance1_disk1",
      "osType": "Linux",
    }
  },
  "tags": {},
  "timeCreated": "2022-11-16T20:32:15.024581+00:00",
  "type": "Microsoft.Compute/virtualMachines",
  "virtualMachineScaleSet": {
    "id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
    "resourceGroup": "myResourceGroup"
  },
}

特定の VM インスタンス サイズのスケール セットを作成する

チュートリアルの開始時にスケール セットを作成したとき、VM インスタンスに対して既定の VM SKU である Standard_D1_v2 が提供されました。 az vm list-sizes の出力に基づいて、異なる VM インスタンス サイズを指定できます。 次の例では、--vm-sku パラメーターに VM インスタンス サイズ Standard_F1 を指定して、スケール セットを作成します。 すべてのスケール セット リソースと VM インスタンスを作成して構成するには数分かかるため、次のスケール セットをデプロイする必要はありません。

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode flexible \
  --image <SKU image> \
  --vm-sku Standard_F1 \
  --admin-user azureuser \
  --generate-ssh-keys

スケール セットの容量を変更する

チュートリアルの開始時にスケール セットを作成したとき、既定で 2 つの VM インスタンスがデプロイされました。 az vmss create と共に --instance-count パラメーターを指定して、スケール セットに作成されるインスタンスの数を変更することができます。 既存のスケール セット内の VM インスタンスの数を増減するには、手動でその容量を変更します。 スケール セットにより、必要な数の VM インスタンスが作成または削除され、その後、トラフィックを分散するようにロード バランサーが構成されます。

スケール セット内の VM インスタンスの数を手動で増減させるには、az vmss scale を使用します。 次の例では、スケール セット内の VM インスタンスの数を 3 に設定します。

az vmss scale \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --new-capacity 3

スケール セットの容量を更新するには数分かかります。 スケール セットに現在あるインスタンスの数を確認するには、az vm list を使用し、関連付けられているリソース グループに対してクエリを実行します。

az vm list --resource-group myResourceGroup --output table
Name                 ResourceGroup    Location    Zones
-------------------  ---------------  ----------  -------
myScaleSet_instance1  myResourceGroup  eastus
myScaleSet_instance2  myResourceGroup  eastus
myScaleSet_instance3  myResourceGroup  eastus

スケール セット内の VM インスタンスを停止および割り当て解除する

スケール セット内のすべての VM インスタンスを停止するには、az vmss stop を使用します。

az vmss stop \
  --resource-group myResourceGroup \
  --name myScaleSet

スケール セット内の個々の VM インスタンスを停止するには、az vm stop を使用し、インスタンス名を指定します。

az vm stop \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

停止した VM インスタンスは割り当てられたままであり、引き続きコンピューティングの料金が発生します。 代わりに VM インスタンスの割り当てを解除し、ストレージ料金のみを課金する場合は、az vm deallocate を使用し、割り当てを解除するインスタンス名を指定します。

az vm deallocate \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

スケール セット内の VM インスタンスを起動する

スケール セット内のすべての VM インスタンスを起動するには、az vmss start を使用します。

az vmss start \
  --resource-group myResourceGroup \
  --name myScaleSet

スケール セット内の個々の VM インスタンスを起動するには、az vm start を使用し、インスタンス名を指定します。

az vm start \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

スケール セット内の VM インスタンスを再起動する

スケール セット内のすべての VM インスタンスを再起動するには、az vmss restart を使用します。

az vmss restart \
  --resource-group myResourceGroup \
  --name myScaleSet

スケール セット内の個々の VM インスタンスを再起動するには、az vm restart を使用し、インスタンス名を指定します。

az vm restart \
  --resource-group myResourceGroup \
  --name myScaleSet_instance1

リソースをクリーンアップする

リソース グループを削除すると、グループに含まれているリソース (VM インスタンス、仮想ネットワーク、ディスクなど) もすべて削除されます。 --no-wait パラメーターは、操作の完了を待たずにプロンプトに制御を戻します。 --yes パラメーターは、追加のプロンプトを表示せずにリソースを削除することを確定します。

az group delete --name myResourceGroup --no-wait --yes

次のステップ

このチュートリアルでは、Azure CLI を使用して基本的なスケール セットの作成タスクおよび管理タスクを実行する方法について学習しました。

  • リソース グループを作成する
  • スケール セットを作成する
  • 特定の VM サイズを確認して使用する
  • スケール セットを手動でスケーリングする
  • スケール セットの停止、起動、再起動などの一般的なスケール セット管理タスクを実行する

次のチュートリアルに進み、スケール セット インスタンスに接続する方法について学習してください。