Configurar uma caixa de desenvolvimento usando o Construtor de Imagens de VM do Azure e a Caixa de Desenvolvimento da Microsoft
Neste artigo, você usa o Construtor de Imagens de VM do Azure para criar uma caixa de desenvolvimento personalizada no Microsoft Dev Box usando um modelo. O modelo inclui uma etapa de personalização para instalar o Visual Studio Code (VS Code).
Quando sua organização usa imagens de máquina virtual (VM) padronizadas, ela pode migrar mais facilmente para a nuvem e ajudar a garantir a consistência em suas implantações. As imagens normalmente incluem segurança predefinida, definições de configuração e o software necessário. Configurar seu próprio pipeline de geração de imagens requer tempo, infraestrutura e diversos outros detalhes. Com o Construtor de Imagens de VM do Azure, você pode criar uma configuração que descreva sua imagem. Em seguida, o serviço cria a imagem e a envia para um projeto de caixa de desenvolvimento.
Embora seja possível criar imagens de VM personalizadas manualmente ou usando outras ferramentas, o processo pode ser complicado e não confiável. O Construtor de Imagens de VM do Azure, criado no HashiCorp Packer, fornece os benefícios de um serviço gerenciado.
Para reduzir a complexidade da criação de imagens de VM, o Construtor de Imagens de VM:
Elimina a necessidade de usar ferramentas complexas, processos e etapas manuais para criar uma imagem de VM. O Construtor de Imagens de VM abstrai todos esses detalhes e oculta requisitos específicos do Azure, como a necessidade de generalizar a imagem (Sysprep). E oferece aos usuários mais avançados a capacidade de substituir esses requisitos.
Funciona com pipelines de criação de imagem existentes para uma experiência de clique e uso. Você pode chamar o Construtor de Imagens de VM de seu pipeline ou usar uma tarefa de DevOps do serviço Construtor de Imagens de VM do Azure.
Busca dados de personalização de várias fontes, o que elimina a necessidade de coletá-los todos de um só lugar.
Integra-se à Galeria de Computação do Azure, que cria um sistema de gerenciamento de imagens para distribuir, replicar, controlar o controle de versão e dimensionar imagens globalmente. Além disso, você pode distribuir a mesma imagem resultante como um disco rígido virtual ou como uma ou mais imagens gerenciadas, sem ter que recriá-las do zero.
Importante
O Microsoft Dev Box oferece suporte apenas a imagens que usam o tipo de segurança Inicialização Confiável habilitado.
Pré-requisitos
Para provisionar uma imagem personalizada criada usando o VM Image Builder, você precisa:
- Azure PowerShell 6.0 ou posterior. Se você não tiver o PowerShell instalado, siga as etapas em Instalar o Azure PowerShell no Windows.
- Permissões de Proprietário ou Colaborador em uma assinatura do Azure ou em um grupo de recursos específico.
- Um grupo de recursos.
- Um centro de desenvolvimento com uma conexão de rede conectada. Se você não tiver um, siga as etapas em Conectar caixas de desenvolvimento a recursos configurando conexões de rede.
Criar uma imagem do Windows e distribuí-la para a Galeria de Computação do Azure
A primeira etapa é usar o Azure VM Image Builder e o Azure PowerShell para criar uma versão de imagem na Galeria de Computação do Azure e, em seguida, distribuir a imagem globalmente. Você também pode fazer essa tarefa usando a CLI do Azure.
Para usar o Construtor de Imagens de VM, é preciso registrar os recursos.
Verifique os registros do provedor. Certifique-se de que cada comando retorne
Registered
para o recurso especificado.Get-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Storage | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Compute | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.KeyVault | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Network | Format-table -Property ResourceTypes,RegistrationState
Se os registros do provedor não retornarem
Registered
, registre os provedores executando os seguintes comandos:Register-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages Register-AzResourceProvider -ProviderNamespace Microsoft.Storage Register-AzResourceProvider -ProviderNamespace Microsoft.Compute Register-AzResourceProvider -ProviderNamespace Microsoft.KeyVault Register-AzResourceProvider -ProviderNamespace Microsoft.Network
Instalar módulos do PowerShell:
'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
Crie variáveis para armazenar informações que você usa mais de uma vez.
- Copie o código de exemplo a seguir.
- Substitua
<Resource group>
pelo grupo de recursos que você usou para criar o centro de desenvolvimento. - Execute o código atualizado no PowerShell.
# Get existing context $currentAzContext = Get-AzContext # Get your current subscription ID $subscriptionID=$currentAzContext.Subscription.Id # Destination image resource group $imageResourceGroup="<Resource group>" # Location $location="eastus2" # Image distribution metadata reference name $runOutputName="aibCustWinManImg01" # Image template name $imageTemplateName="vscodeWinTemplate"
Crie uma identidade atribuída pelo usuário e defina permissões no grupo de recursos executando o código a seguir no PowerShell.
O Construtor de Imagens de VM usa a identidade de usuário fornecida para injetar a imagem na Galeria de Computação do Azure. O exemplo a seguir cria uma definição de função do Azure com ações específicas para distribuir a imagem. A definição de função será atribuída à identidade do usuário.
# Set up role definition names, which need to be unique $timeInt=$(get-date -UFormat "%s") $imageRoleDefName="Azure Image Builder Image Def"+$timeInt $identityName="aibIdentity"+$timeInt # Add an Azure PowerShell module to support AzUserAssignedIdentity Install-Module -Name Az.ManagedServiceIdentity # 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).PrincipalId
Atribua permissões para a identidade para distribuir as imagens.
Use este comando para baixar um modelo de definição de função do Azure e atualize-o com os parâmetros especificados anteriormente:
$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
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ê.
Execute os seguintes comandos para criar uma nova galeria e definição de imagem.
Esse código cria uma definição com o tipo de segurança de inicialização confiável e atende aos requisitos de imagem do Windows 365.
# Gallery name $galleryName= "devboxGallery" # Image definition name $imageDefName ="vscodeImageDef" # Additional 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"
Crie um arquivo para armazenar sua definição de modelo, como c:/temp/mytemplate.txt.
Copie o seguinte modelo do Gerenciador de Recursos do Azure para o Construtor de Imagens de VM em seu novo arquivo de modelo.
Este modelo indica a imagem de origem e as personalizações aplicadas. Ele instala Choco e VS Code, e também 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 Vscode", "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>" ] } ] } } ] }
Feche o arquivo de modelo antes de prosseguir para a próxima etapa.
Configure seu novo modelo com suas variáveis.
Substitua
<Template Path>
pelo local do arquivo de modelo, comoc:/temp/mytemplate
.$templateFilePath = <Template Path> (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
Envie seu modelo para o serviço.
O comando a seguir baixa quaisquer artefatos dependentes, como scripts, e os armazena no grupo de recursos de preparo. O grupo de recursos de preparo é prefixado com
IT_
.New-AzResourceGroupDeployment -ResourceGroupName $imageResourceGroup -TemplateFile $templateFilePath -Api-Version "2020-02-14" -imageTemplateName $imageTemplateName -svclocation $location
Crie a imagem invocando o
Run
comando no modelo:No prompt para confirmar o processo de execução, digite Sim.
Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2020-02-14" -Action Run
Importante
Criar a imagem e replicá-la para ambas as regiões pode levar algum tempo. Você pode ver uma diferença nos relatórios de andamento entre o PowerShell e o portal do Azure. Antes de começar a criar uma definição de caixa de desenvolvimento, aguarde até que o processo seja concluído.
Obtenha 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 Creating
Você também pode exibir o estado de provisionamento de sua imagem no portal do Azure. Acesse sua galeria e veja a definição da imagem.
Configurar a galeria
Depois que sua imagem personalizada for provisionada na galeria, você poderá configurá-la para usar as imagens no centro de desenvolvimento. Para obter mais informações, confira Galeria de Computação do Azure.
Configurar o Microsoft Dev Box com uma imagem personalizada
Depois que as imagens da galeria estiverem disponíveis no centro de desenvolvimento, você poderá usar a imagem personalizada com o Microsoft Dev Box. Para obter mais informações, consulte Guia de início rápido: configurar o Microsoft Dev Box.
Conteúdo relacionado
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de