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


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

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

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

 

なお、現時点最新版の Azure PowerShell 3.8.0 のインストールについては、以下のブログ記事にまとめがられております。

 

 
管理ディスク (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 PremiumLRS -Location $Location -CreateOption Import -SourceUri $vhdUri) -ResourceGroupName $ResourceGroupName

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

 

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


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

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

 

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

# パラメーター
$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 = "データ ディスクのサイズ"

# ログインとサブスクリプション指定
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 -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 -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 -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 -Name $DDName

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

 


Comments (0)

Skip to main content