チュートリアル:Azure PowerShell を使用して Windows VM イメージを作成する

適用対象: ✔️ Windows VM ✔️ フレキシブル スケール セット

イメージを使用してデプロイのブートストラップを実行し、複数の VM で一貫性を確保することができます。 このチュートリアルでは、PowerShell を使用して Azure 仮想マシンの独自の特殊化されたイメージを作成し、Azure Compute Gallery (旧称 Shared Image Gallery) に保存します。 学習内容は次のとおりです。

  • Azure Compute Gallery を作成する
  • イメージ定義を作成する
  • イメージ バージョンを作成する
  • イメージから VM を作成する
  • ギャラリーを共有する

開始する前に

以下の手順では、既存の VM を取得し、新しい VM の作成に使用できる再利用可能なカスタム イメージに変換する方法について詳しく説明します。

このチュートリアルの例を完了するには、既存の仮想マシンが必要です。 必要に応じて、PowerShell クイックスタートを参照して、このチュートリアルで使用する VM を作成できます。 このチュートリアルを実行するときは、リソース名を適宜置き換えてください。

概要

Azure Compute Gallery により、組織全体でのカスタム イメージの共有が簡素化されます。 カスタム イメージは Marketplace のイメージに似ていますが、カスタム イメージは自分で作成します。 カスタム イメージは、アプリケーションのプリロード、アプリケーションの構成、その他の OS 構成などの構成のブートストラップを実行するために使用できます。

Azure Compute Gallery を使用すると、カスタム VM イメージを他のユーザーと共有できます。 どのイメージを共有するか、どのリージョンでそのイメージを使用できるようにするか、および、だれと共有するかを選択することができます。

Azure Compute Gallery 機能には、次のような複数のリソースの種類があります。

リソース 説明
イメージのソース これは、ギャラリーにイメージ バージョンを作成するために使用できるリソースです。 イメージのソースには、一般化または特殊化された既存の Azure VM、マネージド イメージ、スナップショット、または別のギャラリー内のイメージ バージョンを使用できます。
[ギャラリー] Azure Marketplace と同様に、ギャラリーは、イメージと VM アプリケーションを管理して共有するためのリポジトリです。ただし、だれがアクセスできるかは、ユーザーが制御します。
イメージ定義 イメージ定義はギャラリー内に作成され、内部で使用するためにイメージと要件に関する情報を伝達します。 この情報には、イメージが Windows または Linux のどちらか、リリース ノート、および最小と最大のメモリ要件が含まれます。 これは、イメージの種類の定義です。
イメージ バージョン イメージ バージョンは、ギャラリーを利用している場合に、VM の作成に使用します。 お使いの環境に必要な複数のイメージ バージョンを保持できます。 マネージド イメージのように、イメージ バージョンを使用して VM を作成する場合、イメージ バージョンは VM 用の新しいディスクを作成するために使用されます。 イメージ バージョンは複数回、使用できます。

Azure Cloud Shell を起動する

Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。

Cloud Shell を開くには、コード ブロックの右上隅にある [使ってみる] を選択します。 https://shell.azure.com/powershell に移動して、別のブラウザー タブで Cloud Shell を起動することもできます。 [コピー] を選択してコードのブロックをコピーし、Cloud Shell に貼り付けてから、Enter キーを押して実行します。

VM を取得する

リソース グループで利用できる VM は、Get-AzVM を使用して一覧表示できます。 VM の名前とリソース グループがわかったら、もう一度 Get-AzVM を使用して VM オブジェクトを取得し、後で使用できるよう変数に格納することができます。 この例では、sourceVM という名前の VM を myResourceGroup リソース グループから取得し、変数 $sourceVM に割り当てています。

$sourceVM = Get-AzVM `
   -Name sourceVM `
   -ResourceGroupName myResourceGroup

リソース グループを作成する

New-AzResourceGroup コマンドでリソース グループを作成します。

Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 次の例では、myGalleryRG という名前のリソース グループが EastUS リージョンに作成されます。

$resourceGroup = New-AzResourceGroup `
   -Name 'myGalleryRG' `
   -Location 'EastUS'

ギャラリーは、イメージの共有を有効にするために使用されるプライマリ リソースです。 ギャラリー名で許可されている文字は、英字 (大文字または小文字)、数字、ドット、およびピリオドです。 ギャラリー名にダッシュを含めることはできません。 ギャラリー名は、お使いのサブスクリプション内で一意にする必要があります。

ギャラリーは、New-AzGallery を使用して作成します。 次の例では、myGalleryRG リソース グループに myGallery という名前のギャラリーを作成します。

$gallery = New-AzGallery `
   -GalleryName 'myGallery' `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $resourceGroup.Location `
   -Description 'Azure Compute Gallery for my organization'	

イメージ定義を作成する

イメージ定義では、イメージの論理グループを作成します。 これは、その中に作成されるイメージ バージョンに関する情報を管理するために使用されます。 イメージ定義名は、大文字または小文字、数字、ドット、ダッシュおよびピリオドで構成できます。 イメージ定義に指定できる値の詳細については、イメージ定義に関するページを参照してください。

イメージの定義は、New-AzGalleryImageDefinition を使用して作成します。 この例では、ギャラリー イメージは myGalleryImage という名前で、特殊化されたイメージ用に作成されています。

$galleryImage = New-AzGalleryImageDefinition `
   -GalleryName $gallery.Name `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $gallery.Location `
   -Name 'myImageDefinition' `
   -OsState specialized `
   -OsType Windows `
   -Publisher 'myPublisher' `
   -Offer 'myOffer' `
   -Sku 'mySKU'

イメージ バージョンを作成する

New-AzGalleryImageVersion を使用して、VM からイメージ バージョンを作成します。

イメージ バージョンで許可されている文字は、数字とピリオドです。 数字は、32 ビット整数の範囲内になっている必要があります。 形式:MajorVersion.MinorVersion.Patch

この例のイメージ バージョンは 1.0.0 で、"米国東部" と "米国中南部" の両方のデータセンターにレプリケートされます。 レプリケーションのターゲット リージョンを選択するときは、レプリケーションのターゲットとして "ソース" リージョンを含める必要があります。

VM からイメージ バージョンを作成するには、-Source$vm.Id.ToString() を使用します。

   $region1 = @{Name='South Central US';ReplicaCount=1}
   $region2 = @{Name='East US';ReplicaCount=2}
   $targetRegions = @($region1,$region2)

New-AzGalleryImageVersion `
   -GalleryImageDefinitionName $galleryImage.Name`
   -GalleryImageVersionName '1.0.0' `
   -GalleryName $gallery.Name `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $resourceGroup.Location `
   -TargetRegion $targetRegions  `
   -Source $sourceVM.Id.ToString() `
   -PublishingProfileEndOfLifeDate '2030-12-01'

イメージをすべてのターゲット リージョンにレプリケートするにはしばらく時間がかかる場合があります。

VM の作成

特殊化されたイメージが用意できたら、新しい VM を 1 つ以上作成できます。 New-AzVM コマンドレットの使用。 このイメージを使用するには、Set-AzVMSourceImage を使用し、-Id をイメージ定義 ID (この場合は $galleryImage.Id) に設定して、常に最新のイメージ バージョンを使用します。

必要に応じて、この例のリソース名を置き換えてください。

# Create some variables for the new VM.
$resourceGroup = "myResourceGroup"
$location = "South Central US"
$vmName = "mySpecializedVM"

# Create a resource group
New-AzResourceGroup -Name $resourceGroup -Location $location

# Create the network resources.
$subnetConfig = New-AzVirtualNetworkSubnetConfig -Name mySubnet -AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork -ResourceGroupName $resourceGroup -Location $location `
  -Name MYvNET -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig
$pip = New-AzPublicIpAddress -ResourceGroupName $resourceGroup -Location $location `
  -Name "mypublicdns$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP  -Protocol Tcp `
  -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
  -DestinationPortRange 3389 -Access Deny
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
  -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface -Name $vmName -ResourceGroupName $resourceGroup -Location $location `
  -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id

# Create a virtual machine configuration using $imageVersion.Id to specify the image version.
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1_v2 | `
Set-AzVMSourceImage -Id $galleryImage.Id | `
Add-AzVMNetworkInterface -Id $nic.Id

# Create a virtual machine
New-AzVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig

ギャラリー レベルでアクセスを共有することをお勧めします。 電子メール アドレスと Get-AzADUser コマンドレットを使用して、ユーザーのオブジェクト ID を取得し、New-AzRoleAssignment を使用して、ギャラリーへのアクセス権を付与します。 この例のサンプル電子メール alinne_montes@contoso.com を独自の情報に置き換えます。

# Get the object ID for the user
$user = Get-AzADUser -StartsWith alinne_montes@contoso.com
# Grant access to the user for our gallery
New-AzRoleAssignment `
   -ObjectId $user.Id `
   -RoleDefinitionName Reader `
   -ResourceName $gallery.Name `
   -ResourceType Microsoft.Compute/galleries `
   -ResourceGroupName $resourceGroup.ResourceGroupName

リソースをクリーンアップする

必要がなくなったら、Remove-AzResourceGroup コマンドレットを使用して、リソース グループおよびすべての関連リソースを削除できます。

# Delete the gallery 
Remove-AzResourceGroup -Name myGalleryRG

# Delete the VM
Remove-AzResourceGroup -Name myResoureceGroup

Azure Image Builder

Azure では、Packer 上に構築された Azure VM Image Builder サービスも提供しています。 テンプレートにカスタマイズを記述するだけで、イメージの作成が処理されます。

次のステップ

このチュートリアルでは、特殊化された VM イメージを作成しました。 以下の方法を学習しました。

  • Azure Compute Gallery を作成する
  • イメージ定義を作成する
  • イメージ バージョンを作成する
  • イメージから VM を作成する
  • ギャラリーを共有する

次のチュートリアルに進み、Virtual Machine Scale Sets について学習してください。