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 padronizadas de máquina virtual (VM), ela pode migrar mais facilmente para a nuvem e ajudar a garantir a consistência em suas implantações. Normalmente, as imagens incluem segurança predefinida, definições de configuração e qualquer software necessário. Configurar seu próprio pipeline de geração de imagens requer tempo, infraestrutura e muitos outros detalhes. Com o Azure VM Image Builder, 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 VM personalizadas manualmente ou usando outras ferramentas, o processo pode ser complicado e não confiável. O VM Image Builder, que é construído no HashiCorp Packer, oferece os benefícios de um serviço gerenciado.
Para reduzir a complexidade da criação de imagens de VM, o VM Image Builder:
Remove a necessidade de usar ferramentas, processos e etapas manuais complexas para criar uma imagem de VM. O VM Image Builder abstrai todos esses detalhes e oculta requisitos específicos do Azure, como a necessidade de generalizar a imagem (Sysprep). E dá aos usuários mais avançados a capacidade de substituir tais requisitos.
Funciona com pipelines de construção de imagem existentes para uma experiência click-and-go. Você pode chamar o Construtor de Imagens de VM do seu pipeline ou usar uma tarefa de DevOps do serviço do 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 com a Galeria de Computação do Azure, que cria um sistema de gerenciamento de imagens para distribuir, replicar, controlar versões 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 reconstruí-las do zero.
Importante
O Microsoft Dev Box suporta apenas imagens que utilizam o tipo de segurança Trusted Launch ativado.
Pré-requisitos
Para provisionar uma imagem personalizada que você criou 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 uma, 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 Construtor de Imagens de VM do Azure 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 VM Image Builder, você precisa registrar os recursos.
Verifique os registos do seu fornecedor. Certifique-se de que cada comando retorna
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
Instale os 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 é então 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 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"
Crie uma galeria
Para usar o Construtor de Imagens de VM com a Galeria de Computação do Azure, você precisa ter uma galeria e uma definição de imagem existentes. O VM Image Builder não cria a galeria e a definição de imagem 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 todos os artefatos dependentes, como scripts, e os armazena no grupo de recursos de preparação. 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 no relatório de progresso 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 da 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 da sua imagem no portal do Azure. Aceda à 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, consulte Configurar a 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údos relacionados
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários