次の方法で共有


Azure VM Image Builder を使用して既存のイメージから新しい Windows VM イメージを作成する

適用対象: ✔️ Windows VM

この記事では、既存の Windows イメージ バージョンを Azure Compute Gallery (旧称 Shared Image Gallery) で更新し、それをギャラリーに新しいイメージ バージョンとして公開する方法について説明します。

イメージを構成するには、サンプル JSON テンプレート helloImageTemplateforSIGfromWinSIG.json を使用します。

プロバイダーを登録する

VM Image Builder を使用するには、プロバイダーを登録する必要があります。

  1. プロバイダー登録を確認してください。 それぞれが 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
    
  2. 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 を、ソース マネージド イメージが含まれているリソース グループの名前で更新します。

  1. 変数をまだ作成していない場合は、次のコマンドを実行します。

    # 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"
    
  2. サブスクリプション ID の変数を作成します。

    subscriptionID=$(az account show --query id --output tsv)
    
  3. 更新するイメージ バージョンを取得します。

    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 テンプレートの作成」を参照してください。

  1. JSON の例を、「ユーザー割り当て ID を作成し、リソース グループにアクセス許可を設定する」に示すように、ダウンロードします。

  2. 変数を使用して 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
    

イメージの作成

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

    az resource create \
        --resource-group $sigResourceGroup \
        --location $location \
        --properties @helloImageTemplateforSIGfromWinSIG.json \
        --is-full-object \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n imageTemplateforSIGfromWinSIG01
    
  2. イメージのビルドを開始します。

    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 テンプレートを作成する」を参照してください。