Crie uma imagem do Linux e distribua-a para uma Galeria de Computação do Azure usando a CLI do Azure
Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis
Este artigo mostra como usar o Construtor de Imagens de VM do Azure e a CLI do Azure para criar uma versão de imagem em uma Galeria de Computação do Azure (antiga Galeria de Imagens Compartilhadas) e distribuir a imagem globalmente. Você também pode criar uma versão da imagem usando o Azure PowerShell.
Este artigo usa um modelo JSON de exemplo para configurar a imagem. O arquivo JSON está em helloImageTemplateforSIG.json.
Para distribuir a imagem a uma Galeria de Computação do Azure, o modelo usa sharedImage como o valor da seção distribute
do modelo.
Registrar os provedores
Para usar o Construtor de Imagens de VM, é preciso registrar os provedores. Verifique seu registro executando os seguintes comandos:
az provider show -n Microsoft.VirtualMachineImages -o json | grep registrationState
az provider show -n Microsoft.KeyVault -o json | grep registrationState
az provider show -n Microsoft.Compute -o json | grep registrationState
az provider show -n Microsoft.Storage -o json | grep registrationState
az provider show -n Microsoft.Network -o json | grep registrationState
az provider show -n Microsoft.ContainerInstance -o json | grep registrationState
Caso não conste como registrado, execute o seguinte comando:
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
Como você usará algumas informações repetidamente, crie algumas variáveis para armazená-las.
O Construtor de Imagens de VM é compatível com a criação de imagens personalizadas apenas no mesmo grupo de recursos da imagem gerenciada de origem. No exemplo a seguir, atualize o nome do grupo de recursos para que seja o mesmo grupo de recursos da imagem gerenciada de origem.
# Resource group name - ibLinuxGalleryRG in this example
sigResourceGroup=ibLinuxGalleryRG
# Datacenter location - West US 2 in this example
location=westus2
# Additional region to replicate the image to - East US in this example
additionalregion=eastus
# Name of the Azure Compute Gallery - myGallery in this example
sigName=myIbGallery
# Name of the image definition to be created - myImageDef in this example
imageDefName=myIbImageDef
# Reference name in the image distribution metadata
runOutputName=aibLinuxSIG
Crie uma variável para a ID da assinatura:
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 de VM usa a identidade do usuário fornecida para injetar a imagem em uma Galeria de Computação do Azure. Neste exemplo, você cria uma definição de regra do Azure com ações específicas para distribuir a imagem. A definição de função será atribuída à identidade do usuário.
# Create user-assigned identity for VM Image Builder to access the storage account where the script is stored
identityName=aibBuiUserId$(date +'%s')
az identity create -g $sigResourceGroup -n $identityName
# Get the identity ID
imgBuilderCliId=$(az identity show -g $sigResourceGroup -n $identityName --query clientId -o tsv)
# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$sigResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# Download an Azure role-definition template, and update the template with the parameters that were 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 a 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 uma galeria
Para usar o Construtor de Imagens de VM com a Galeria de Computação do Azure, você precisa ter uma definição de imagem e de galeria. O Construtor de Imagens de VM cria a definição de imagem e de galeria para você.
Se você ainda não tiver uma definição de imagem e a definição de galeria para usar, comece criando-as.
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 20_04-lts-gen2 \
--os-type Linux \
--hyper-v-generation V2 \
--features SecurityType=TrustedLaunchSupported
Baixar e configurar o arquivo JSON
Baixe o modelo 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
Nesta seção, você criará a versão da imagem na galeria.
Envie a configuração da imagem ao serviço Construtor de Imagens de VM do Azure:
az resource create \
--resource-group $sigResourceGroup \
--properties @helloImageTemplateforSIG.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01
Inicie o build da imagem:
az resource invoke-action \
--resource-group $sigResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01 \
--action Run
Pode levar alguns instantes para criar e replicar imagem para ambas as regiões. Aguarde a conclusão dessa tarefa para passar à criação de uma VM.
Criar a VM
Crie uma VM com base na versão da imagem criada pelo Construtor de Imagens de VM.
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" \
--security-type TrustedLaunch \
--generate-ssh-keys
Conecte-se à VM com o SSH (Secure Shell):
ssh aibuser@<publicIpAddress>
Logo que a conexão SSH é estabelecida, você deve ver que a imagem foi personalizada com uma Mensagem do Dia:
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Limpar os recursos
Observação
Caso deseje tentar personalizar novamente a versão da imagem para criar uma nova versão dessa mesma imagem, ignore as próximas etapas e acesse Usar o Construtor de Imagens de VM para criar outra versão de imagem.
Se os recursos criados não forem mais necessários na sequência do processo descrito neste artigo, você pode excluí-los com o procedimento a seguir.
Esse processo exclui a imagem que você criou e todos os outros arquivos de recurso. Verifique se você concluiu essa implantação antes de excluir os recursos.
Antes de excluir os recursos da galeria, exclua todas as versões da imagem, para poder excluir a definição de imagem usada para criá-las. Para excluir uma galeria, primeiro você precisará excluir todas as definições de imagem ali contidas.
Exclua o modelo do Construtor de Imagens de VM.
az resource delete \ --resource-group $sigResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateforSIG01
Exclua 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 de VM (sempre começa com
0.
) e exclua-a.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óximas etapas
Saiba mais sobre a Galeria de Computação do Azure.