チュートリアル: Azure PowerShell を使用した仮想マシン スケール セットのカスタム イメージの作成および使用
スケール セットを作成するときは、VM インスタンスのデプロイ時に使用するイメージを指定します。 VM インスタンスをデプロイした後のタスクの数を減らすには、カスタム VM イメージを使用できます。 このカスタム VM イメージには、すべての必要なアプリケーション インストールまたは構成が含まれます。 スケール セットで作成されたすべての VM インスタンスは、カスタム VM イメージを使用し、アプリケーション トラフィックを処理できる状態になります。 このチュートリアルで学習する内容は次のとおりです。
- Azure Compute Gallery を作成する
- イメージ定義を作成する
- イメージ バージョンを作成する
- イメージからスケールセットを作成する
- イメージ ギャラリーを共有する
Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
Azure Cloud Shell を起動する
Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。
Cloud Shell を開くには、コード ブロックの右上隅にある [使ってみる] を選択します。 https://shell.azure.com/powershell に移動して、別のブラウザー タブで Cloud Shell を起動することもできます。 [コピー] を選択してコードのブロックをコピーし、Cloud Shell に貼り付けてから、Enter キーを押して実行します。
ソース VM の作成と構成
最初に New-AzResourceGroup を使用してリソース グループを作成し、次に New-AzVM を使用して VM を作成します。 この VM は、イメージのソースとして使用されます。 次の例では、myResourceGroup という名前のリソース グループに myVM という名前の VM を作成します。
New-AzResourceGroup -Name 'myResourceGroup' -Location 'EastUS'
New-AzVm `
-ResourceGroupName 'myResourceGroup' `
-Name 'myVM' `
-Location 'East US' `
-VirtualNetworkName 'myVnet' `
-SubnetName 'mySubnet' `
-SecurityGroupName 'myNetworkSecurityGroup' `
-PublicIpAddressName 'myPublicIpAddress' `
-OpenPorts 80,3389
VM 変数を格納する
リソース グループで利用できる VM は、Get-AzVM を使用して一覧表示できます。 VM の名前とリソース グループがわかったら、もう一度 Get-AzVM
を使用して VM オブジェクトを取得し、後で使用できるよう変数に格納することができます。 この例では、myVM という名前の VM を "myResourceGroup" リソース グループから取得し、変数 $vm に割り当てています。
$sourceVM = Get-AzVM `
-Name myVM `
-ResourceGroupName myResourceGroup
イメージ ギャラリーを作成する
イメージ ギャラリーは、イメージの共有を有効にするために使用されるプライマリ リソースです。 ギャラリー名で許可されている文字は、英字 (大文字または小文字)、数字、ドット、およびピリオドです。 ギャラリー名にダッシュを含めることはできません。 ギャラリー名は、お使いのサブスクリプション内で一意にする必要があります。
イメージ ギャラリーは、New-AzGallery を使用して作成します。 次の例では、myGalleryRG リソース グループに myGallery という名前のギャラリーを作成します。
$resourceGroup = New-AzResourceGroup `
-Name 'myGalleryRG' `
-Location 'EastUS'
$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 '2023-12-01'
イメージをすべてのターゲット リージョンにレプリケートするにはしばらく時間がかかる場合があります。
イメージからスケール セットを作成する
New-AzVmss を使用して、スケール セットを作成します。このとき、-ImageName
パラメーターを使用して、前の手順で作成したカスタム VM イメージを定義します。 個々の VM インスタンスにトラフィックを分散するために、ロード バランサーも作成されます。 ロード バランサーには、TCP ポート 80 上のトラフィックを分散するルールだけでなく、TCP ポート 3389 上のリモート デスクトップ トラフィックと TCP ポート 5985 上の PowerShell リモート処理を許可するルールも含まれています。 メッセージが表示されたら、スケール セット内の VM インスタンス用の自分の管理者資格情報を指定します。
重要
2023 年 11 月以降、PowerShell と Azure CLI を使用して作成された VM スケール セットは、オーケストレーション モードが指定されていない場合、既定でフレキシブル オーケストレーション モードになります。 この変更の詳細と実行する必要があるアクションについては、「VMSS PowerShell/CLI のお客様向けの重大な変更 - Microsoft Community Hub」を参照してください
# Define variables for the scale set
$resourceGroupName = "myScaleSet"
$scaleSetName = "myScaleSet"
$location = "East US"
# Create a resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location $location
# Create a configuration
$vmssConfig = New-AzVmssConfig `
-Location $location `
-OrchestrationMode Flexible `
-SkuCapacity 2 `
-SkuName "Standard_D2s_v3"
# Reference the image version
Set-AzVmssStorageProfile $vmssConfig `
-OsDiskCreateOption "FromImage" `
-ImageReferenceId $galleryImage.Id
# Create the scale set
New-AzVmss `
-ResourceGroupName $resourceGroupName `
-Name $scaleSetName `
-VirtualMachineScaleSet $vmssConfig
すべてのスケール セットのリソースと VM を作成および構成するのに数分かかります。
ギャラリーを共有する
イメージ ギャラリー レベルでアクセスを共有することをお勧めします。 電子メール アドレスと 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 scale set resource group
Remove-AzResourceGroup -Name myResoureceGroup
次のステップ
このチュートリアルでは、Azure PowerShell を使用してスケール セットにカスタム VM イメージを作成して使用する方法について学習しました。
- Azure Compute Gallery を作成する
- イメージ定義を作成する
- イメージ バージョンを作成する
- イメージからスケールセットを作成する
- イメージ ギャラリーを共有する
次のチュートリアルに進み、アプリケーションをスケール セットにデプロイする方法を学習してください。