Konfigurace vývojového pole pomocí Azure VM Image Builderu a Microsoft Dev Boxu
V tomto článku použijete Azure VM Image Builder k vytvoření přizpůsobeného vývojového pole v Microsoft Dev Boxu pomocí šablony. Šablona obsahuje krok přizpůsobení pro instalaci editoru Visual Studio Code (VS Code).
Použití standardizovaných imagí virtuálních počítačů pomáhá zajistit konzistentní nasazení při migraci do cloudu. Tyto image můžou zahrnovat předdefinované zabezpečení, nastavení konfigurace a nezbytný software. Nastavení kanálu pro vytváření bitové kopie může být časově náročné a složité. Azure VM Image Builder tento proces zjednodušuje tím, že umožňuje vytvořit konfiguraci pro vaši image, kterou pak služba sestaví a odešle do projektu vývojového boxu.
Ruční vytváření vlastních imagí virtuálních počítačů nebo s jinými nástroji může být obtížné a nespolehlivé. VM Image Builder, který je založený na HashiCorp Packeru, nabízí výhody spravované služby.
Pokud chcete zjednodušit vytváření imagí virtuálního počítače, Tvůrce imagí virtuálního počítače:
- Eliminuje potřebu složitých nástrojů, procesů a ručních kroků. Abstrahuje tyto podrobnosti a skryje potřeby specifické pro Azure, jako je generalizace image (Sysprep), a v případě potřeby umožňuje pokročilým uživatelům přepsat.
- Funguje s existujícími kanály buildu image. Image Builder virtuálního počítače můžete volat z kanálu nebo použít úlohu DevOps služby Azure VM Image Builder.
- Shromažďuje data přizpůsobení z různých zdrojů, takže je nemusíte shromažďovat na jednom místě.
- Integruje se s Galerií výpočetních prostředků Azure a vytváří systém pro správu imagí pro globální distribuci, replikaci, správu verzí a škálování. Stejnou image můžete distribuovat jako virtuální pevný disk nebo spravované image bez jejich opětovného sestavení.
Důležité
Microsoft Dev Box podporuje jenom image, které používají povolený typ zabezpečení Trusted Launch .
Požadavky
Pokud chcete zřídit vlastní image, kterou jste vytvořili pomocí Nástroje image virtuálního počítače, potřebujete:
- Azure PowerShell 6.0 nebo novější Pokud nemáte nainstalovaný PowerShell, postupujte podle pokynů v tématu Instalace Azure PowerShellu ve Windows.
- Oprávnění vlastníka nebo přispěvatele k předplatnému Azure nebo konkrétní skupině prostředků.
- Skupina prostředků
- Dev Center s připojeným síťovým připojením. Pokud ho nemáte, nakonfigurujte síťová připojení podle pokynů v části Připojení vývojových polí k prostředkům.
Vytvoření image Windows a její distribuce do Galerie výpočetních prostředků Azure
Prvním krokem je použít Azure VM Image Builder a Azure PowerShell k vytvoření image v Galerii výpočetních prostředků Azure a jeho globální distribuci.
Následující příklad používá PowerShell. Můžete také použít rozhraní příkazového řádku Azure (CLI).
Pokud chcete používat Image Builder virtuálního počítače, musíte zaregistrovat funkce.
Zkontrolujte registraci poskytovatele. Ujistěte se, že se každý příkaz vrátí
Registered
pro zadanou funkci.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
Pokud registrace poskytovatele nevrátí
Registered
, zaregistrujte poskytovatele spuštěním následujících příkazů: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
Instalace modulů PowerShellu:
'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
Vytvořte proměnné pro ukládání informací, které používáte více než jednou.
- Zkopírujte následující ukázkový kód.
- Nahraďte
<Resource group>
skupinou prostředků, kterou jste použili k vytvoření vývojového centra. - Spusťte aktualizovaný kód v PowerShellu.
# 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"
Vytvořte identitu přiřazenou uživatelem a nastavte oprávnění pro skupinu prostředků spuštěním následujícího kódu v PowerShellu.
Image Builder virtuálního počítače používá identitu uživatele, kterou zadáte k uložení image v Galerii výpočetních prostředků Azure. Následující příklad vytvoří definici role Azure s konkrétními akcemi pro distribuci image. Definice role se pak přiřadí identitě uživatele.
# 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
Přiřaďte oprávnění identitě k distribuci imagí.
Pomocí tohoto příkazu stáhněte šablonu definice role Azure a aktualizujte ji pomocí dříve zadaných parametrů:
$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"
Vytvoření galerie
Pokud chcete použít Tvůrce imagí virtuálních počítačů s galerií Azure Compute, ujistěte se, že máte existující galerii a definici image. VM Image Builder za vás nevytvoří galerii a definici image.
Spuštěním následujících příkazů vytvořte novou definici galerie a image.
Tento kód vytvoří definici s typem zabezpečení důvěryhodného spuštění a splňuje požadavky na image 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"
Vytvořte soubor pro uložení definice šablony, například c:/temp/mytemplate.txt.
Zkopírujte následující šablonu Azure Resource Manger pro VM Image Builder do nového souboru šablony.
Tato šablona označuje zdrojovou image a použité vlastní nastavení. Nainstaluje Choco a VS Code a také označuje umístění distribuce image.
{ "$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>" ] } ] } } ] }
Než budete pokračovat k dalšímu kroku, zavřete soubor šablony.
Nakonfigurujte novou šablonu pomocí proměnných.
Nahraďte
<Template Path>
umístěním souboru šablony, napříkladc:/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
Odešlete šablonu do služby.
Následující příkaz stáhne všechny závislé artefakty, jako jsou skripty, a uloží je do přípravné skupiny prostředků. Přípravná skupina prostředků má předponu
IT_
.New-AzResourceGroupDeployment -ResourceGroupName $imageResourceGroup -TemplateFile $templateFilePath -Api-Version "2020-02-14" -imageTemplateName $imageTemplateName -svclocation $location
Vytvořte image vyvoláním
Run
příkazu v šabloně:Na příkazovém řádku potvrďte proces spuštění zadáním ano.
Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2020-02-14" -Action Run
Důležité
Vytvoření image a jeho replikace do obou oblastí může nějakou dobu trvat. Mezi PowerShellem a webem Azure Portal se může zobrazit rozdíl v průběhu vytváření sestav. Než začnete vytvářet definici vývojového pole, počkejte, až se proces dokončí.
Získejte informace o nově vytvořené imagi, včetně stavu spuštění a stavu zřizování.
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup | Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
Ukázkový výstup:
Name LastRunStatusRunState LastRunStatusMessage ProvisioningState --------------------------------------------------------------------------------------- vscodeWinTemplate Creating
Stav zřizování image můžete zobrazit také na webu Azure Portal. Přejděte do galerie a zobrazte definici obrázku.
Konfigurace galerie
Když je vaše vlastní image uložená v galerii, můžete ji nakonfigurovat tak, aby používala obrázky ve vývojovém centru. Další informace najdete v tématu Konfigurace galerie výpočetních prostředků Azure.
Nastavení Microsoft Dev Boxu s vlastní imagí
Pokud jsou obrázky z galerie dostupné v centru pro vývoj, můžete vlastní image použít s Microsoft Dev Boxem. Další informace najdete v tématu Rychlý start: Konfigurace Microsoft Dev Boxu.