🔧
Azure VMを可用性セットから外す
可用性セットのVMをDedicated hostに移行する際など、可用性セットからVMを外したくなった場合の手順
何をしなければいけないか
可用性セットからVMを外すことはできずVMを再作成する必要があります。
(作成後のVMを後から可用性セットに追加することもできません。)
方法
このドキュメントにあるPowershell を少しカスタマイズして実施します。
スクリプトではVMのCPU・メモリ部分のみを削除して、ディスクとNICは既存のリソースを新しいVMにアタッチすることで、データに対する影響やネットワーク設定に対する影響を最小限にとどめています。
# Set variables
$resourceGroup = "myrg"
$vmName = "myVM"
# Get the details of the VM to be moved to the dedicated host
$originalVM = Get-AzVM `
-ResourceGroupName $resourceGroup `
-Name $vmName
# 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 `
-Tags $originalVM.Tags
# For a Linux VM, change the last parameter from -Windows to -Linux
if($originalVM.StorageProfile.OSdisk.OsType -eq "Windows"){
Set-AzVMOSDisk `
-VM $newVM -CreateOption Attach `
-ManagedDiskId $originalVM.StorageProfile.OsDisk.ManagedDisk.Id `
-Name $originalVM.StorageProfile.OsDisk.Name `
-Windows
}else{
Set-AzVMOSDisk `
-VM $newVM -CreateOption Attach `
-ManagedDiskId $originalVM.StorageProfile.OsDisk.ManagedDisk.Id `
-Name $originalVM.StorageProfile.OsDisk.Name `
-Linux
}
# 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
}
}
# Add Windows Hybrid Benefit
if($originalVM.LicenseType -eq "Windows_Server"){
$newVM.LicenseType = "Windows_Server"
}
# Set Boot Diagnostic
Set-AzVMBootDiagnostic -VM $newVM -Enable
# Recreate the VM
New-AzVM `
-ResourceGroupName $resourceGroup `
-Location $originalVM.Location `
-VM $newVM `
-DisableBginfoExtension
元々のスクリプトに対して、Zoneの指定やWindowsServerライセンスハイブリッド特典の引継ぎや診断設定、Tagの引継ぎなどが追加されています。
rollback
# Set variables
$resourceGroup = "myrg"
$vmName = "myVM"
$availSetName = "as"
# Get the details of the VM to be moved to the Availability Set
$originalVM = Get-AzVM `
-ResourceGroupName $resourceGroup `
-Name $vmName
# Get the details of the Availability Set
$availSet = Get-AzAvailabilitySet `
-ResourceGroupName $resourceGroup `
-Name $availSetName
# 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 `
-Tags $originalVM.Tags `
-AvailabilitySetId $availSet.Id
# For a Linux VM, change the last parameter from -Windows to -Linux
if($originalVM.StorageProfile.OSdisk.OsType -eq "Windows"){
Set-AzVMOSDisk `
-VM $newVM -CreateOption Attach `
-ManagedDiskId $originalVM.StorageProfile.OsDisk.ManagedDisk.Id `
-Name $originalVM.StorageProfile.OsDisk.Name `
-Windows
}else{
Set-AzVMOSDisk `
-VM $newVM -CreateOption Attach `
-ManagedDiskId $originalVM.StorageProfile.OsDisk.ManagedDisk.Id `
-Name $originalVM.StorageProfile.OsDisk.Name `
-Linux
}
# 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
}
}
# Add Windows Hybrid Benefit
if($originalVM.LicenseType -eq "Windows_Server"){
$newVM.LicenseType = "Windows_Server"
}
# Set Boot Diagnostic
Set-AzVMBootDiagnostic -VM $newVM -Enable
# Recreate the VM
New-AzVM `
-ResourceGroupName $resourceGroup `
-Location $originalVM.Location `
-VM $newVM `
-DisableBginfoExtension
注意事項
- VM削除時にディスクやNICも合わせて削除する削除オプションが有効になっていないか
- basic loadbalancer のバックエンドプールにVMが設定されていないか
- VMは再作成されることになるので、アプリケーションがこのあたりの値を利用していないか
https://azure.microsoft.com/nb-no/blog/accessing-and-using-azure-vm-unique-id/
Discussion