Criar uma VM do Windows usando o Construtor de Imagens de VM do Azure
Aplica-se a: ✔️ VMs do Windows
Neste artigo, você aprenderá a criar uma imagem personalizada do Windows usando o Azure VM Image Builder. O exemplo neste artigo usa personalizadores para personalizar a imagem:
- PowerShell (ScriptUri): Baixe e execute um script do PowerShell.
- Reinicialização do Windows: reinicia a VM.
- PowerShell (inline): executa um comando específico. Neste exemplo, ele cria um diretório na VM usando
mkdir c:\\buildActions
. - Arquivo: copia um arquivo do GitHub para a VM. Este exemplo copia index.md para
c:\buildArtifacts\index.html
na VM. buildTimeoutInMinutes
: Especifica um tempo de compilação, em minutos. O padrão é 240 minutos, que você pode aumentar para permitir compilações de execução mais longa. O valor mínimo permitido é de 6 minutos. Valores inferiores a 6 minutos causarão erros.vmProfile
: Especifica as propriedades avmSize
e network.osDiskSizeGB
: Pode ser usado para aumentar o tamanho de uma imagem.identity
. Fornece uma identidade para o Construtor de Imagens de VM usar durante a compilação.
Use o seguinte modelo JSON de exemplo para configurar a imagem: helloImageTemplateWin.json.
Nota
Os usuários do Windows podem executar os seguintes exemplos de CLI do Azure no Azure Cloud Shell usando Bash.
Registar os fornecedores
Para usar o VM Image Builder, você precisa registrar o recurso. Verifique o seu registo executando os seguintes comandos:
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 -o json | grep registrationState
Se a saída não disser registrado, execute 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
Como você usará algumas informações repetidamente, crie algumas variáveis para armazenar essas informações:
# Resource group name - we're using myImageBuilderRG in this example
imageResourceGroup='myWinImgBuilderRG'
# Region location
location='WestUS2'
# Run output name
runOutputName='aibWindows'
# The name of the image to be created
imageName='aibWinImage'
Crie uma variável para o ID da sua subscrição:
subscriptionID=$(az account show --query id --output tsv)
Criar o grupo de recursos
Para armazenar o artefato do modelo de configuração de imagem e a imagem, use o seguinte grupo de recursos:
az group create -n $imageResourceGroup -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 de usuário fornecida para injetar a imagem no grupo de recursos. Neste exemplo, você cria uma definição de função do Azure com permissões específicas para distribuir a imagem. A definição de função é então atribuída à identidade do usuário.
Criar uma identidade gerenciada atribuída pelo usuário e conceder permissões
Crie uma identidade atribuída pelo usuário para que o VM Image Builder possa acessar a conta de armazenamento onde o script está armazenado.
identityName=aibBuiUserId$(date +'%s')
az identity create -g $imageResourceGroup -n $identityName
# Get the identity ID
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# Download the preconfigured role definition example
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>%$imageResourceGroup%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/$imageResourceGroup
Faça o download do modelo de configuração de imagem
Criamos um modelo de configuração de imagem parametrizada para você experimentar. Baixe o arquivo JSON de exemplo e configure-o com as variáveis definidas anteriormente.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/0_Creating_a_Custom_Windows_Managed_Image/helloImageTemplateWin.json -o helloImageTemplateWin.json
sed -i -e "s%<subscriptionID>%$subscriptionID%g" helloImageTemplateWin.json
sed -i -e "s%<rgName>%$imageResourceGroup%g" helloImageTemplateWin.json
sed -i -e "s%<region>%$location%g" helloImageTemplateWin.json
sed -i -e "s%<imageName>%$imageName%g" helloImageTemplateWin.json
sed -i -e "s%<runOutputName>%$runOutputName%g" helloImageTemplateWin.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateWin.json
Você pode modificar este exemplo no terminal usando um editor de texto como vi
.
vi helloImageTemplateWin.json
Nota
Para a imagem de origem, especifique sempre uma versão. Não é possível especificar latest
como a versão.
Se você adicionar ou alterar o grupo de recursos para o qual a imagem é distribuída, verifique se as permissões estão definidas no grupo de recursos.
Criar a imagem
Envie a configuração da imagem para o serviço VM Image Builder executando os seguintes comandos:
az resource create \
--resource-group $imageResourceGroup \
--properties @helloImageTemplateWin.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Quando terminar, uma mensagem de êxito será retornada ao console e um modelo de configuração do Construtor de Imagens de VM será criado no $imageResourceGroup
.
Em segundo plano, o Construtor de Imagens de VM também cria um grupo de recursos de preparo em sua assinatura. Este grupo de recursos é usado para criar a imagem no seguinte formato: IT_<DestinationResourceGroup>_<TemplateName>
.
Nota
Se a exclusão for necessária, não exclua o grupo de recursos de preparo diretamente. Primeiro, exclua o artefato de modelo de imagem, que posteriormente excluirá o grupo de recursos de preparação. Caso contrário, o modelo de imagem pode entrar em um estado de falha.
Se o serviço relatar uma falha ao enviar o modelo de configuração de imagem, faça o seguinte:
- Consulte Solucionar problemas do serviço Construtor de Imagens de VM do Azure.
- Antes de tentar reenviar o modelo, exclua-o executando os seguintes comandos:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Iniciar a construção da imagem
Inicie o processo de criação de imagens usando az resource invoke-action.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01 \
--action Run
Aguarde até que a compilação seja concluída.
Se você encontrar erros, consulte Solucionar problemas do serviço Construtor de Imagens de VM do Azure.
Criar a VM
Crie a VM usando a imagem que você criou. No código a seguir, substitua <a senha> por sua própria senha para o aibuser na VM.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgWinVm00 \
--admin-username aibuser \
--admin-password <password> \
--image $imageName \
--location $location
Verificar a personalização
Crie uma conexão de Área de Trabalho Remota para a VM usando o nome de usuário e a senha que você definiu quando criou a VM. Na VM, abra uma janela do Prompt de Comando e digite:
dir c:\
Os dois diretórios a seguir são criados durante a personalização da imagem:
- buildActions
- construirArtefatos
Limpar os recursos
Quando terminar, exclua os recursos que criou.
Exclua o modelo do Construtor de Imagens da VM.
az resource delete \ --resource-group $imageResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateWin01
Exclua a atribuição de função, a definição de função e a identidade do usuário.
az role assignment delete \ --assignee $imgBuilderCliId \ --role "$imageRoleDefName" \ --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup az role definition delete --name "$imageRoleDefName" az identity delete --ids $imgBuilderId
Exclua o grupo de recursos de imagem.
az group delete -n $imageResourceGroup
Próximos passos
Para saber mais sobre os componentes do arquivo JSON que este artigo usa, consulte a referência de modelo do VM Image Builder.