Criar uma imagem do Linux e distribuí-la para uma Galeria de Computação do Azure
Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível
Este artigo mostra como você pode usar o Azure Image Builder e a CLI do Azure para criar uma versão de imagem em uma Galeria de Computação do Azure (anteriormente conhecida como Galeria de Imagens Compartilhadas) e, em seguida, distribuir a imagem globalmente. Você também pode fazer isso usando o Azure PowerShell.
Usaremos um modelo de .json de exemplo para configurar a imagem. O arquivo .json que estamos usando está aqui: helloImageTemplateforSIG.json.
Para distribuir a imagem para uma Galeria de Computação do Azure, o modelo usa sharedImage como o valor para a distribute
seção do modelo.
Registar os fornecedores
Para usar o Azure Image Builder, você precisa registrar o recurso.
Verifique o seu registo.
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 disserem registrado, execute o seguinte:
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
Usaremos algumas informações repetidamente, então criaremos algumas variáveis para armazenar essas informações.
O Construtor de Imagens suporta apenas a criação de imagens personalizadas no mesmo Grupo de Recursos que a imagem gerenciada de origem. Atualize o nome do grupo de recursos neste exemplo para ser o mesmo grupo de recursos que a imagem gerenciada pela fonte.
# Resource group name - we are using ibLinuxGalleryRG in this example
sigResourceGroup=ibLinuxGalleryRG
# Datacenter location - we are using West US 2 in this example
location=westus2
# 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=myIbGallery
# name of the image definition to be created - in this example we are using myImageDef
imageDefName=myIbImageDef
# image distribution metadata reference name
runOutputName=aibLinuxSIG
Crie uma variável para o ID da sua subscrição.
subscriptionID=$(az account show --query id --output tsv)
Crie o grupo de recursos.
az group create -n $sigResourceGroup -l $location
Criar uma identidade atribuída pelo usuário e definir permissões no grupo de recursos
O Construtor de Imagens usa a identidade de usuário fornecida para injetar a imagem na Galeria de Computação do Azure. Neste exemplo, você criará uma definição de função do Azure que tenha as ações granulares a serem executadas distribuindo a imagem para a galeria. A definição de função será então atribuída à identidade do usuário.
# create user assigned identity for image builder to access the storage account where the script is located
identityName=aibBuiUserId$(date +'%s')
az identity create -g $sigResourceGroup -n $identityName
# get identity id
imgBuilderCliId=$(az identity show -g $sigResourceGroup -n $identityName --query clientId -o tsv)
# get the user identity URI, needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$sigResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# this command will download an Azure role definition template, and update the template with the parameters specified earlier.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')
# update the definition
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json
# create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json
# grant role definition to the user assigned identity
az role assignment create \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup
Criar uma definição de imagem e galeria
Para usar o Construtor de Imagens com uma Galeria de Computação do Azure, você precisa ter uma galeria e uma definição de imagem existentes. O Construtor de Imagens não criará a galeria e a definição de imagem para você.
Se ainda não tiver uma galeria e uma definição de imagem para usar, comece por criá-las. Primeiro, crie uma galeria.
az sig create \
-g $sigResourceGroup \
--gallery-name $sigName
Em seguida, crie uma definição de imagem.
az sig image-definition create \
-g $sigResourceGroup \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--publisher myIbPublisher \
--offer myOffer \
--sku 18.04-LTS \
--os-type Linux
Baixe e configure o .json
Faça o download do modelo de .json e configure-o com suas variáveis.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/1_Creating_a_Custom_Linux_Shared_Image_Gallery_Image/helloImageTemplateforSIG.json -o helloImageTemplateforSIG.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforSIG.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" helloImageTemplateforSIG.json
sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforSIG.json
sed -i -e "s/<sharedImageGalName>/$sigName/g" helloImageTemplateforSIG.json
sed -i -e "s/<region1>/$location/g" helloImageTemplateforSIG.json
sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforSIG.json
sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforSIG.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforSIG.json
Criar a versão da imagem
Esta próxima parte criará a versão da imagem na galeria.
Envie a configuração da imagem para o serviço Azure Image Builder.
az resource create \
--resource-group $sigResourceGroup \
--properties @helloImageTemplateforSIG.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01
Inicie a construção da imagem.
az resource invoke-action \
--resource-group $sigResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01 \
--action Run
Criar a imagem e replicá-la para ambas as regiões pode demorar um pouco. Aguarde até que esta parte esteja concluída antes de passar para a criação de uma VM.
Criar a VM
Crie uma VM a partir da versão da imagem que foi criada pelo Azure Image Builder.
az vm create \
--resource-group $sigResourceGroup \
--name myAibGalleryVM \
--admin-username aibuser \
--location $location \
--image "/subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/latest" \
--generate-ssh-keys
Aceda através de SSH na VM.
ssh aibuser@<publicIpAddress>
Você deve ver que a imagem foi personalizada com uma Mensagem do Dia assim que sua conexão SSH for estabelecida!
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Clean up resources (Limpar recursos)
Se você quiser agora tentar repersonalizar a versão da imagem para criar uma nova versão da mesma imagem, ignore as próximas etapas e vá para Usar o Azure Image Builder para criar outra versão de imagem.
Isso exclui a imagem que foi criada, juntamente com todos os outros arquivos de recurso. Certifique-se de que concluiu esta implementação antes de eliminar os recursos.
Ao excluir recursos da galeria, você precisa excluir todas as versões de imagem antes de excluir a definição de imagem usada para criá-las. Para excluir uma galeria, primeiro você precisa ter excluído todas as definições de imagem na galeria.
Exclua o modelo do construtor de imagens.
az resource delete \
--resource-group $sigResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01
Excluir atribuições de permissões, funções e identidade
az role assignment delete \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup
az role definition delete --name "$imageRoleDefName"
az identity delete --ids $imgBuilderId
Obtenha a versão da imagem criada pelo construtor de imagens, isso sempre começa com 0.
e, em seguida, exclua a versão da imagem
sigDefImgVersion=$(az sig image-version list \
-g $sigResourceGroup \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--subscription $subscriptionID --query [].'name' -o json | grep 0. | tr -d '"')
az sig image-version delete \
-g $sigResourceGroup \
--gallery-image-version $sigDefImgVersion \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--subscription $subscriptionID
Exclua a definição da imagem.
az sig image-definition delete \
-g $sigResourceGroup \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--subscription $subscriptionID
Exclua a galeria.
az sig delete -r $sigName -g $sigResourceGroup
Exclua o grupo de recursos.
az group delete -n $sigResourceGroup -y
Próximos passos
Saiba mais sobre as Galerias de Computação do Azure.