既存の VHD を管理ディスク (Managed Disk) に変換し、VM をデプロイする

2018/8/17 更新 - Azure PowerShell 6.x 以降ではストレージ アカウント タイプの記載が必須になっています

Azure PowerShell 6.x 以降では、管理ディスクのパラメーターに、"Standard_LRS" もしくは "Premium_LRS" の指定が必須となりました。
(Azure PowerShell 4.x ではオプションなしでも作成ができますが、5.x では警告、6.x ではエラーと、順次強制がされてきています。)

手順 "2. 既存の "ディスク" リソースを使用し、仮想マシンを作成する。 " のスクリプトを利用する際には注意してください。

 

 # パラメーター
$StorageAccountType = Standard_LRS # or Premium_LRS
(略)
$vm = Set-AzureRmVMOSDisk -VM $vm -ManagedDiskId $osDisk.Id -StorageAccountType $StorageAccountType -CreateOption Attach -Windows # or Linux
(略)
$Vm = Add-AzureRmVMDataDisk -CreateOption Attach -Lun $Lun -VM $Vm -Caching None -DiskSizeInGB $DiskSizeInGB -ManagedDiskId $DDDisk.Id -StorageAccountType $StorageAccountType -Name $DDName
(略)

 

==============================================

こんにちは。Azure プラットフォーム サポートの高橋です。
本日は既存の VHD を管理ディスク (Managed Disk) に変換し、変換したディスクを使用し、仮想マシンを作成する手順をご紹介します。

※本情報の内容(添付文書、リンク先などを含む)は、更新日時点でのものであり、予告なく変更される場合があります。

本手順では Azure PowerShell を使用しますため、事前の設定は以下の URL をご参考ください。

 

<2018/8/17更新 /> Azure PowerShell の最新版のセットアップ手順は以下のドキュメントにまとめられています。

Install Azure PowerShell on Windows with MSI
/ja-jp/powershell/azure/other-install?view=azurermps-6.7.0

Azure PowerShell の最新のリリース履歴は以下となります。最新版の確認や過去バージョンの入手などに活用してください。

Azure/azure-powershell
https://github.com/Azure/azure-powershell/releases

</ 2018/8/17更新>

管理ディスク (Managed Disk)  については、以下の公開ドキュメントにまとめられています。

 

 

Managed Disk のメリットは以下にも触れられています。ご参考ください。

 

 

本手順は、大きく分けて 2 ステップになります。

1. 既存の VHD を管理ディスクに変換する。


以下のスクリプトでは OS ディスク、データディスクともに管理ディスクへの変換が可能です。

そのため、複数のディスクを変換する場合にはパラメーターを変更し、ディスクの本数分、実行ください。

 # VHD を管理ディスクに変換します。

#パラメーター
$SubscriptionId = "サブスクリプション ID"
$ResourceGroupName = "リソース グループ名"
$Location = "Japan East などリージョン名"
$DiskName = "Managed Disk に変換後のディスク名"
$vhdUri = "VHD のフルパス (https://<ストレージ アカウント名>.blob.core.windows.net/<コンテナー名>/<VHD ファイル名>.vhd)"

# ログインとサブスクリプション指定
Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId $SubscriptionId

# VHD を管理ディスクへ変換
$disk1 = New-AzureRmDisk -DiskName $diskName -Disk (New-AzureRmDiskConfig -AccountType Premium_LRS -Location $Location -CreateOption Import -SourceUri $vhdUri) -ResourceGroupName $ResourceGroupName

現時点では、管理ディスク (Managed Disk) にて使用できる -AccountType オプションは、Standard_LRS と Premium_LRS だけです。
この点にご注意ください。

 

2. 既存の "ディスク" リソースを使用し、仮想マシンを作成する。


上記の手順 1. にて VHD より変換した "ディスク" リソースを使用し、仮想マシンを作成します。

以下のスクリプトをご参考ください。

※ !!! Azure PowerShell 6.x 以降を利用する場合には、本投稿冒頭の、 " 2018/8/17 更新 -  Azure PowerShell 6.x 以降ではストレージ アカウント タイプの記載が必須になっています" をご参照ください!!!
スクリプト中、赤字でハイライトしている部分が変更になります。

 

 # ネットワーク リソースを新規作成します。
# 管理ディスク対応の可用性セットを新規作成し、仮想マシンを既存の "ディスク" リソースよりデプロイします。
# 仮想マシンのデプロイ時にデータ ディスクを追加します。

# パラメーター
$SubscriptionId = "サブスクリプション ID"
$ResourceGroupName = "リソース グループ名"
$VmName = "新規作成する仮想マシン名"
$VmSize = "Standard_DS1 など仮想マシンのサイズ"
$Location = "Japan East などリージョン名"
$DiskName = "既存の ディスク リソース名"
$AvailSetName = "新規作成する管理ディスク対応の可用性セット名"
$pipName = "新規作成するパブリック IP アドレス名"
$VnetName = "新規作成する Vnet 名"
$AddressPrefix = "192.168.3.0/25" # プレフィックス
$SubnetName = "新規作成するサブネット名"
$subnetPrefix = "192.168.3.0/27" # サブネット プレフィックス
$NicName = "新規作成する NIC 名"
$DDName = "VM に追加するデータ ディスク名"
$Lun = "データ ディスクの Lun 番号 ( 0 や 1 など)"
$DiskSizeInGB = "データ ディスクのサイズ"
$StorageAccountType = Standard_LRS # or Premium_LRS

# ログインとサブスクリプション指定
Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId $SubscriptionId

# パブリック IP アドレスの作成
$pip = New-AzureRmPublicIpAddress -Name $pipName -ResourceGroupName $ResourceGroupName -Location $location -AllocationMethod Static

# サブネットの作成
$subnetconfig = New-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $subnetPrefix

# 仮想ネットワークの作成
$vnet = New-AzureRmVirtualNetwork -Name $VnetName -ResourceGroupName $ResourceGroupName -Location $location -AddressPrefix $AddressPrefix -Subnet $subnetconfig

# NIC の作成
$nic = New-AzureRmNetworkInterface -Name $nicname -ResourceGroupName $ResourceGroupName -Location $location -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id

# 管理ディスク対応の可用性セットを作成
$availset = New-AzureRmAvailabilitySet -Location $Location -Name $AvailSetName -ResourceGroupName $ResourceGroupName -Managed -PlatformFaultDomainCount 2 -PlatformUpdateDomainCount 5 -Sku Aligned

# OS ディスクの取得
$osDisk = get-azurermdisk -ResourceGroupName $ResourceGroupName -DiskName $DiskName

# 仮想マシン設定の定義
$Vm = New-AzureRmVMConfig -Name $VmName -VMSize $VmSize -AvailabilitySetId $availSet.Id
$vm = Set-AzureRmVMOSDisk -VM $vm -ManagedDiskId $osDisk.Id -StorageAccountType $StorageAccountType -CreateOption Attach -Windows # or Linux

# 作成した NIC を追加
$Nic = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroupName -Name $NicName
$Vm = Add-AzureRmVMNetworkInterface -VM $Vm -NetworkInterface $Nic
$Vm.NetworkProfile.NetworkInterfaces.Item(0).Primary = $true

# データ ディスクの取得
$DDDisk = get-azurermdisk -ResourceGroupName $ResourceGroupName -DiskName $DDName

# データ ディスクを追加
$Vm = Add-AzureRmVMDataDisk -CreateOption Attach -Lun $Lun -VM $Vm -Caching None -DiskSizeInGB $DiskSizeInGB -ManagedDiskId $DDDisk.Id -StorageAccountType $StorageAccountType -Name $DDName

# 仮想マシンの新規作成
New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $Vm

 

なお、既存のネットワーク リソースや管理ディスク対応の可用性セットを使用する場合には、以下のスクリプトを実行ください。

 

 # 既存のネットワーク リソースを使用します。
# 既存の管理ディスク対応の可用性セットを取得し、仮想マシンを既存の "ディスク" リソースよりデプロイします。
# 仮想マシンのデプロイ時にデータ ディスクを追加します。

# パラメーター
$SubscriptionId = "サブスクリプション ID"
$ResourceGroupName = "リソース グループ名"
$VmName = "新規作成する仮想マシン名"
$VmSize = "Standard_DS1 など仮想マシンのサイズ"
$Location = "Japan East などリージョン名"
$DiskName = "既存の ディスク リソース名"
$NicName = "既存の NIC 名"
$AvailSetName = "既存の管理ディスク対応の可用性セット名"
$DDName = "VM に追加するデータ ディスク名"
$Lun = "データ ディスクの Lun 番号 ( 0 や 1 など)"
$DiskSizeInGB = "データ ディスクのサイズ"

# ログインとサブスクリプション指定
Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId $SubscriptionId

# 管理ディスク対応の可用性セットを取得
$availset = Get-AzureRmAvailabilitySet -Name $AvailSetName -ResourceGroupName $ResourceGroupName

# OS ディスクの取得
$osDisk = get-azurermdisk -ResourceGroupName $ResourceGroupName -DiskName $DiskName

# 仮想マシン設定の定義
$Vm = New-AzureRmVMConfig -Name $VmName -VMSize $VmSize -AvailabilitySetId $availSet.Id
$vm = Set-AzureRmVMOSDisk -VM $vm -ManagedDiskId $osDisk.Id -StorageAccountType $StorageAccountType -CreateOption Attach -Windows # or Linux

# 既存の NIC を追加
$Nic = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroupName -Name $NicName
$Vm = Add-AzureRmVMNetworkInterface -VM $Vm -NetworkInterface $Nic
$Vm.NetworkProfile.NetworkInterfaces.Item(0).Primary = $true

# ディスクの取得
$DDDisk = get-azurermdisk -ResourceGroupName $ResourceGroupName -DiskName $DDName

# ディスクを追加
$Vm = Add-AzureRmVMDataDisk -CreateOption Attach -Lun $Lun -VM $Vm -Caching None -DiskSizeInGB $DiskSizeInGB -ManagedDiskId $DDDisk.Id -StorageAccountType $StorageAccountType -Name $DDName

# 仮想マシンの新規作成
New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $Vm