Azure VM Image Builder を使用して既存のイメージから新しい Windows VM イメージを作成する
適用対象: ✔️ Windows VM
この記事では、既存の Windows イメージ バージョンを Azure Compute Gallery (旧称 Shared Image Gallery) で更新し、それをギャラリーに新しいイメージ バージョンとして公開する方法について説明します。
イメージを構成するには、サンプル JSON テンプレート helloImageTemplateforSIGfromWinSIG.json を使用します。
プロバイダーを登録する
VM Image Builder を使用するには、プロバイダーを登録する必要があります。
プロバイダー登録を確認してください。 それぞれが Registered を返していることを確認します。
az provider show -n Microsoft.VirtualMachineImages | grep registrationState az provider show -n Microsoft.KeyVault | grep registrationState az provider show -n Microsoft.Compute | grep registrationState az provider show -n Microsoft.Storage | grep registrationState az provider show -n Microsoft.Network | grep registrationState az provider show -n Microsoft.ContainerInstance | grep registrationState
Registered が返されない場合は、次のコマンドを実行してプロバイダーを登録します。
az provider register -n Microsoft.VirtualMachineImages az provider register -n Microsoft.Compute az provider register -n Microsoft.KeyVault az provider register -n Microsoft.Storage az provider register -n Microsoft.Network az provider register -n Microsoft.ContainerInstance
変数とアクセス許可の設定
イメージを作成して Azure Compute Gallery に配布するに関するページを使用して既に Azure Compute Gallery を作成している場合は、必要とする変数のいくつかが既に作成されています。
注意
VM Image Builder では、ソース マネージド イメージが含まれているのと同じリソース グループ内にのみ、カスタム イメージを作成できます。 次の例では、リソース グループ名 ibsigRG を、ソース マネージド イメージが含まれているリソース グループの名前で更新します。
変数をまだ作成していない場合は、次のコマンドを実行します。
# Resource group name - we are using ibsigRG in this example sigResourceGroup=myIBWinRG # Datacenter location - we are using West US 2 in this example location=westus # Additional region to replicate the image to - we are using East US in this example additionalregion=eastus # name of the Azure Compute Gallery - in this example we are using myGallery sigName=my22stSIG # name of the image definition to be created - in this example we are using myImageDef imageDefName=winSvrimages # image distribution metadata reference name runOutputName=w2019SigRo # User name and password for the VM username="user name for the VM" vmpassword="password for the VM"
サブスクリプション ID の変数を作成します。
subscriptionID=$(az account show --query id --output tsv)
更新するイメージ バージョンを取得します。
sigDefImgVersionId=$(az sig image-version list \ -g $sigResourceGroup \ --gallery-name $sigName \ --gallery-image-definition $imageDefName \ --subscription $subscriptionID --query [].'id' -o tsv)
ユーザー割り当て ID を作成し、リソース グループにアクセス許可を設定する
前の例でユーザー ID を設定したので、今度はリソース ID を取得する必要があります。この ID はテンプレートに追加されます。
#get identity used previously
imgBuilderId=$(az identity list -g $sigResourceGroup --query "[?contains(name, 'aibBuiUserId')].id" -o tsv)
既に Azure Compute Gallery を持っているが、前の例に従って設定していない場合は、VM Image Builder がリソース グループにアクセスするためのアクセス許可を割り当てて、ギャラリーにアクセスできるようにする必要があります。 詳細については、「イメージを作成して Azure Compute Gallery に配布する」を参照してください。
helloImage の例の変更
使用しようとしている JSON の例を helloImageTemplateforSIGfromSIG.json で確認できます。 JSON ファイルについては、「Azure VM Image Builder テンプレートの作成」を参照してください。
JSON の例を、「ユーザー割り当て ID を作成し、リソース グループにアクセス許可を設定する」に示すように、ダウンロードします。
変数を使用して JSON を構成します。
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/8_Creating_a_Custom_Win_Shared_Image_Gallery_Image_from_SIG/helloImageTemplateforSIGfromWinSIG.json -o helloImageTemplateforSIGfromWinSIG.json sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforSIGfromWinSIG.json sed -i -e "s/<rgName>/$sigResourceGroup/g" helloImageTemplateforSIGfromWinSIG.json sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforSIGfromWinSIG.json sed -i -e "s/<sharedImageGalName>/$sigName/g" helloImageTemplateforSIGfromWinSIG.json sed -i -e "s%<sigDefImgVersionId>%$sigDefImgVersionId%g" helloImageTemplateforSIGfromWinSIG.json sed -i -e "s/<region1>/$location/g" helloImageTemplateforSIGfromWinSIG.json sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforSIGfromWinSIG.json sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforSIGfromWinSIG.json sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforSIGfromWinSIG.json
イメージの作成
VM Image Builder サービスにイメージ構成を送信します。
az resource create \ --resource-group $sigResourceGroup \ --location $location \ --properties @helloImageTemplateforSIGfromWinSIG.json \ --is-full-object \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n imageTemplateforSIGfromWinSIG01
イメージのビルドを開始します。
az resource invoke-action \ --resource-group $sigResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n imageTemplateforSIGfromWinSIG01 \ --action Run
イメージがビルドされてレプリケートされるまで待ってから、次の手順に進みます。
VM の作成
VM を次のようにして作成します。
az vm create \
--resource-group $sigResourceGroup \
--name aibImgWinVm002 \
--admin-username $username \
--admin-password $vmpassword \
--image "/subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/latest" \
--location $location
カスタマイズの確認
VM を作成したときに設定したユーザー名とパスワードを使用して、VM へのリモート デスクトップ接続を作成します。 VM 内でコマンド プロンプト ウィンドウを開き、次のように実行します。
dir c:\
2 つのディレクトリが表示されます。
- buildActions: 最初のイメージ バージョンに作成されます。
- buildActions2: 最初のイメージ バージョンを更新して 2 番目のイメージ バージョンを作成したときに作成されます。
次のステップ
この記事で使用した JSON ファイルのコンポーネントについて詳しくは、「Azure VM Image Builder テンプレートを作成する」を参照してください。