Criar uma VM do Windows usando o Construtor de Imagens de VM do Azure
Aplica-se a: ✔️ VMs do Windows
Neste artigo, você saberá como criar uma imagem personalizada do Windows usando o Construtor de Imagens de VM do Azure. O exemplo neste artigo usa os seguintes personalizadores para personalizar a imagem:
- O PowerShell (ScriptUri): faz o download e executa um script do PowerShell.
- A reinicialização do Windows: reinicia a VM.
- O PowerShell (embutido): executa um comando específico. Neste exemplo, ele cria um diretório na máquina virtual usando
mkdir c:\\buildActions
. - Arquivo: copia um arquivo do GitHub para a VM. Este exemplo copia index.md para
c:\buildArtifacts\index.html
na máquina virtual. buildTimeoutInMinutes
: especifica um tempo de compilação, em minutos. O padrão é de 240 minutos, que você pode aumentar para permitir compilações de execução prolongada. O valor mínimo permitido é 6 minutos. Valores menores que 6 minutos causarão erros.vmProfile
: especifica umavmSize
e propriedades de rede.osDiskSizeGB
: pode ser usado para aumentar o tamanho de uma imagem.identity
. Fornece uma identidade para uso do Construtor de Imagens de VM do Azure durante a compilação.
Use o modelo JSON de exemplo a seguir para configurar a imagem: helloImageTemplateWin.json.
Observação
Os usuários do Windows podem executar os seguintes exemplos de CLI do Azure no Azure Cloud Shell usando o Bash.
Registrar os provedores
Para usar o Construtor de Imagens de VM, é preciso registrar o recurso. Verifique seu registro 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
Caso a saída não apresente 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
Como você usará algumas informações repetidamente, crie algumas variáveis para armazená-las:
# 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'
Criar uma variável para a ID da assinatura:
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 própria imagem, use o grupo de recursos a seguir:
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 do Azure usa a identidade do usuário fornecida para injetar a imagem em um grupo de recursos. Neste exemplo, você cria uma definição de regra do Azure com permissões específicas para distribuir a imagem. A definição de função será 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 Construtor de Imagens de VM do Azure possa acessar a conta de armazenamento em que 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
Baixe o modelo de configuração de imagem
Nós criamos um modelo de configuração de imagem parametrizado para você experimentar. Faça o download do arquivo JSON de exemplo e configure-o com as variáveis que você criou 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
Observação
Para a imagem de origem, sempre especifique uma versão. Você não pode 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 de imagem ao serviço Construtor de Imagens de VM executando os seguintes comandos:
az resource create \
--resource-group $imageResourceGroup \
--properties @helloImageTemplateWin.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Quando você terminar, uma mensagem de êxito será retornada ao console e um modelo de configuração do Construtor de Imagens de VM do Azure é criado no $imageResourceGroup
.
Em segundo plano, o Construtor de Imagens de VM do Azure também cria um grupo de recursos de preparo na sua assinatura. Esse grupo de recursos é usado para criar a imagem no seguinte formato: IT_<DestinationResourceGroup>_<TemplateName>
.
Observação
Se a exclusão for necessária, não exclua o grupo de recursos de preparo diretamente. Primeiro, exclua o artefato do modelo de imagem, que posteriormente excluirá o grupo de recursos de preparo. Caso contrário, o modelo de imagem poderá entrar em um estado com falha.
Se o serviço relatar uma falha quando você enviar o modelo de configuração de imagem, siga este procedimento:
- Confira 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
Inicie o build da imagem
Inicie o processo de compilação de imagem 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 esteja concluída.
Se você encontrar erros, confira Solucionar problemas do serviço Construtor de Imagens de VM do Azure.
Criar a VM
Crie a VM usando a imagem que você compilou. 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 com 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
- buildArtifacts
Limpar os recursos
Quando terminar, exclua os recursos criados.
Exclua o modelo do Construtor de Imagens de VM do Azure.
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óximas etapas
Para saber mais sobre os componentes do arquivo JSON usado neste artigo, confira a referência de modelo do Construtor de Imagens de VM.