Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo mostra como usar um modelo do Construtor de Imagens de VM do Azure para criar uma imagem de VM personalizada na Galeria de Computação do Azure e distribuí-la globalmente. Em seguida, você pode usar a imagem para criar caixas de desenvolvimento no Microsoft Dev Box.
As imagens de VM padronizadas podem ajudá-lo a garantir implantações consistentes de caixa de desenvolvimento, incluindo segurança predefinida, configuração e software. Mas a configuração manual de um pipeline de imagens é demorada e complexa, e criar imagens de máquina virtual (VM) personalizadas pode ser difícil e não confiável.
O Construtor de Imagens de VM do Azure é um serviço gerenciado baseado no HashiCorp Packer que simplifica o processo de criação e criação de imagens de VM para caixas de desenvolvimento. O modelo do Construtor de Imagens neste artigo inclui etapas de personalização que instalam o Visual Studio Code e o Chocolatey.
O Construtor de Imagens da VM pode:
- Abstrair etapas manuais ou ferramentas e processos complexos e ocultar necessidades específicas do Azure. Por exemplo, generalize uma imagem executando
sysprep, mas permita que usuários avançados a substituam. - Trabalhe com pipelines de criação de imagem existentes. Você pode chamar o Construtor de Imagens de VM do pipeline ou usar uma tarefa de serviço do Construtor de Imagens de VM do Azure no Azure Pipelines.
- Colete dados de personalização de várias fontes para que você não precise recolhê-los por conta própria.
- Integre-se à Galeria de Computação do Azure para criar um sistema de gerenciamento de imagens para distribuição global, replicação, controle de versão e dimensionamento. Você pode distribuir uma imagem como um disco rígido virtual e uma imagem gerenciada sem recompilá-la.
Importante
O Microsoft Dev Box dá suporte apenas a imagens que usam o tipo de segurança de Inicialização Confiável .
Pré-requisitos
O exemplo neste artigo usa o Azure PowerShell. Você também pode usar a CLI do Azure.
| Categoria | Requirements |
|---|---|
| Ferramentas e permissões | Um grupo de recursos do Azure para o qual você tem permissões de Proprietário ou Colaborador . |
| Tools | Azure PowerShell 6.0 ou posterior instalado. Para obter instruções, consulte Instalar o Azure PowerShell no Windows. |
Configurar ferramentas e funções
Para configurar ferramentas e funções, você:
- Instale os módulos necessários do Azure PowerShell.
- Defina variáveis para obter informações que você usa mais de uma vez.
- Registre os provedores de recursos necessários do Azure.
- Crie uma identidade de usuário para o grupo de recursos e atribua uma função que permita a distribuição de imagens.
Instalar módulos do PowerShell
Instale os módulos necessários do PowerShell executando o seguinte comando:
'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
Responda Y aos prompts sobre repositórios não confiáveis.
Definir variáveis
Crie variáveis para armazenar informações que você usa mais de uma vez. Execute o código a seguir, substituindo <resource-group> pelo nome do grupo de recursos e <location> pela região do Azure que você deseja usar.
# Get existing context
$currentAzContext = Get-AzContext
# Get your current subscription ID
$subscriptionID=$currentAzContext.Subscription.Id
# Destination image resource group
$imageResourceGroup="<resource-group>"
# Location
$location="<location>"
# Image distribution metadata reference name
$runOutputName="aibCustWinManImg01"
# Image template name
$imageTemplateName="vscodeWinTemplate"
Registrar provedores de recursos do Azure
Para usar o Construtor de Imagens de VM, os seguintes provedores de recursos do Azure devem ser registrados:
Microsoft.VirtualMachineImagesMicrosoft.ComputeMicrosoft.NetworkMicrosoft.StorageMicrosoft.KeyVaultMicrosoft.ContainerInstance
Verifique os registros do provedor executando o seguinte comando:
Get-AzResourceProvider -ProviderNamespace "Microsoft.VirtualMachineImages", "Microsoft.Compute", "Microsoft.Network", "Microsoft.Storage", "Microsoft.KeyVault", "Microsoft.ContainerInstance" | Format-table -Property ProviderNamespace,RegistrationStateSe qualquer um dos registros do provedor não retornar
Registered, registre o provedor executando oRegister-AzResourceProvidercomando. O exemplo a seguir registra oMicrosoft.VirtualMachineImagesprovedor de recursos.Register-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages
Criar e atribuir uma identidade de usuário
Crie uma definição de função do Azure que permita a distribuição da imagem. Em seguida, crie uma identidade atribuída pelo usuário para o grupo de recursos e atribua a função à identidade do usuário. O Construtor de Imagens de VM usa a identidade do usuário para armazenar a imagem na Galeria de Computação do Azure.
Execute o código a seguir para criar uma definição de função do Azure e uma identidade de usuário.
# Set up a unique role definition name $timeInt=$(get-date -UFormat "%s") $imageRoleDefName="Azure Image Builder Image Def"+$timeInt $identityName="aibIdentity"+$timeInt # Create an identity New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location $identityNameResourceId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id $identityNamePrincipalId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalIdExecute o código a seguir para baixar um modelo de definição de função do Azure que permite distribuir uma imagem, atualizar o modelo com seus parâmetros e atribuir a função à identidade do usuário.
$aibRoleImageCreationUrl="https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json" $aibRoleImageCreationPath = "aibRoleImageCreation.json" # Download the configuration Invoke-WebRequest -Uri $aibRoleImageCreationUrl -OutFile $aibRoleImageCreationPath -UseBasicParsing ((Get-Content -path $aibRoleImageCreationPath -Raw) -replace '<subscriptionID>',$subscriptionID) | Set-Content -Path $aibRoleImageCreationPath ((Get-Content -path $aibRoleImageCreationPath -Raw) -replace '<rgName>', $imageResourceGroup) | Set-Content -Path $aibRoleImageCreationPath ((Get-Content -path $aibRoleImageCreationPath -Raw) -replace 'Azure Image Builder Service Image Creation Role', $imageRoleDefName) | Set-Content -Path $aibRoleImageCreationPath # Create a role definition New-AzRoleDefinition -InputFile ./aibRoleImageCreation.json # Grant the role definition to the VM Image Builder service principal New-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
Criar uma galeria e um modelo do Construtor de Imagens de VM
Para usar o Construtor de Imagens de VM com a Galeria de Computação do Azure, você precisa de uma galeria e uma definição de imagem. As etapas a seguir criam uma nova definição de galeria e imagem e personalizam um modelo do Construtor de Imagens de VM.
Execute os comandos a seguir para criar uma nova galeria e uma definição de imagem que tenha o tipo de segurança de inicialização confiável necessário para uma imagem do Windows 365.
# Gallery name $galleryName= "devboxGallery" # Image definition name $imageDefName ="vscodeImageDef" # Second replication region $replRegion2="eastus" # Create the gallery New-AzGallery -GalleryName $galleryName -ResourceGroupName $imageResourceGroup -Location $location $SecurityType = @{Name='SecurityType';Value='TrustedLaunch'} $features = @($SecurityType) # Create the image definition New-AzGalleryImageDefinition -GalleryName $galleryName -ResourceGroupName $imageResourceGroup -Location $location -Name $imageDefName -OsState generalized -OsType Windows -Publisher 'myCompany' -Offer 'vscodebox' -Sku '1-0-0' -Feature $features -HyperVGeneration "V2"Copie e cole o seguinte modelo do Azure Resource Manager para o Construtor de Imagens de VM em um novo arquivo. Salve o arquivo em um local como c:\temp\mytemplate.js e feche o arquivo.
O modelo define a imagem de origem e as personalizações aplicadas, instala o Chocolatey e o Visual Studio Code e indica o local de distribuição da imagem.
{ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "imageTemplateName": { "type": "string" }, "api-version": { "type": "string" }, "svclocation": { "type": "string" } }, "variables": {}, "resources": [ { "name": "[parameters('imageTemplateName')]", "type": "Microsoft.VirtualMachineImages/imageTemplates", "apiVersion": "[parameters('api-version')]", "location": "[parameters('svclocation')]", "dependsOn": [], "tags": { "imagebuilderTemplate": "win11multi", "userIdentity": "enabled" }, "identity": { "type": "UserAssigned", "userAssignedIdentities": { "<imgBuilderId>": {} } }, "properties": { "buildTimeoutInMinutes": 100, "vmProfile": { "vmSize": "Standard_DS2_v2", "osDiskSizeGB": 127 }, "source": { "type": "PlatformImage", "publisher": "MicrosoftWindowsDesktop", "offer": "Windows-11", "sku": "win11-21h2-ent", "version": "latest" }, "customize": [ { "type": "PowerShell", "name": "Install Choco and VS Code", "inline": [ "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))", "choco install -y vscode" ] } ], "distribute": [ { "type": "SharedImage", "galleryImageId": "/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<sharedImageGalName>/images/<imageDefName>", "runOutputName": "<runOutputName>", "artifactTags": { "source": "azureVmImageBuilder", "baseosimg": "win11multi" }, "replicationRegions": [ "<region1>", "<region2>" ] } ] } } ] }Configure o novo modelo com suas configurações executando o código a seguir, substituindo
<template-location>pelo local e pelo nome do arquivo de modelo.$templateFilePath = "<template-location>" (Get-Content -path $templateFilePath -Raw ) -replace '<subscriptionID>',$subscriptionID | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<rgName>',$imageResourceGroup | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<runOutputName>',$runOutputName | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<imageDefName>',$imageDefName | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<sharedImageGalName>',$galleryName| Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<region1>',$location | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<region2>',$replRegion2 | Set-Content -Path $templateFilePath ((Get-Content -path $templateFilePath -Raw) -replace '<imgBuilderId>',$identityNameResourceId) | Set-Content -Path $templateFilePath
Criar e exibir a imagem
Envie seu modelo personalizado para o serviço construtor de imagens da VM e crie a imagem.
Execute o comando a seguir para enviar seu modelo para o serviço. O comando baixa quaisquer artefatos dependentes, como scripts, e os armazena em um grupo de recursos de preparo prefixado com
IT_.New-AzResourceGroupDeployment -ResourceGroupName $imageResourceGroup -TemplateFile $templateFilePath -Api-Version "2020-02-14" -imageTemplateName $imageTemplateName -svclocation $locationCrie a imagem invocando a ação
Runno modelo. No prompt de confirmação, insira Y paraYes.Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2020-02-14" -Action Run
Importante
Criar a imagem e replicá-la em duas regiões pode levar algum tempo. Você pode ver relatórios de progresso diferentes entre o PowerShell e o portal do Azure. Aguarde até que o processo seja concluído antes de começar a criar uma definição de dev box a partir da imagem.
Obter informações sobre a imagem
Execute o comando a seguir para obter informações sobre a imagem recém-criada, incluindo o status de execução e o estado de provisionamento.
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup | Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
Saída de exemplo:
Name LastRunStatusRunState LastRunStatusMessage ProvisioningState
---- --------------------- -------------------- -----------------
vscodeWinTemplate Running Succeeded
Você também pode exibir o estado de provisionamento da imagem no portal do Azure. Vá para sua galeria para exibir a definição de imagem.
Configurar a galeria e criar uma caixa de desenvolvimento
Depois que sua imagem personalizada for armazenada na galeria, você poderá configurar a galeria para usar suas imagens em um centro de desenvolvimento do Microsoft Dev Box. Para obter mais informações, consulte Configurar a Galeria de Computação do Azure para Microsoft Dev Box.
Depois de disponibilizar as imagens da galeria no centro de desenvolvimento, você pode anexar a imagem personalizada a um projeto de caixa de desenvolvimento e usá-la para criar caixas de desenvolvimento. Para obter mais informações, confira Início Rápido: Configurar o Computador de Desenvolvimento da Microsoft.