Criar uma nova imagem de VM a partir de uma imagem existente usando o Construtor de Imagens de VM do Azure no Linux
Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível
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.
Registar os fornecedores
Para usar o VM Image Builder, você precisa registrar os provedores.
Verifique os registos do seu fornecedor. Certifique-se de que 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
Se eles não retornarem Registrado, 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ê já 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.
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
Crie uma variável para o ID da sua subscrição:
subscriptionID=$(az account show --query id --output tsv)
Obtenha a versão da imagem que pretende 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, então agora você precisa obter o ID do recurso, que será anexado 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 a configurou 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, consulte Criar uma imagem e distribuí-la para uma Galeria de Computação do Azure.
Modificar o exemplo helloImage
Você pode revisar o exemplo JSON que está prestes a usar em helloImageTemplateforSIGfromSIG.json. Para obter informações sobre o arquivo JSON, consulte Criar um modelo do Construtor de Imagens de VM do Azure.
Baixe o exemplo JSON, conforme mostrado em Criar uma imagem do Linux e distribua-a para uma Galeria de Computação do Azure usando a CLI do Azure.
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
Envie a configuração da imagem para o serviço VM Image Builder:
az resource create \ --resource-group $sigResourceGroup \ --properties @helloImageTemplateforSIGfromSIG.json \ --is-full-object \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateforSIGfromSIG01
Inicie a construção 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
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
Crie uma conexão SSH (Secure Shell) com a VM usando o endereço IP público da VM.
ssh azureuser@<pubIp>
Depois que a conexão SSH for estabelecida, você deve receber uma "Mensagem do Dia" dizendo que a imagem foi personalizada:
******************************************************* ** This VM was built from the: ** ** !! AZURE VM IMAGE BUILDER Custom Image !! ** ** You have just been Customized :-) ** *******************************************************
Digite
exit
para fechar a conexão SSH.Para listar as versões de imagem que agora estão disponíveis na sua galeria, execute:
az sig image-version list -g $sigResourceGroup -r $sigName -i $imageDefName -o table
Próximos passos
Para saber mais sobre os componentes do arquivo JSON que você usou neste artigo, consulte Criar um modelo do Azure VM Image Builder.