Azure VM から非管理対象 VM イメージを作成する方法How to create an unmanaged VM image from an Azure VM

この記事では、ストレージ アカウントの使用について説明します。This article covers using storage accounts. ストレージ アカウントの代わりに、マネージド ディスクおよび管理対象イメージを使用することをお勧めします。We recommend that you use managed disks and managed images instead of a storage account. 詳細については、「Azure で一般化された VM の管理対象イメージをキャプチャする」を参照してください。For more information, see Capture a managed image of a generalized VM in Azure.

この記事では、ストレージ アカウントを使用し、Azure PowerShell を使用して、一般化された Azure VM のイメージを作成する方法について説明します。This article shows you how to use Azure PowerShell to create an image of a generalized Azure VM using a storage account. その後、そのイメージを使用して、別の VM を作成できます。You can then use the image to create another VM. イメージには、仮想マシンに接続された OS ディスクやデータ ディスクが含まれます。The image includes the OS disk and the data disks that are attached to the virtual machine. イメージには仮想ネットワーク リソースは含まれないため、新しい VM を作成するときにこれらのリソースを設定する必要があります。The image doesn't include the virtual network resources, so you need to set up those resources when you create the new VM.

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。For Az module installation instructions, see Install Azure PowerShell.

VM の汎用化Generalize the VM

このセクションでは、Windows 仮想マシンをイメージとして使用できるように一般化する方法について説明します。This section shows you how to generalize your Windows virtual machine for use as an image. VM の一般化とは、特に重要なこととして、すべての個人アカウント情報を削除して、マシンをイメージとして使用できるように準備することです。Generalizing a VM removes all your personal account information, among other things, and prepares the machine to be used as an image. Sysprep の詳細については、「How to Use Sysprep: An Introduction (Sysprep の使用方法: 紹介)」を参照してください。For details about Sysprep, see How to Use Sysprep: An Introduction.

コンピューター上で実行されるサーバー ロールが Sysprep でサポートされていることを確認します。Make sure the server roles running on the machine are supported by Sysprep. 詳しくは、「 Sysprep Support for Server RolesFor more information, see Sysprep Support for Server Roles

重要

初めて VHD を Azure にアップロードする場合は、Sysprep を実行する前に、VM の準備ができていることを確認してください。If you are uploading your VHD to Azure for the first time, make sure you have prepared your VM before running Sysprep.

sudo waagent -deprovision+user を使用して Linux VM を一般化してから、PowerShell を使用して VM をキャプチャすることもできます。You can also generalize a Linux VM using sudo waagent -deprovision+user and then use PowerShell to capture the VM. CLI を使用して VM をキャプチャする方法については、Azure CLI を使用して Linux 仮想マシンを一般化およびキャプチャする方法に関するページを参照してください。For information about using the CLI to capture a VM, see How to generalize and capture a Linux virtual machine using the Azure CLI.

  1. Windows 仮想マシンへのサインインSign in to the Windows virtual machine.

  2. 管理者としてコマンド プロンプト ウィンドウを開きます。Open the Command Prompt window as an administrator. ディレクトリを %windir%\system32\sysprep に変更し、sysprep.exe を実行します。Change the directory to %windir%\system32\sysprep, and then run sysprep.exe.

  3. [システム準備ツール] ダイアログ ボックスで [システムの OOBE (Out-of-Box Experience) に入る] を選択し、 [一般化する] チェック ボックスがオンになっていることを確認します。In the System Preparation Tool dialog box, select Enter System Out-of-Box Experience (OOBE), and make sure that the Generalize check box is selected.

  4. [シャットダウン オプション][シャットダウン] を選択します。In Shutdown Options, select Shutdown.

  5. Click OK.Click OK.

    Sysprep の開始

  6. Sysprep は完了時に仮想マシンをシャットダウンします。When Sysprep completes, it shuts down the virtual machine.

重要

Azure に VHD をアップロードするか VM からイメージを作成するまで、VM を再起動しないでください。Do not restart the VM until you are done uploading the VHD to Azure or creating an image from the VM. 誤って VM を再起動した場合は、もう一度 Sysprep を実行して一般化してください。If the VM accidentally gets restarted, run Sysprep to generalize it again.

Azure PowerShell へのログインLog in to Azure PowerShell

  1. Azure PowerShell を開き、Azure アカウントにサインインします。Open Azure PowerShell and sign in to your Azure account.

    Connect-AzAccount
    

    Azure アカウント資格情報を入力するためのポップアップ ウィンドウが開きます。A pop-up window opens for you to enter your Azure account credentials.

  2. 使用可能なサブスクリプションのサブスクリプション ID を取得します。Get the subscription IDs for your available subscriptions.

    Get-AzSubscription
    
  3. このサブスクリプション ID を使用して、適切なサブスクリプションを設定します。Set the correct subscription using the subscription ID.

    Select-AzSubscription -SubscriptionId "<subscriptionID>"
    

VM の割り当てを解除して、一般化状態に設定Deallocate the VM and set the state to generalized

重要

一般化済みとしてマークされた VM のタグを、追加、編集、削除することはできません。You cannot add, edit or remove tags from a VM once it is marked as generalized. VM にタグを追加したい場合は、一般化済みとしてマークする前に行ってください。If you want to add a tag to the VM, make sure you add the tags before marking it as generalized.

  1. VM リソースの割り当てを解除します。Deallocate the VM resources.

    Stop-AzVM -ResourceGroupName <resourceGroup> -Name <vmName>
    

    Azure Portal で VM の [状態][停止済み] から [停止済み (割り当て解除)] に変わります。The Status for the VM in the Azure portal changes from Stopped to Stopped (deallocated).

  2. 仮想マシンの状態を [一般化] に設定します。Set the status of the virtual machine to Generalized.

    Set-AzVm -ResourceGroupName <resourceGroup> -Name <vmName> -Generalized
    
  3. VM の状態を確認します。Check the status of the VM. VM の [OSState/generalized (OS の状態/一般化)] セクションの [DisplayStatus (ステータス表示)][VM が汎用化されました] に設定されています。The OSState/generalized section for the VM should have the DisplayStatus set to VM generalized.

    $vm = Get-AzVM -ResourceGroupName <resourceGroup> -Name <vmName> -Status
    $vm.Statuses
    

イメージの作成Create the image

次のコマンドを使用して、非管理対象仮想マシン イメージを宛先のストレージ コンテナー内に作成します。Create an unmanaged virtual machine image in the destination storage container using this command. イメージは、元の仮想マシンと同じストレージ アカウントに作成されます。The image is created in the same storage account as the original virtual machine. -Path パラメーターは、ソース VM の JSON テンプレートのコピーをローカル コンピューターに保存します。The -Path parameter saves a copy of the JSON template for the source VM to your local computer. -DestinationContainerName パラメーターは、イメージを格納するコンテナーの名前です。The -DestinationContainerName parameter is the name of the container that you want to hold your images. コンテナーが存在しない場合、コンテナーは自動的に作成されます。If the container doesn't exist, it is created for you.

Save-AzVMImage -ResourceGroupName <resourceGroupName> -Name <vmName> `
    -DestinationContainerName <destinationContainerName> -VHDNamePrefix <templateNamePrefix> `
    -Path <C:\local\Filepath\Filename.json>

イメージの URL は、JSON ファイル テンプレートから取得できます。You can get the URL of your image from the JSON file template. イメージの完全なパスは、resources > storageProfile > osDisk > image > uri セクションにあります。Go to the resources > storageProfile > osDisk > image > uri section for the complete path of your image. イメージの URL は https://<storageAccountName>.blob.core.windows.net/system/Microsoft.Compute/Images/<imagesContainer>/<templatePrefix-osDisk>.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.vhdのようになります。The URL of the image looks like: https://<storageAccountName>.blob.core.windows.net/system/Microsoft.Compute/Images/<imagesContainer>/<templatePrefix-osDisk>.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.vhd.

ポータルで URI を確認することもできます。You can also verify the URI in the portal. イメージは、ストレージ アカウントの system という名前のコンテナーにコピーされます。The image is copied to a container named system in your storage account.

イメージから VM を作成するCreate a VM from the image

これで、非管理対象イメージから 1 つ以上の VM を作成できるようになりました。Now you can create one or more VMs from the unmanaged image.

VHD の URI の設定Set the URI of the VHD

使用する VHD の URI は、 https://mystorageaccount.blob.core.windows.net/mycontainer/MyVhdName.vhd という形式になります。The URI for the VHD to use is in the format: https://mystorageaccount.blob.core.windows.net/mycontainer/MyVhdName.vhd. この例では、myVHD という名前の VHD がストレージ アカウント mystorageaccount のコンテナー mycontainer にあります。In this example the VHD named myVHD is in the storage account mystorageaccount in the container mycontainer.

$imageURI = "https://mystorageaccount.blob.core.windows.net/mycontainer/myVhd.vhd"

仮想ネットワークの作成Create a virtual network

仮想ネットワークの vNet とサブネットを作成します。Create the vNet and subnet of the virtual network.

  1. サブネットを作成します。Create the subnet. 次の例では、アドレス プレフィックス 10.0.0.0/24mySubnet という名前のサブネットをリソース グループ myResourceGroup に作成します。The following sample creates a subnet named mySubnet in the resource group myResourceGroup with the address prefix of 10.0.0.0/24.

    $rgName = "myResourceGroup"
    $subnetName = "mySubnet"
    $singleSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24
    
  2. 仮想ネットワークを作成します。Create the virtual network. 次の例では、アドレス プレフィックス 10.0.0.0/16myVnet という名前の仮想ネットワークを場所 West US に作成します。The following sample creates a virtual network named myVnet in the West US location with the address prefix of 10.0.0.0/16.

    $location = "West US"
    $vnetName = "myVnet"
    $vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $location `
        -AddressPrefix 10.0.0.0/16 -Subnet $singleSubnet
    

パブリック IP アドレスとネットワーク インターフェイスの作成Create a public IP address and network interface

仮想ネットワークでの仮想マシンとの通信を有効にするには、 パブリック IP アドレス とネットワーク インターフェイスが必要です。To enable communication with the virtual machine in the virtual network, you need a public IP address and a network interface.

  1. パブリック IP アドレスを作成します。Create a public IP address. この例では、myPip という名前のパブリック IP アドレスを作成します。This example creates a public IP address named myPip.

    $ipName = "myPip"
    $pip = New-AzPublicIpAddress -Name $ipName -ResourceGroupName $rgName -Location $location `
        -AllocationMethod Dynamic
    
  2. NIC を作成します。Create the NIC. この例では、myNic という名前の NIC を作成します。This example creates a NIC named myNic.

    $nicName = "myNic"
    $nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $location `
        -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id
    

ネットワーク セキュリティ グループと RDP 規則の作成Create the network security group and an RDP rule

RDP を使用して VM にログインできるようにするには、ポート 3389 で RDP アクセスを許可するセキュリティ規則が必要です。To be able to log in to your VM using RDP, you need to have a security rule that allows RDP access on port 3389.

この例では、myNsg という名前の NSG を作成します。この NSG には、ポート 3389 経由の RDP トラフィックを許可する myRdpRule という名前の規則が含まれています。This example creates an NSG named myNsg that contains a rule called myRdpRule that allows RDP traffic over port 3389. NSG の詳細については、PowerShell を使用した Azure の VM へのポートの開放に関するページを参照してください。For more information about NSGs, see Opening ports to a VM in Azure using PowerShell.

$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

仮想ネットワーク用の変数の作成Create a variable for the virtual network

変数を作成して、仮想ネットワークの作成を完了します。Create a variable for the completed virtual network.

$vnet = Get-AzVirtualNetwork -ResourceGroupName $rgName -Name $vnetName

VM の作成Create the VM

次の PowerShell は仮想マシンの構成を完了し、非管理対象イメージを新規インストールのソースとして使用します。The following PowerShell completes the virtual machine configurations and uses unmanaged image as the source for the new installation.


    # Enter a new user name and password to use as the local administrator account 
    # for remotely accessing the VM.
    $cred = Get-Credential

    # Name of the storage account where the VHD is located. This example sets the 
    # storage account name as "myStorageAccount"
    $storageAccName = "myStorageAccount"

    # Name of the virtual machine. This example sets the VM name as "myVM".
    $vmName = "myVM"

    # Size of the virtual machine. This example creates "Standard_D2_v2" sized VM. 
    # See the VM sizes documentation for more information: 
    # https://azure.microsoft.com/documentation/articles/virtual-machines-windows-sizes/
    $vmSize = "Standard_D2_v2"

    # Computer name for the VM. This examples sets the computer name as "myComputer".
    $computerName = "myComputer"

    # Name of the disk that holds the OS. This example sets the 
    # OS disk name as "myOsDisk"
    $osDiskName = "myOsDisk"

    # Assign a SKU name. This example sets the SKU name as "Standard_LRS"
    # Valid values for -SkuName are: Standard_LRS - locally redundant storage, Standard_ZRS - zone redundant
    # storage, Standard_GRS - geo redundant storage, Standard_RAGRS - read access geo redundant storage,
    # Premium_LRS - premium locally redundant storage. 
    $skuName = "Standard_LRS"

    # Get the storage account where the uploaded image is stored
    $storageAcc = Get-AzStorageAccount -ResourceGroupName $rgName -AccountName $storageAccName

    # Set the VM name and size
    $vmConfig = New-AzVMConfig -VMName $vmName -VMSize $vmSize

    #Set the Windows operating system configuration and add the NIC
    $vm = Set-AzVMOperatingSystem -VM $vmConfig -Windows -ComputerName $computerName `
        -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
    $vm = Add-AzVMNetworkInterface -VM $vm -Id $nic.Id

    # Create the OS disk URI
    $osDiskUri = '{0}vhds/{1}-{2}.vhd' `
        -f $storageAcc.PrimaryEndpoints.Blob.ToString(), $vmName.ToLower(), $osDiskName

    # Configure the OS disk to be created from the existing VHD image (-CreateOption fromImage).
    $vm = Set-AzVMOSDisk -VM $vm -Name $osDiskName -VhdUri $osDiskUri `
        -CreateOption fromImage -SourceImageUri $imageURI -Windows

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

VM 作成の確認Verify that the VM was created

完了したら、Azure Portal[参照] > [仮想マシン] にアクセスするか、次の PowerShell コマンドを使用して、新しく作成された VM を確認します。When complete, you should see the newly created VM in the Azure portal under Browse > Virtual machines, or by using the following PowerShell commands:

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

次の手順Next steps

Azure PowerShell で新しい仮想マシンを管理する方法については、 Azure Resource Manager と PowerShell を使用した仮想マシンの管理に関するページをご覧ください。To manage your new virtual machine with Azure PowerShell, see Manage virtual machines using Azure Resource Manager and PowerShell.