다음을 통해 공유


Azure VM Image Builder를 사용하여 기존 이미지에서 새 Windows VM 이미지 만들기

적용 대상: ✔️ Windows VM

이 문서에서는 Azure Compute Gallery(이전의 Shared Image Gallery)에서 기존 Windows 이미지 버전을 업데이트하고 갤러리에 새 이미지 버전으로 게시하는 방법을 알아봅니다.

이미지를 구성하려면 샘플 JSON 템플릿인 helloImageTemplateforSIGfromWinSIG.json을 사용합니다.

공급자 등록

VM Image Builder를 사용하려면 공급자를 등록해야 합니다.

  1. 공급자 등록을 확인합니다. 각 항목에서 등록됨을 반환하는지 확인합니다.

    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. 등록됨이 반환되지 않으면 다음 명령을 실행하여 공급자를 등록합니다.

    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를 가져와야 합니다.

#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. 사용자 할당 ID 만들기 및 리소스 그룹에 대한 사용 권한 설정에 표시된 대로 JSON 예제를 다운로드합니다.

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

이제 디렉터리가 다음과 같이 두 개로 표시됩니다.

  • buildActions: 첫 번째 이미지 버전에서 생성되었습니다.
  • buildActions2: 첫 번째 이미지 버전을 업데이트하여 두 번째 이미지 버전을 만들 때 생성됩니다.

다음 단계

이 문서에서 사용한 JSON 파일 구성 요소에 대해 자세히 알아보려면 Azure VM Image Builder 템플릿 만들기를 참조하세요.