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 での提供に限られていました。

1

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)
}