Managed Virtual Machines で OS ディスク スワップの一般提供を開始
執筆者: Kay Singh (Senior Program Manager, Azure Compute)
このポストは、2018 年 4 月 26 日に投稿された OS Disk Swap for Managed Virtual Machines now available の翻訳です。
このたび、Managed Disks を使用した VM の OS ディスク スワップ機能をご利用いただけるようになりました。これまでこの機能は Unmanaged Disks での提供に限られていました。
OS ディスク スワップ機能では、VM を削除することなく簡単に、前回の OS ディスクのバックアップを復元したり、トラブルシューティング用に OS ディスクをスワップしたりできるようになります。この機能は、VM を停止 (割り当て解除) した状態で使用します。VM を停止 (割り当て解除) したら、既存の Managed OS Disk のリソース ID を新しい Managed OS Disk のリソース ID に置き換えます。また、スワップする新しいディスクの名前を指定する必要があります。Linux の OS ディスクを Windows の OS ディスクに切り替えるなど、VM の OS の種類を切り替えることはできません。
この機能の使用方法については以下をご確認ください。
Azure CLI
Azure CLI での使用については、「CLI を使用して Azure VM の OS ディスクを変更する (英語)」をご覧ください。
CLI の場合は、--osdisk パラメーターに新しいディスクの完全なリソース ID を指定します。
注: Azure CLI バージョン 2.0.25 以上が必要です。
az vm update -g swaprg -n vm2 --os-disk /subscriptions/<sub-id>/resourceGroups/osrg/providers/Microsoft.Compute/disks/osbackup
Azure PowerShell
PowerShell での使用については、「PowerShell を使用して Azure VM の OS ディスクを変更する (英語)」をご覧ください。
$vm = Get-AzureRmVM -ResourceGroupName osrg -Name vm2
$disk = Get-AzureRmDisk -ResourceGroupName osrg -Name osbackup
Set-AzureRmVMOSDisk -VM $vm -ManagedDiskId $disk.Id -Name $disk.Name
Update-AzureRmVM -ResourceGroupName osrg -VM $vm
Java SDK
VirtualMachine virtualMachine = azure.virtualMachines().getById("<vm_id>");
virtualMachine
.inner()
.storageProfile()
.osDisk()
.withName("<disk-name>")
.managedDisk()
.withId("<disk_resource_id>");
virtualMachine.update()
.apply();
GO SDK
func UpdateVM(ctx context.Context, vmName string, diskId string, diskName string) (vm compute.VirtualMachine, err error) {
vm, err = GetVM(ctx, vmName)
if err != nil {
return
}
vm.VirtualMachineProperties.StorageProfile.OSDisk.Name = diskName
vm.VirtualMachineProperties.StorageProfile.ManagedDisk.Id = diskId
vmClient := getVMClient()
future, err := vmClient.CreateOrUpdate(ctx, helpers.ResourceGroupName(), vmName, vm)
if err != nil {
return vm, fmt.Errorf("cannot update vm: %v", err)
}
err = future.WaitForCompletion(ctx, vmClient.Client)
if err != nil {
return vm, fmt.Errorf("cannot get the vm create or update future response: %v", err)
}
return future.Result(vmClient)
}