Azure PowerShell を使用して VM の可用性セットを変更する

適用対象: ✔️ Linux VM ✔️ Windows VM

以下の手順では、Azure PowerShell を使用して VM の可用性セットを変更する方法について説明します。 VM を可用性セットに追加できるのは、VM の作成時のみです。 可用性セットを変更するには、仮想マシンを削除してから作成し直す必要があります。

この記事は、2019 年 2 月 12 日に Azure Cloud ShellAz PowerShell モジュール バージョン 1.2.0 を使用して最後にテストされました。

警告

これは単なる例であり、場合によっては、特定のデプロイ用に更新する必要があります。

ディスクが削除オプションとして detach に設定されていることを確認します。 delete に設定されている場合は、VM を削除する前に VM を更新します。

VM がロード バランサーに接続されている場合は、そのケースを処理するようスクリプトを更新する必要があります。

一部の拡張機能は、このプロセスを完了した後に再インストールする必要がある場合があります。

VM でハイブリッド特典を使用する場合は、新しい VM でハイブリッド特典を有効にするために例を更新する必要があります。

前提条件

なし

可用性セットを変更する

次のスクリプトでは、必要な情報を収集し、元の VM を削除してから新しい可用性セット内でその VM を作り直す例を示します。

  # Set variables
      $resourceGroup = "myResourceGroup"
      $vmName = "myVM"
      $newAvailSetName = "myAvailabilitySet"

  # Get the details of the VM to be moved to the Availability Set
      $originalVM = Get-AzVM `
        -ResourceGroupName $resourceGroup `
        -Name $vmName

  # Create new availability set if it does not exist
      $availSet = Get-AzAvailabilitySet `
        -ResourceGroupName $resourceGroup `
        -Name $newAvailSetName `
        -ErrorAction Ignore
      if (-Not $availSet) {
      $availSet = New-AzAvailabilitySet `
        -Location $originalVM.Location `
        -Name $newAvailSetName `
        -ResourceGroupName $resourceGroup `
        -PlatformFaultDomainCount 2 `
        -PlatformUpdateDomainCount 2 `
        -Sku Aligned
      }

  # Remove the original VM
      Remove-AzVM -ResourceGroupName $resourceGroup -Name $vmName

  # Create the basic configuration for the replacement VM.
      $newVM = New-AzVMConfig `
        -VMName $originalVM.Name `
        -VMSize $originalVM.HardwareProfile.VmSize `
        -AvailabilitySetId $availSet.Id
  
  # For a Linux VM, change the last parameter from -Windows to -Linux
      Set-AzVMOSDisk `
        -VM $newVM -CreateOption Attach `
        -ManagedDiskId $originalVM.StorageProfile.OsDisk.ManagedDisk.Id `
        -Name $originalVM.StorageProfile.OsDisk.Name `
        -Windows

  # Add Data Disks
      foreach ($disk in $originalVM.StorageProfile.DataDisks) { 
      Add-AzVMDataDisk -VM $newVM `
        -Name $disk.Name `
        -ManagedDiskId $disk.ManagedDisk.Id `
        -Caching $disk.Caching `
        -Lun $disk.Lun `
        -DiskSizeInGB $disk.DiskSizeGB `
        -CreateOption Attach
      }
      
  # Add NIC(s) and keep the same NIC as primary; keep the Private IP too, if it exists.
      foreach ($nic in $originalVM.NetworkProfile.NetworkInterfaces) {	
      if ($nic.Primary -eq "True")
      {
              Add-AzVMNetworkInterface `
                -VM $newVM `
                -Id $nic.Id -Primary
                }
            else
                {
                  Add-AzVMNetworkInterface `
                  -VM $newVM `
                  -Id $nic.Id 
                  }
        }

  # Recreate the VM
      New-AzVM `
        -ResourceGroupName $resourceGroup `
        -Location $originalVM.Location `
        -VM $newVM `
        -DisableBginfoExtension