ストレージ アカウント内の特殊化された VHD から VM を作成する

PowerShell を使用して、特殊化されたアンマネージド ディスクを OS ディスクとして接続して、新しい VM を作成します。 特殊化されたディスクは、元の VM のユーザー アカウント、アプリケーション、およびその他の状態データを保持する既存の VM からの VHD のコピーです。

次の 2 つのオプションがあります。

オプション 1: 特殊化された VHD をアップロードする

HYPER-V などのオンプレミスの仮想化ツールで作成された特殊な VM から VHD をアップロードするか、別のクラウドからエクスポートされた VM から VHD をアップロードできます。

VM を準備する

オンプレミスの VM または別のクラウドからエクスポートされた VHD を使用して作成された特殊化された VHD をアップロードできます。 特殊化された VHD では、元の VM のユーザー アカウント、アプリケーション、およびその他の状態データが保持されます。 VHD as-is を使用して新しい VM を作成する場合は、次の手順が完了していることを確認します。

  • AzureにアップロードするためのWindows VHDを準備します。 Sysprep を使用して VM を一般化しないでください
  • VM にインストールされているゲスト仮想化ツールとエージェント (VMware ツールなど) をすべて削除します。
  • VM が DHCP 経由で IP アドレスと DNS 設定をプルするように構成されていることを確認します。 これにより、サーバーが起動時に VNet 内の IP アドレスを取得できるようになります。

ストレージ アカウントを取得する

アップロードした VM イメージを格納するには、Azure にストレージ アカウントが必要です。 既存のストレージ アカウントを選択することも、新しいストレージ アカウントを作成することもできます。

使用可能なストレージ アカウントを表示するには、次のように入力します。

Get-AzStorageAccount

既存のストレージ アカウントを使用する場合は、「VM イメージのアップロード」セクションに進みます。

ストレージ アカウントを作成する必要がある場合は、次の手順に従います。

  1. ストレージ アカウントを作成するリソース グループの名前が必要です。 サブスクリプション内のすべてのリソース グループを確認するには、次のように入力します。

    Get-AzResourceGroup
    

    西米国リージョンにmyResourceGroupという名前のリソースグループを作成するには、次のコマンドを入力します。

    New-AzResourceGroup -Name myResourceGroup -Location "West US"
    
  2. New-AzStorageAccount #C3 コマンドレットを使用して、このリソース グループに「mystorageaccount」という名前のストレージ アカウントを作成します。

    New-AzStorageAccount -ResourceGroupName myResourceGroup -Name mystorageaccount -Location "West US" `
        -SkuName "Standard_LRS" -Kind "Storage"
    

ストレージ アカウントに VHD をアップロードする

Add-AzVhd コマンドレットを使用して、ストレージアカウント内のコンテナーにイメージをアップロードします。 この例では、myVHD.vhd ファイルを "C:\Users\Public\Documents\Virtual hard disks\" から、myResourceGroup リソース グループ内のmystorageaccountという名前のストレージ アカウントにアップロードします。 ファイルは mycontainer #C1 #B0 名前のコンテナーに配置され、新しいファイル名は myUploadedVHD.vhd #A3 #B2 されます。

$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 ファイルのサイズによっては、このコマンドが完了するまでに時間がかかる場合があります。

オプション 2: 既存の Azure VM から VHD をコピーする

新しい重複する VM を作成するときに使用する別のストレージ アカウントに VHD をコピーできます。

開始する前に

次のことを確認してください。

  • ソース ストレージ アカウントと移行先ストレージ アカウントに関する情報を用意します。 ソース VM の場合は、ストレージ アカウントとコンテナー名が必要です。 通常、コンテナー名は vhd になります。 また、宛先ストレージ アカウントも必要です。 まだお持ちでない場合は、ポータル (すべてのサービス> ストレージ アカウント > 追加) または New-AzStorageAccount コマンドレットを使用して作成できます。
  • AzCopy ツールをダウンロードしてインストールしました。

VM の割り当てを解除する

VM の割り当てを解除して、コピー可能な状態に VHD を解放します。

  • ポータル: 仮想マシン>myVM> を停止するをクリックします。
  • Powershell: Stop-AzVM を使用して、リソース グループ myResourceGroup 内の myVM という名前の VM を停止 (割り当て解除) します。
Stop-AzVM -ResourceGroupName myResourceGroup -Name myVM

Azure portal の VM の 状態 は、停止 から Stopped (割り当て解除済み)に変わります。

ストレージ アカウントの URL を取得する

ソース ストレージ アカウントと移行先ストレージ アカウントの URL が必要です。 URL は次のようになります: https://<storageaccount>.blob.core.windows.net/<containerName>/。 ストレージ アカウントとコンテナー名が既にわかっている場合は、角かっこの間の情報を置き換えて URL を作成できます。

Azure portal または Azure Powershell を使用して URL を取得できます。

  • ポータル: >で>をクリックし、ストレージ アカウント>ストレージ アカウント>Blobsに進んでから、ソース VHD ファイルが vhds コンテナー内にある可能性があります。 コンテナーの [プロパティ ] をクリックし、 URL というラベルが付いたテキストをコピーします。 ソース コンテナーと移行先コンテナーの両方の URL が必要です。
  • Powershell: Get-AzVM を使用して、リソース グループ myResourceGroup 内の myVM という名前の VM の情報を取得します。 結果で、[ ストレージ プロファイル ] セクションで Vhd Uri を探します。 URI の最初の部分はコンテナーの URL であり、最後の部分は VM の OS VHD 名です。
Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myVM"

ストレージ アクセス キーを取得する

ソース ストレージ アカウントと移行先ストレージ アカウントのアクセス キーを検索します。 アクセス キーの詳細については、「 Azure ストレージ アカウントについて」を参照してください。

  • ポータル: [ すべてのサービス>アカウント>ストレージ アカウント>アクセス キー] をクリックします。 key1 というラベルの付いたキーをコピーします。
  • Powershell: Get-AzStorageAccountKey を使用して、リソース グループ myResourceGroup のストレージ アカウント mystorageaccount のストレージ キーを取得します。 key1 というラベルの付いたキーをコピーします。
Get-AzStorageAccountKey -Name mystorageaccount -ResourceGroupName myResourceGroup

VHD をコピーする

AzCopy を使用して、ストレージ アカウント間でファイルをコピーできます。 宛先コンテナーの場合、指定したコンテナーが存在しない場合は、自動的に作成されます。

AzCopy を使用するには、ローカル コンピューターでコマンド プロンプトを開き、AzCopy がインストールされているフォルダーに移動します。 C:\Program Files (x86)\Microsoft SDK\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 ヘッダーの値が署名を含めて正しく形成されていることを確認します。 キー 2 またはセカンダリ ストレージ キーを使用している場合は、プライマリまたは第 1 のストレージ キーを使用してみてください。

新しい VM を作成する

新しい VM で使用するネットワークやその他の VM リソースを作成する必要があります。

サブネットと vNet を作成する

仮想ネットワークの vNet とサブネットを作成します。

  1. サブネットを作成します。 この例では、リソース グループ myResourceGroupmySubNet という名前のサブネットを作成し、サブネット アドレス プレフィックスを 10.0.0.0/24 に設定します。

    $rgName = "myResourceGroup"
    $subnetName = "mySubNet"
    $singleSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24
    
  2. 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 アドレスと NIC を作成する

仮想ネットワーク内の仮想マシンとの通信を有効にするには、パブリック IP アドレス とネットワーク インターフェイスが必要です。

  1. パブリック IP を作成します。 この例では、パブリック IP アドレス名が myIP に設定されています。

    $ipName = "myIP"
    $pip = New-AzPublicIpAddress -Name $ipName -ResourceGroupName $rgName -Location $location `
        -AllocationMethod Dynamic
    
  2. 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 の名前とサイズを設定する

この例では、VM 名を "myVM" に設定し、VM サイズを "Standard_A2" に設定します。

$vmName = "myVM"
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize "Standard_A2"

NIC を追加する

$vm = Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id

OS ディスクを構成する

  1. アップロードまたはコピーした VHD の URI を設定します。 この例では、myOsDisk.vhd という名前の VHD ファイルは、myContainer という名前のコンテナー内の myStorageAccount という名前のストレージ アカウントに保持されます。

    $osDiskUri = "https://myStorageAccount.blob.core.windows.net/myContainer/myOsDisk.vhd"
    
  2. OS ディスクを追加します。 この例では、OS ディスクが作成されるときに、VM 名に "osDisk" という用語が追加され、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 を完了する

先ほど作成した構成を使用して VM を作成します。

#Create the new VM
New-AzVM -ResourceGroupName $rgName -Location $location -VM $vm

このコマンドが成功した場合、次のような出力が表示されます。

RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK OK   

VM が作成されたことを確認する

新しく作成された VM は、 Azure portalすべてのサービス>仮想マシン、または次の PowerShell コマンドを使用して表示されます。

$vmList = Get-AzVM -ResourceGroupName $rgName
$vmList.Name

次のステップ

新しい仮想マシンにサインインします。 詳細については、「 Windows を実行している Azure 仮想マシンに接続してログオンする方法」を参照してください。