Condividi tramite


Modificare il set di disponibilità per una macchina virtuale usando Azure PowerShell

Si applica a: ✔️ macchine virtuali Linux ✔️ macchine virtuali Windows

I passaggi seguenti descrivono come modificare il set di disponibilità di una macchina virtuale usando Azure PowerShell. È possibile aggiungere una macchina virtuale a un set di disponibilità solo quando si crea la macchina virtuale. Per modificare il set di disponibilità, è necessario eliminare e quindi ricreare la macchina virtuale.

Questo articolo è stato testato l'ultimo 12 febbraio 2019 usando Azure Cloud Shell e il modulo Az PowerShell versione 1.2.0.

Avviso

Questo è solo un esempio. In alcuni casi, è necessario aggiornarlo per la distribuzione specifica.

Assicurarsi che i dischi siano impostati su detach come opzione di eliminazione . Se sono impostati su delete, aggiornare le macchine virtuali prima di eliminare le macchine virtuali.

Se la macchina virtuale è collegata a un servizio di bilanciamento del carico, è necessario aggiornare lo script per gestire tale caso.

Alcune estensioni potrebbero anche essere reinstallate al termine del processo.

Se la macchina virtuale usa vantaggi ibridi, è necessario aggiornare l'esempio per abilitare i vantaggi ibridi nella nuova macchina virtuale.

Prerequisiti

None

Modificare il set di disponibilità

Lo script seguente fornisce un esempio di raccolta delle informazioni necessarie, l'eliminazione della macchina virtuale originale e la nuova creazione in un nuovo set di disponibilità:

  # 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 a new availability set if it doesn't 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 NICs and keep the same NICs 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 
                  }
        }

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