この記事では、ストレージ アカウントの使用について説明します。 ストレージ アカウントではなく、マネージド ディスクとマネージド イメージを使用することをお勧めします。 詳細については、「 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 仮想マシンを一般化してキャプチャする方法」を参照してください。
Windows 仮想マシンへのサインイン
管理者としてコマンド プロンプト ウィンドウを開きます。 ディレクトリを \system32\sysprep %windir%に変更し、
sysprep.exe
実行します。[ システム準備ツール ] ダイアログ ボックスで、[ システムの Out-of-Box Experience (OOBE) の入力] を選択し、[ 汎用化 ] チェック ボックスがオンになっていることを確認します。
[ シャットダウン オプション] で、[シャットダウン] を選択 します。
[ OK] をクリックします。
Sysprep が完了すると、仮想マシンがシャットダウンされます。
重要
VHD の Azure へのアップロードまたは VM からのイメージの作成が完了するまで、VM を再起動しないでください。 VM が誤って再起動された場合は、Sysprep を実行して再び一般化します。
Azure PowerShell にログインする
Azure PowerShell を開き、Azure アカウントにサインインします。
Connect-AzAccount
Azure アカウントの資格情報を入力するためのポップアップ ウィンドウが開きます。
使用可能なサブスクリプションのサブスクリプション ID を取得します。
Get-AzSubscription
サブスクリプション ID を使用して正しいサブスクリプションを設定します。
Select-AzSubscription -SubscriptionId "<subscriptionID>"
VM の割り当てを解除し、状態を汎用化に設定する
重要
一般化済みとしてマークされると、VM にタグを追加、編集、または削除することはできません。 VM にタグを追加する場合は、タグを一般化済みとしてマークする前に、必ずタグを追加してください。
VM リソースの割り当てを解除します。
Stop-AzVM -ResourceGroupName <resourceGroup> -Name <vmName>
Azure portal の VM の 状態 が [停止済み ] から [ 停止済み ( 割り当て解除)] に変わります。
仮想マシンの状態を [一般化済み] に設定します。
Set-AzVm -ResourceGroupName <resourceGroup> -Name <vmName> -Generalized
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 とサブネットを作成します。
サブネットを作成します。 次の例では、アドレス プレフィックスが 10.0.0.0/24 の myResourceGroup リソース グループに mySubnet という名前のサブネットを作成します。
$rgName = "myResourceGroup" $subnetName = "mySubnet" $singleSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24
仮想ネットワークを作成します。 次の例では、アドレス プレフィックスが 10.0.0.0/16 の myVnet という名前の仮想ネットワークを米国西部の場所に作成します。
$location = "West US" $vnetName = "myVnet" $vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $location ` -AddressPrefix 10.0.0.0/16 -Subnet $singleSubnet
パブリック IP アドレスとネットワーク インターフェイスを作成する
仮想ネットワーク内の仮想マシンとの通信を有効にするには、 パブリック IP アドレス とネットワーク インターフェイスが必要です。
パブリック IP アドレスを作成します。 この例では、myPip という名前のパブリック IP アドレスを作成します。
$ipName = "myPip" $pip = New-AzPublicIpAddress -Name $ipName -ResourceGroupName $rgName -Location $location ` -AllocationMethod Dynamic
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 を使用した仮想マシンの管理」を参照してください。