プレビュー:Linux で Azure Image Builder を使用して既存のイメージ バージョンから新しい VM イメージ バージョンを作成する

この記事では、共有イメージ ギャラリーで既存のイメージ バージョンを取得し、それを更新し、新しいイメージ バージョンとしてギャラリーに公開する方法について説明します。

サンプルの .json テンプレートを使用して、イメージを構成します。 使用する .json ファイルは、helloImageTemplateforSIGfromSIG.json です。

機能の登録

プレビュー中に Azure Image Builder を使用するには、新しい機能を登録する必要があります。

az feature register --namespace Microsoft.VirtualMachineImages --name VirtualMachineTemplatePreview

機能の登録の状態を確認します。

az feature show --namespace Microsoft.VirtualMachineImages --name VirtualMachineTemplatePreview | grep state

登録を確認します。

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 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

変数とアクセス許可の設定

イメージの作成と共有イメージ ギャラリーへの配布に関するページを使用して共有イメージ ギャラリーを作成した場合は、必要とする変数のいくつかが既に作成されています。 それ以外の場合は、この例で使用するいくつかの変数を設定してください。

# Resource group name 
sigResourceGroup=ibLinuxGalleryRG
# Gallery location 
location=westus2
# Additional region to replicate the image version to 
additionalregion=eastus
# Name of the shared image gallery 
sigName=myIbGallery
# Name of the image definition to use
imageDefName=myIbImageDef
# image distribution metadata reference name
runOutputName=aibSIGLinuxUpdate

サブスクリプション ID の変数を作成します。 az account show | grep id を使用してこれを取得できます。

subscriptionID=<Subscription ID>

更新するイメージ バージョンを取得します。

sigDefImgVersionId=$(az sig image-version list \
   -g $sigResourceGroup \
   --gallery-name $sigName \
   --gallery-image-definition $imageDefName \
   --subscription $subscriptionID --query [].'id' -o json | grep 0. | tr -d '"' | tr -d '[:space:]')

ユーザー割り当て ID を作成し、リソース グループにアクセス許可を設定する

前の例でユーザー ID を設定したので、必要なのはそのリソース ID を取得することだけです。その後、それをテンプレートに追加します。

#get identity used previously
imgBuilderId=$(az identity list -g $sigResourceGroup --query "[?contains(name, 'aibBuiUserId')].id" -o tsv)

既に自身の共有イメージ ギャラリーがあり、以前の例に従わなかった場合、Image Builder がリソース グループにアクセスできるようにアクセス許可を割り当てる必要があります。これによりギャラリーにアクセスできます。 イメージを作成して Shared Image Gallery に配布する方法に関する例の手順をご確認ください。

helloImage の例の変更

.json ファイル helloImageTemplateforSIGfromSIG.jsonImage Builder テンプレートのリファレンスを開いて、使用しようとしている例を確認できます。

.json の例をダウンロードし、変数を使用して構成します。

curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/8_Creating_a_Custom_Linux_Shared_Image_Gallery_Image_from_SIG/helloImageTemplateforSIGfromSIG.json -o helloImageTemplateforSIGfromSIG.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforSIGfromSIG.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" helloImageTemplateforSIGfromSIG.json
sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforSIGfromSIG.json
sed -i -e "s/<sharedImageGalName>/$sigName/g" helloImageTemplateforSIGfromSIG.json
sed -i -e "s%<sigDefImgVersionId>%$sigDefImgVersionId%g" helloImageTemplateforSIGfromSIG.json
sed -i -e "s/<region1>/$location/g" helloImageTemplateforSIGfromSIG.json
sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforSIGfromSIG.json
sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforSIGfromSIG.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforSIGfromSIG.json

イメージの作成

VM Image Builder サービスにイメージ構成を送信します。

az resource create \
    --resource-group $sigResourceGroup \
    --properties @helloImageTemplateforSIGfromSIG.json \
    --is-full-object \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n helloImageTemplateforSIGfromSIG01

イメージのビルドを開始します。

az resource invoke-action \
     --resource-group $sigResourceGroup \
     --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
     -n helloImageTemplateforSIGfromSIG01 \
     --action Run 

イメージがビルドされてレプリケートされるまで待ってから、次の手順に進みます。

VM の作成

az vm create \
  --resource-group $sigResourceGroup \
  --name aibImgVm001 \
  --admin-username azureuser \
  --location $location \
  --image "/subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/latest" \
  --generate-ssh-keys

VM のパブリック IP アドレスを使用して VM への SSH 接続を作成します。

ssh azureuser@<pubIp>

SSH 接続が確立されるとすぐに、イメージが「当日のメッセージ」でカスタマイズされたことがわかります。

*******************************************************
**            This VM was built from the:            **
**      !! AZURE VM IMAGE BUILDER Custom Image !!    **
**         You have just been Customized :-)         **
*******************************************************

exit と入力して SSH 接続を閉じます。

ギャラリーで使用できるようになったイメージ バージョンを一覧表示することもできます。

az sig image-version list -g $sigResourceGroup -r $sigName -i $imageDefName -o table

次のステップ

この記事で使用されている .json ファイルのコンポーネントの詳細については、Image Builder テンプレートのリファレンスに関するページを参照してください。