こんにちは、Azure テクニカル サポート チームの菅澤です。
Azure VM では、一部リージョンのみとはなりますが可用性ゾーンをサポートしています。
ただ、可用性ゾーンを利用した VM を作成したい場合には、これに利用するディスクも可用性ゾーンを利用している必要があり、一般に仮想マシンを新規デプロイする場合にのみこの利用有無を設定できます。
しかし、運用をしている中で可用性ゾーンへ組み入れる必要が発生したり、逆に、可用性ゾーンに組み入れられていると一部機能が対応しないため、可用性ゾーンから外したいというご要望が出てくることがあるかと思います。
本稿では、こうしたご要望にお応えするために、可用性ゾーンへ含まれない VM を可用性ゾーンに組み入れる、可用性ゾーンに含まれる VM を可用性ゾーンから外す方法について、Azure PowerShell のサンプルを用いてそれぞれご案内いたします。
■ 本手順を利用する前提条件
本手順では、管理ディスクを利用していることを前提としてご案内いたします。
Azure PowerShell か実行可能な環境、もしくは Azure CloudShell をご利用いただける環境から実行してください。
■ 手順の流れについて
可用性ゾーンへ含まれない VM を可用性ゾーンに組み入れる、可用性ゾーンに含まれる VM を可用性ゾーンから外すのいずれの場合でも以下の流れにて作業を行います。
- 仮想マシンを停止する。
- 仮想マシンのスナップショットを取得する。
- 仮想マシンのスナップショットから仮想マシンを作成する。
- 作成されたスナップショット、およびもともと利用されていたリソースを削除する。
■ 可用性ゾーンを設定したい場合
まず、設定変更を行いたい仮想マシンを停止してください。
停止が完了したら、現在利用しているディスクのスナップショットを取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ResourceGroup = "AZ" $Location = "japaneast" $vmName = "NonAz"
$snapshotName = $vmname + "-OSDisk-Snapshot"
$vm = get-Azvm -ResourceGroupName $ResourceGroup -Name $vmName
$snapshot = New-AzSnapshotConfig -SourceResourceId $vm.StorageProfile.OsDisk.ManagedDisk.Id -Location $Location -CreateOption copy
New-AzSnapshot -Snapshot $snapshot -SnapshotName $snapshotName -ResourceGroupName $ResourceGroup
|
次に、上記で取得したスナップショットをもとに VM を作成します。
可用性ゾーンでパブリック IP アドレスを利用する場合には Standard SKU かつ静的な割り当てが必要となりますのでご注意ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| $ResourceGroup = "AZ" $Location = "japaneast" $vmName = "NonAz" $ZoneNo = 1
$snapshotName = $vmname + "-OSDisk-Snapshot" $osDiskName = $vmname + "-OSDisk-AZ" $virtualMachineName = $vmName + "AZ"
$vm = get-Azvm -ResourceGroupName $ResourceGroup -Name $vmName $Subnet = (Get-AzNetworkInterface -ResourceID $vm.NetworkProfile.NetworkInterfaces.Id).IpConfigurations.subnet.Id $virtualMachineSize = $vm.HardwareProfile.VmSize $DiskType = (Get-AzDisk -ResourceGroupName $ResourceGroup -DiskName $vm.StorageProfile.OsDisk.Name).Sku.Name
$snapshot = Get-AzSnapshot -ResourceGroupName $ResourceGroup -SnapshotName $snapshotName
$diskConfig = New-AzDiskConfig -Location $snapshot.Location -SourceResourceId $snapshot.Id -CreateOption Copy -Zone $ZoneNo -AccountType $DiskType $disk = New-AzDisk -Disk $diskConfig -ResourceGroupName $ResourceGroup -DiskName $osDiskName
$VirtualMachine = New-AzVMConfig -VMName $virtualMachineName -VMSize $virtualMachineSize -Zone $ZoneNo $VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -ManagedDiskId $disk.Id -CreateOption Attach -Windows
$publicIp = New-AzPublicIpAddress -Name ($vmName+'-AZ_ip') -ResourceGroupName $ResourceGroup -Location $snapshot.Location -AllocationMethod Static -Zone $ZoneNo -Sku Standard $nic = New-AzNetworkInterface -Name ($vmName+'-AZ_nic') -ResourceGroupName $ResourceGroup -Location $snapshot.Location -SubnetId $subnet -PublicIpAddressId $publicIp.Id $VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $nic.Id
New-AzVM -VM $VirtualMachine -ResourceGroupName $ResourceGroup -Location $snapshot.Location
|
上記で作成された VM が動作するようでしたらば、もともと利用していたリソースおよび、本手順で作成したスナップショットを削除し、手順は完了となります。
■ 可用性ゾーンの設定を削除したい場合
まず、現在利用しているディスクのスナップショットを取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ResourceGroup = "AZ" $Location = "japaneast" $vmName = "Az"
$snapshotName = $vmname + "-OSDisk-Snapshot"
$vm = get-Azvm -ResourceGroupName $ResourceGroup -Name $vmName
$snapshot = New-AzSnapshotConfig -SourceResourceId $vm.StorageProfile.OsDisk.ManagedDisk.Id -Location $Location -CreateOption copy
New-AzSnapshot -Snapshot $snapshot -SnapshotName $snapshotName -ResourceGroupName $ResourceGroup
|
次に、上記で取得したスナップショットをもとに VM を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| $ResourceGroup = "AZ" $Location = "japaneast" $vmName = "Az"
$snapshotName = $vmname + "-OSDisk-Snapshot" $osDiskName = $vmname + "-OSDisk_NonAz" $virtualMachineName = $vmName + "NonAZ"
$vm = get-Azvm -ResourceGroupName $ResourceGroup -Name $vmName $Subnet = (Get-AzNetworkInterface -ResourceID $vm.NetworkProfile.NetworkInterfaces.Id).IpConfigurations.subnet.Id $virtualMachineSize = $vm.HardwareProfile.VmSize $DiskType = (Get-AzDisk -ResourceGroupName $ResourceGroup -DiskName $vm.StorageProfile.OsDisk.Name).Sku.Name
$snapshot = Get-AzSnapshot -ResourceGroupName $ResourceGroup -SnapshotName $snapshotName
$diskConfig = New-AzDiskConfig -Location $snapshot.Location -SourceResourceId $snapshot.Id -CreateOption Copy -AccountType $DiskType $disk = New-AzDisk -Disk $diskConfig -ResourceGroupName $ResourceGroup -DiskName $osDiskName
$VirtualMachine = New-AzVMConfig -VMName $virtualMachineName -VMSize $virtualMachineSize $VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -ManagedDiskId $disk.Id -CreateOption Attach -Windows
$publicIp = New-AzPublicIpAddress -Name ($vmName+'NonAZ_ip') -ResourceGroupName $ResourceGroup -Location $snapshot.Location -AllocationMethod Static -Sku Standard $nic = New-AzNetworkInterface -Name ($vmName+'NonAZ_nic') -ResourceGroupName $ResourceGroup -Location $snapshot.Location -SubnetId $subnet -PublicIpAddressId $publicIp.Id $VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $nic.Id
New-AzVM -VM $VirtualMachine -ResourceGroupName $ResourceGroup -Location $snapshot.Location
|
上記で作成された VM が動作するようでしたらば、もともと利用していたリソースおよび、本手順で作成したスナップショットを削除し、手順は完了となります。
■ 参考
本ドキュメントの作成に当たっては、以下の資料を参考としておりますので、よろしければこちらもご確認をいただけますと幸いです。
本稿が皆様のお役に立てれば幸いです。
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。