Criar uma imagem de VM com base em uma imagem existente usando o Construtor de Imagens de VM do Azure no Linux

Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis

Neste artigo, você aprenderá como atualizar uma versão de imagem existente em uma Galeria de Computação do Azure (anteriormente Galeria de Imagens Compartilhadas) e publicá-la na galeria como uma nova versão de imagem.

Para configurar a imagem, use um modelo JSON de exemplo, helloImageTemplateforSIGfromSIG.json.

Registrar os provedores

Para usar o Construtor de Imagens de VM, é preciso registrar os provedores.

  1. Verifique os registros do provedor. Verifique se cada um retorna Registrado.

    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. Se eles não retornarem Registrados, registre os provedores executando os seguintes comandos:

    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
    

Definir variáveis e permissões

Se você criou uma Galeria de Computação do Azure usando Criar uma imagem e distribuí-la para uma Galeria de Computação do Azure, já criou algumas das variáveis necessárias.

  1. Se você ainda não criou as variáveis, execute os seguintes comandos:

    # Resource group name 
    sigResourceGroup=ibLinuxGalleryRG
    # Gallery location 
    location=westus2
    # Additional region to replicate the image version to 
    additionalregion=eastus
    # Name of the Azure Compute Gallery 
    sigName=myIbGallery
    # Name of the image definition to use
    imageDefName=myIbImageDef
    # image distribution metadata reference name
    runOutputName=aibSIGLinuxUpdate
    
  2. Crie uma variável para a ID da assinatura:

    subscriptionID=$(az account show --query id --output tsv)
    
  3. Obtenha a versão da imagem que você deseja atualizar:

    sigDefImgVersionId=$(az sig image-version list \
      -g $sigResourceGroup \
      --gallery-name $sigName \
      --gallery-image-definition $imageDefName \
      --subscription $subscriptionID --query [].'id' -o tsv)
    

Criar uma identidade atribuída pelo usuário e definir permissões no grupo de recursos

Você configurou a identidade do usuário em um exemplo anterior, portanto agora você precisará obter a ID do recurso, que será acrescentada ao modelo.

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

Se você já tiver uma Galeria de Computação do Azure, mas não tiver configurado seguindo um exemplo anterior, precisará atribuir permissões para que o Construtor de Imagens de VM acesse o grupo de recursos, para que ele possa acessar a galeria. Para obter mais informações, veja Criar uma imagem e distribuí-la para uma Galeria de Computação do Azure.

Modificar o exemplo helloImage

Você pode examinar o exemplo JSON que está prestes a usar em helloImageTemplateforSIGfromSIG.json. Para obter informações sobre o arquivo JSON, veja Criar um modelo do Construtor de Imagens de VM do Azure.

  1. Baixe o exemplo do JSON, conforme mostrado em Criar uma imagem do Linux e distribuí-la para uma Galeria de Computação do Azure usando a CLI do Azure.

  2. Configure o JSON com suas variáveis:

    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
    

Criar a imagem

  1. Envie a configuração de imagem para o serviço Construtor de Imagens de VM:

    az resource create \
        --resource-group $sigResourceGroup \
        --properties @helloImageTemplateforSIGfromSIG.json \
        --is-full-object \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n helloImageTemplateforSIGfromSIG01
    
  2. Inicie o build da imagem:

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

Aguarde até que a imagem seja criada e replicada antes de passar para a próxima etapa.

Criar a VM

  1. Crie a VM fazendo o seguinte:

    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
    
  2. Crie uma conexão SSH (Secure Shell) com a VM usando o endereço IP público da VM.

    ssh azureuser@<pubIp>
    

    Logo que a conexão SSH é estabelecida, você deve receber uma "Mensagem do Dia" personalizada informando que a imagem foi personalizada:

    *******************************************************
    **            This VM was built from the:            **
    **      !! AZURE VM IMAGE BUILDER Custom Image !!    **
    **         You have just been Customized :-)         **
    *******************************************************
    
  3. Digite exit para fechar a conexão SSH.

  4. Para listar as versões de imagem que estão disponíveis na galeria, execute:

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

Próximas etapas

Para saber mais sobre os componentes do arquivo JSON que você utilizou neste artigo, veja Criar um modelo do Construtor de Imagens de VM do Azure.