次の方法で共有


Azure VM からアンマネージド VM イメージを作成する方法

この記事では、ストレージ アカウントの使用について説明します。 ストレージ アカウントではなく、マネージド ディスクとマネージド イメージを使用することをお勧めします。 詳細については、「 Azure で一般化された VM のマネージド イメージをキャプチャする」を参照してください。

この記事では、Azure PowerShell を使用して、ストレージ アカウントを使用して一般化された Azure VM のイメージを作成する方法について説明します。 その後、イメージを使用して別の VM を作成できます。 イメージには、仮想マシンに接続されている OS ディスクとデータ ディスクが含まれます。 イメージには仮想ネットワーク リソースが含まれていないため、新しい VM を作成するときにそれらのリソースを設定する必要があります。

VM を一般化する

このセクションでは、イメージとして使用するために Windows 仮想マシンを一般化する方法について説明します。 VM を一般化すると、すべての個人アカウント情報が削除され、イメージとして使用されるマシンが準備されます。 Sysprep の詳細については、「 Sysprep の使用方法: 概要」を参照してください。

コンピューター上で実行されるサーバー ロールが Sysprep でサポートされていることを確認します。 詳細については、「サーバー ロールの Sysprep サポート 」を参照してください。

重要

初めて VHD を Azure にアップロードする場合は、Sysprep を実行する前に VM を準備 していることを確認してください。

sudo waagent -deprovision+user を使用して Linux VM を一般化し、PowerShell を使用して VM をキャプチャすることもできます。 CLI を使用して VM をキャプチャする方法については、「 Azure CLI を使用して Linux 仮想マシンを一般化してキャプチャする方法」を参照してください。

  1. Windows 仮想マシンへのサインイン

  2. 管理者としてコマンド プロンプト ウィンドウを開きます。 ディレクトリを \system32\sysprep %windir%に変更し、sysprep.exe実行します。

  3. [ システム準備ツール ] ダイアログ ボックスで、[ システムの Out-of-Box Experience (OOBE) の入力] を選択し、[ 汎用化 ] チェック ボックスがオンになっていることを確認します。

  4. [ シャットダウン オプション] で、[シャットダウン] を選択 します

  5. [ OK] をクリックします

    Sysprep を起動する

  6. Sysprep が完了すると、仮想マシンがシャットダウンされます。

重要

VHD の Azure へのアップロードまたは VM からのイメージの作成が完了するまで、VM を再起動しないでください。 VM が誤って再起動された場合は、Sysprep を実行して再び一般化します。

Azure PowerShell にログインする

  1. Azure PowerShell を開き、Azure アカウントにサインインします。

    Connect-AzAccount
    

    Azure アカウントの資格情報を入力するためのポップアップ ウィンドウが開きます。

  2. 使用可能なサブスクリプションのサブスクリプション ID を取得します。

    Get-AzSubscription
    
  3. サブスクリプション ID を使用して正しいサブスクリプションを設定します。

    Select-AzSubscription -SubscriptionId "<subscriptionID>"
    

VM の割り当てを解除し、状態を汎用化に設定する

重要

一般化済みとしてマークされると、VM にタグを追加、編集、または削除することはできません。 VM にタグを追加する場合は、タグを一般化済みとしてマークする前に、必ずタグを追加してください。

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

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

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

  2. 仮想マシンの状態を [一般化済み] に設定します。

    Set-AzVm -ResourceGroupName <resourceGroup> -Name <vmName> -Generalized
    
  3. VM の状態を確認します。 VM の OSState/一般化 セクションでは、DisplayStatus一般化 VM に設定されている必要があります。

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

イメージの作成

このコマンドを使用して、ターゲット ストレージ コンテナーにアンマネージド仮想マシン イメージを作成します。 イメージは、元の仮想マシンと同じストレージ アカウントに作成されます。 -Path パラメーターは、ソース VM の JSON テンプレートのコピーをローカル コンピューターに保存します。 -DestinationContainerName パラメーターは、イメージを保持するコンテナーの名前です。 コンテナーが存在しない場合は、自動的に作成されます。

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

JSON ファイル テンプレートからイメージの URL を取得できます。 イメージの完全なパスについては、 resources>storageProfile>osDisk>image>uri セクションに移動します。 画像の URL は次のようになります: https://<storageAccountName>.blob.core.windows.net/system/Microsoft.Compute/Images/<imagesContainer>/<templatePrefix-osDisk>.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.vhd.

ポータルで URI を確認することもできます。 イメージは、ストレージ アカウント内の system という名前のコンテナーにコピーされます。

イメージから VM を作成する

これで、アンマネージド イメージから 1 つ以上の VM を作成できます。

VHD の URI を設定する

使用する VHD の URI は、https:// mystorageaccount.blob.core.windows.net/mycontainer/MyVhdName.vhd の形式です。 この例では、myVHD という名前の VHD は、コンテナー mycontainer のストレージ アカウント mystorageaccount にあります。

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

仮想ネットワークを作成する

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

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

    $rgName = "myResourceGroup"
    $subnetName = "mySubnet"
    $singleSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24
    
  2. 仮想ネットワークを作成します。 次の例では、アドレス プレフィックスが 10.0.0.0/16myVnet という名前の仮想ネットワークを米国西部の場所に作成します。

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

パブリック IP アドレスとネットワーク インターフェイスを作成する

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

  1. パブリック IP アドレスを作成します。 この例では、myPip という名前のパブリック IP アドレスを作成します。

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

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

ネットワーク セキュリティ グループと RDP 規則を作成する

RDP を使用して VM にログインできるようにするには、ポート 3389 での RDP アクセスを許可するセキュリティ規則が必要です。

この例では、ポート 3389 経由の RDP トラフィックを許可する myRdpRule という規則を含む myNsg という名前の NSG を作成します。 NSG の詳細については、「 PowerShell を使用して Azure で VM へのポートを開く」を参照してください。

$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

仮想ネットワークの変数を作成する

完成した仮想ネットワークの変数を作成します。

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

VM の作成

次の PowerShell は、仮想マシンの構成を完了し、新しいインストールのソースとしてアンマネージド イメージを使用します。


    # 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 が作成されたことを確認する

完了すると、 Azure portal の [ 参照>仮想マシン] の下に、または次の PowerShell コマンドを使用して、新しく作成された VM が表示されます。

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

次のステップ

Azure PowerShell を使用して新しい仮想マシンを管理するには、「Azure Resource Manager と PowerShell を使用した仮想マシンの管理」を参照してください。