ストレージ アカウントでの特殊化された VHD からの VM の作成
Powershell を使用して、OS ディスクとして特殊化された非管理ディスクを接続することにより新しい VM を作成します。 特殊化されたディスクは、元の VM のユーザーアカウント、アプリケーション、その他の状態データを維持する、既存の VM の VHD のコピーです。
2 つのオプションがあります。
Hyper-V などのオンプレミスの仮想化ツールを使用して作成された特殊化された VM、または別のクラウドからエクスポートされた VM から VHD をアップロードできます。
オンプレミス VM を使用して作成された VHD または別のクラウドからエクスポートされた VHD をアップロードできます。 特殊化された VHD では、ユーザーアカウント、アプリケーション、その他のステート データが元の VM から保持されます。 新しい VM を作成するために VHD を使用する場合、以下のステップが完了していることを確認します。
- Windows VHD の Azure へのアップロードの準備。 Sysprep を使用して VM を一般化しないでください。
- VM にインストールされたゲストの仮想化ツールやエージェント (VMware tools) の削除。
- IP アドレスと DNS 設定を DHCP で取得するよう VM が構成されていることを確認。 これにより、サーバーが起動時に VNet 内の IP アドレスを取得します。
アップロードした VM イメージを格納するには、Azure にストレージ アカウントが必要です。 既存のストレージ アカウントを選択することも、新しいストレージ アカウントを作成することもできます。
使用できるストレージ アカウントを表示するには、次のように入力します。
Get-AzStorageAccount
既存のストレージ アカウントを使用する場合は、「VM イメージのアップロード」セクションに進みます。
ストレージ アカウントを作成する場合は、次の手順に従います。
ストレージ アカウントを作成するリソース グループ名が必要です。 サブスクリプションのすべてのリソース グループを検索するには、次のように入力します。
Get-AzResourceGroup
myResourceGroup という名前のリソース グループを米国西部リージョンで作成するには、次のように入力します。
New-AzResourceGroup -Name myResourceGroup -Location "West US"
New-AzStorageAccount コマンドレットを使用して、このリソース グループに mystorageaccount というストレージ アカウントを作成します。
New-AzStorageAccount -ResourceGroupName myResourceGroup -Name mystorageaccount -Location "West US" ` -SkuName "Standard_LRS" -Kind "Storage"
Add-AzVhd コマンドレットを使用して、ストレージ アカウント内のコンテナーにイメージをアップロードします。 この例では、ファイル myVHD.vhd を"C:\Users\Public\Documents\Virtual hard disks\"
から myResourceGroup リソース グループの mystorageaccount というストレージ アカウントにアップロードします。 ファイルは mycontainer というコンテナーに配置され、新しいファイル名は myUploadedVHD.vhd になります。
$rgName = "myResourceGroup"
$urlOfUploadedImageVhd = "https://mystorageaccount.blob.core.windows.net/mycontainer/myUploadedVHD.vhd"
Add-AzVhd -ResourceGroupName $rgName -Destination $urlOfUploadedImageVhd `
-LocalFilePath "C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd"
成功した場合、次のような応答を取得します。
MD5 hash is being calculated for the file C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd.
MD5 hash calculation is completed.
Elapsed time for the operation: 00:03:35
Creating new page blob of size 53687091712...
Elapsed time for upload: 01:12:49
LocalFilePath DestinationUri
------------- --------------
C:\Users\Public\Doc... https://mystorageaccount.blob.core.windows.net/mycontainer/myUploadedVHD.vhd
このコマンドは、ネットワーク接続や VHD ファイルのサイズによっては、完了に時間がかかることがあります。
別のストレージ アカウントに VHD をコピーして、新しい重複 VM を作成するときに使用できます。
次のことを確認してください。
- コピー元とコピー先のストレージ アカウントに関する情報があること。 コピー元の VM については、ストレージ アカウント名とコンテナー名が必要です。 通常、コンテナー名は vhds になります。 また、コピー先のストレージ アカウントも持っている必要があります。 まだお持ちでない場合は、ポータル (すべてのサービス> Storage アカウント > の追加) を使用するか、または新しい-azstorageaccountコマンドレットを使用して作成できます。
- AzCopy ツールをダウンロードしてインストール済みであること。
VM の割り当てを解除して、コピーする VHD を解放します。
- ポータル: [ Virtual machines>myvm> Stop] をクリックします。
- Powershell: リソースグループMyvmのMYVMという名前の vm を停止 (割り当て解除) するには、[停止-azvm ] を使用します。
Stop-AzVM -ResourceGroupName myResourceGroup -Name myVM
Azure Portal で VM の [状態] が [停止済み] から [停止済み (割り当て解除)] に変わります。
コピー元とコピー先のストレージ アカウントの URL が必要です。 URL は https://<storageaccount>.blob.core.windows.net/<containerName>/
のようになります。 ストレージ アカウント名とコンテナー名が既にわかっている場合は、かっこで囲まれた情報を置き換えるだけで、URL を作成できます。
Azure Portal または Azure PowerShell を使用して URL を取得できます。
- Portal: >[すべてのサービス]>[ストレージ アカウント]>[ストレージ アカウント]>[BLOB] の順にクリックすると、コピー元の VHD ファイルはおそらく vhds コンテナー内にあります。 コンテナーの [プロパティ] をクリックし、URL というラベルのテキストをコピーします。 コピー元およびコピー先の両方のコンテナーの URL が必要です。
- Powershell: get azvmを使用して、リソースグループmyvmのmyvmという名前の vm の情報を取得します。 その結果の Storage profile セクションで Vhd Uri を探します。 URI の最初の部分はコンテナーの URL、最後の部分は VM の OS VHD 名です。
Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myVM"
コピー元とコピー先のストレージ アカウントのアクセス キーを探します。 アクセス キーの詳細については、「 Azure ストレージ アカウントについて」を参照してください。
- Portal: [すべてのサービス]>[ストレージ アカウント]>[ストレージ アカウント]>[アクセス キー] の順にクリックします。 key1としてラベル付されているキーをコピーします。
- Powershell: AzStorageAccountKeyを使用して、リソースグループmyresourcegroupのストレージアカウントmystorageaccountのストレージキーを取得します。 key1 のラベルが付いているキーをコピーします。
Get-AzStorageAccountKey -Name mystorageaccount -ResourceGroupName myResourceGroup
AzCopy を使用して、ストレージ アカウント間でファイルをコピーすることができます。 コピー先のコンテナーについては、指定されたコンテナーが存在しない場合に作成されます。
AzCopy を使用するには、ローカル コンピューターでコマンド ウィンドウを開き、AzCopy がインストールされているフォルダーに移動します。 これは、C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy のようになります。
コンテナー内のすべてのファイルをコピーするには、/S スイッチを使用します。 OS VHD とすべてのデータ ディスクが同じコンテナーにある場合は、これを使用してそれらをコピーできます。 この例では、mysourcestorageaccount ストレージ アカウントのコンテナー mysourcecontainer 内にあるすべてのファイルを、mydestinationstorageaccount ストレージ アカウントのコンテナー mydestinationcontainer にコピーする方法を示します。 ストレージ アカウントとコンテナーの名前は、実際の名前に置き換えてください。
<sourceStorageAccountKey1>
と <destinationStorageAccountKey1>
は、実際のキーに置き換えてください。
AzCopy /Source:https://mysourcestorageaccount.blob.core.windows.net/mysourcecontainer `
/Dest:https://mydestinationatorageaccount.blob.core.windows.net/mydestinationcontainer `
/SourceKey:<sourceStorageAccountKey1> /DestKey:<destinationStorageAccountKey1> /S
複数のファイルが含まれているコンテナー内にある特定の VHD のみをコピーする場合は、/Pattern スイッチを使用してファイル名を指定することもできます。 この例では、myFileName.vhd という名前のファイルのみがコピーされます。
AzCopy /Source:https://mysourcestorageaccount.blob.core.windows.net/mysourcecontainer `
/Dest:https://mydestinationatorageaccount.blob.core.windows.net/mydestinationcontainer `
/SourceKey:<sourceStorageAccountKey1> /DestKey:<destinationStorageAccountKey1> `
/Pattern:myFileName.vhd
完了すると、次のようなメッセージが表示されます。
Finished 2 of total 2 file(s).
[2016/10/07 17:37:41] Transfer summary:
-----------------
Total files transferred: 2
Transfer successfully: 2
Transfer skipped: 0
Transfer failed: 0
Elapsed time: 00.00:13:07
- AZCopy の使用時に、[サーバーが要求の認証に失敗しました] というエラーが発生した場合は、Authorization ヘッダーの値が署名を含む正しい形式であることを確認します。 Key 2 (セカンダリ ストレージ キー) を使用している場合は、プライマリ ストレージ キー (最初のストレージ キー) を使ってみてください。
新しい VM によって使用されるネットワークおよびその他の VM のリソースを作成する必要があります。
仮想ネットワークの VNet とサブネットを作成します。
サブネットを作成します。 この例では、mySubNet という名前のサブネットをリソース グループ myResourceGroup に作成し、サブネットのアドレス プレフィックスを 10.0.0.0/24 に設定します。
$rgName = "myResourceGroup" $subnetName = "mySubNet" $singleSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24
vNet を作成します。 この例では、仮想ネットワーク名を myVnetName、場所を 米国西部、仮想ネットワークのアドレス プレフィックスを 10.0.0.0/16 に設定します。
$location = "West US" $vnetName = "myVnetName" $vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $location ` -AddressPrefix 10.0.0.0/16 -Subnet $singleSubnet
ネットワーク セキュリティ グループと RDP 規則の作成
RDP を使用して VM にログインできるようにするには、ポート 3389 で RDP アクセスを許可するセキュリティ規則が必要です。 新しい VM の VHD は既存の特殊化された VM から作成されたため、VM が作成された後は、RDP を使用してログオンするアクセス許可が付与されていたソースの仮想マシンから既存のアカウントを使用できます。 関連付けられるネットワーク インターフェイスを作成する前に、これを完了する必要があります。
この例では、NSG の名前を myNsg に設定し、RDP 規則の名前を myRdpRule に設定します。
$nsgName = "myNsg"
$rdpRule = New-AzNetworkSecurityRuleConfig -Name myRdpRule -Description "Allow RDP" `
-Access Allow -Protocol Tcp -Direction Inbound -Priority 110 `
-SourceAddressPrefix Internet -SourcePortRange * `
-DestinationAddressPrefix * -DestinationPortRange 3389
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $rgName -Location $location `
-Name $nsgName -SecurityRules $rdpRule
エンドポイントと NSG の規則について詳しくは、PowerShell を使用した Azure の VM へのポートの開放に関するページをご覧ください。
仮想ネットワークでの仮想マシンとの通信を有効にするには、 パブリック IP アドレス とネットワーク インターフェイスが必要です。
パブリック IP を作成します。 この例では、パブリック IP アドレス名を myIP に設定しています。
$ipName = "myIP" $pip = New-AzPublicIpAddress -Name $ipName -ResourceGroupName $rgName -Location $location ` -AllocationMethod Dynamic
NIC を作成します。 この例では、NIC 名を myNicName に設定しています。 また、この手順では、この NIC で以前に作成したネットワーク セキュリティ グループを利用します。
$nicName = "myNicName" $nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName $rgName ` -Location $location -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
この例では、VM 名を "myVM" に、VM のサイズを "Standard_A2" に設定します。
$vmName = "myVM"
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize "Standard_A2"
$vm = Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id
アップロードまたはコピーする VHD の URI を設定します。 この例では、myOsDisk.vhd という名前の VHD ファイルが myContainer というコンテナー内の myStorageAccount というストレージ アカウントに保持されています。
$osDiskUri = "https://myStorageAccount.blob.core.windows.net/myContainer/myOsDisk.vhd"
OS ディスクを追加します。 この例では、OS ディスクの作成時に、"osDisk" という語句を VM 名に追加して OS ディスクの名前にしています。 また、この例では、この Windows ベース VHD を OS ディスクとして VM に接続するように指定しています。
$osDiskName = $vmName + "osDisk" $vm = Set-AzVMOSDisk -VM $vm -Name $osDiskName -VhdUri $osDiskUri -CreateOption attach -Windows
省略可能: VM に接続する必要のあるデータ ディスクがある場合は、データ VHD の URL と、適切な論理ユニット番号 (Lun) を使用してデータ ディスクを追加します。
$dataDiskName = $vmName + "dataDisk"
$vm = Add-AzVMDataDisk -VM $vm -Name $dataDiskName -VhdUri $dataDiskUri -Lun 1 -CreateOption attach
ストレージ アカウントを使用する場合、データ ディスクおよびオペレーティング システム ディスクの URL は https://StorageAccountName.blob.core.windows.net/BlobContainerName/DiskName.vhd
のようになります。 ポータルでこれを見つけるには、ターゲット ストレージ コンテナーを参照し、コピーしたオペレーティング システムまたはデータ VHD をクリックして、URL の内容をコピーします。
先ほど作成した構成を使用して VM を作成します。
#Create the new VM
New-AzVM -ResourceGroupName $rgName -Location $location -VM $vm
このコマンドが成功した場合は、次のような出力が表示されます。
RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
True OK OK
新しく作成された VM は、Azure Portalの [すべてのサービス] の>[仮想マシン]、または次の PowerShell コマンドで確認できます。
$vmList = Get-AzVM -ResourceGroupName $rgName
$vmList.Name
新しい仮想マシンにサインインします。 詳しくは、「Windows が実行されている Azure 仮想マシンに接続してログオンする方法」をご覧ください。