Konfigurowanie pola deweloperskiego przy użyciu narzędzia Azure VM Image Builder i usługi Microsoft Dev Box
W tym artykule użyjesz narzędzia Azure VM Image Builder do utworzenia dostosowanego pola deweloperskiego w usłudze Microsoft Dev Box przy użyciu szablonu. Szablon zawiera krok dostosowywania umożliwiający zainstalowanie programu Visual Studio Code (VS Code).
Korzystanie ze standardowych obrazów maszyn wirtualnych pomaga zapewnić spójne wdrożenia podczas migracji do chmury. Te obrazy mogą obejmować wstępnie zdefiniowane zabezpieczenia, ustawienia konfiguracji i niezbędne oprogramowanie. Konfigurowanie potoku obrazowania może być czasochłonne i złożone. Narzędzie Azure VM Image Builder upraszcza ten proces, umożliwiając utworzenie konfiguracji obrazu, którą następnie usługa kompiluje i przesyła do projektu usługi dev box.
Ręczne tworzenie niestandardowych obrazów maszyn wirtualnych lub za pomocą innych narzędzi może być trudne i zawodne. Konstruktor obrazów maszyny wirtualnej, który jest zbudowany na platformie HashiCorp Packer, oferuje zalety usługi zarządzanej.
Aby uprościć tworzenie obrazu maszyny wirtualnej, konstruktor obrazów maszyny wirtualnej:
- Eliminuje potrzebę złożonych narzędzi, procesów i ręcznych kroków. Wyodrębnia te szczegóły i ukrywa potrzeby specyficzne dla platformy Azure, takie jak uogólnienie obrazu (Sysprep), umożliwiając użytkownikom zaawansowanym zastępowanie w razie potrzeby.
- Działa z istniejącymi potokami kompilacji obrazu. Konstruktor obrazów maszyny wirtualnej można wywołać z potoku lub użyć zadania DevOps usługi Azure VM Image Builder.
- Zbiera dane dostosowywania z różnych źródeł, aby nie trzeba było zbierać ich wszystkich w jednym miejscu.
- Integruje się z usługą Azure Compute Gallery, tworząc system zarządzania obrazami na potrzeby dystrybucji globalnej, replikacji, przechowywania wersji i skalowania. Ten sam obraz można dystrybuować jako wirtualny dysk twardy lub obrazy zarządzane bez ich ponownego kompilowania.
Ważne
Usługa Microsoft Dev Box obsługuje tylko obrazy używające typu zabezpieczeń Włączone zaufane uruchamianie .
Wymagania wstępne
Aby aprowizować obraz niestandardowy utworzony za pomocą narzędzia VM Image Builder, potrzebne są następujące elementy:
- Program Azure PowerShell w wersji 6.0 lub nowszej. Jeśli nie masz zainstalowanego programu PowerShell, wykonaj kroki opisane w temacie Instalowanie programu Azure PowerShell w systemie Windows.
- Uprawnienia właściciela lub współautora w subskrypcji platformy Azure lub w określonej grupie zasobów.
- Grupa zasobów.
- Centrum deweloperskie z dołączonym połączeniem sieciowym. Jeśli go nie masz, wykonaj kroki opisane w temacie Łączenie pól deweloperskich z zasobami, konfigurując połączenia sieciowe.
Tworzenie obrazu systemu Windows i dystrybuowanie go do galerii zasobów obliczeniowych platformy Azure
Pierwszym krokiem jest użycie narzędzia Azure VM Image Builder i programu Azure PowerShell w celu utworzenia obrazu w galerii obliczeń platformy Azure i dystrybuowania go globalnie.
W poniższym przykładzie użyto programu PowerShell. Możesz również użyć interfejsu wiersza polecenia platformy Azure.
Aby użyć narzędzia VM Image Builder, należy zarejestrować funkcje.
Sprawdź rejestracje dostawcy. Upewnij się, że każde polecenie jest zwracane
Registered
dla określonej funkcji.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
Jeśli rejestracje dostawcy nie zwracają
Registered
, zarejestruj dostawców, uruchamiając następujące polecenia: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
Zainstaluj moduły programu PowerShell:
'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
Utwórz zmienne do przechowywania informacji używanych więcej niż raz.
- Skopiuj następujący przykładowy kod.
- Zastąp element
<Resource group>
grupą zasobów użytą do utworzenia centrum deweloperskiego. - Uruchom zaktualizowany kod w programie 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"
Utwórz tożsamość przypisaną przez użytkownika i ustaw uprawnienia w grupie zasobów, uruchamiając następujący kod w programie PowerShell.
Narzędzie VM Image Builder używa tożsamości użytkownika podanej do przechowywania obrazu w galerii obliczeń platformy Azure. Poniższy przykład tworzy definicję roli platformy Azure z określonymi akcjami do dystrybucji obrazu. Definicja roli jest następnie przypisywana do tożsamości użytkownika.
# 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
Przypisz uprawnienia do tożsamości, aby rozpowszechniać obrazy.
Użyj tego polecenia, aby pobrać szablon definicji roli platformy Azure i zaktualizować go przy użyciu wcześniej określonych parametrów:
$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"
Utwórz galerię
Aby użyć konstruktora obrazów maszyny wirtualnej z galerią obliczeń platformy Azure, upewnij się, że masz istniejącą galerię i definicję obrazu. Konstruktor obrazów maszyny wirtualnej nie tworzy galerii i definicji obrazu.
Uruchom następujące polecenia, aby utworzyć nową galerię i definicję obrazu.
Ten kod tworzy definicję z zaufanym typem zabezpieczeń uruchamiania i spełnia wymagania dotyczące obrazu systemu 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"
Utwórz plik do przechowywania definicji szablonu, na przykład c:/temp/mytemplate.txt.
Skopiuj następujący szablon usługi Azure Resource Manger dla konstruktora obrazów maszyny wirtualnej do nowego pliku szablonu.
Ten szablon wskazuje obraz źródłowy i zastosowane dostosowania. Instaluje oprogramowanie Choco i VS Code, a także wskazuje lokalizację dystrybucji obrazów.
{ "$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>" ] } ] } } ] }
Zamknij plik szablonu przed przejściem do następnego kroku.
Skonfiguruj nowy szablon przy użyciu zmiennych.
Zastąp
<Template Path>
element lokalizacją pliku szablonu, na przykładc:/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
Prześlij szablon do usługi.
Następujące polecenie pobiera wszystkie zależne artefakty, takie jak skrypty, i przechowuje je w przejściowej grupie zasobów. Tymczasowa grupa zasobów ma prefiks
IT_
.New-AzResourceGroupDeployment -ResourceGroupName $imageResourceGroup -TemplateFile $templateFilePath -Api-Version "2020-02-14" -imageTemplateName $imageTemplateName -svclocation $location
Skompiluj obraz, wywołując
Run
polecenie w szablonie:Po wyświetleniu monitu o potwierdzenie procesu uruchamiania wprowadź wartość Tak.
Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2020-02-14" -Action Run
Ważne
Utworzenie obrazu i replikowanie go do obu regionów może zająć trochę czasu. Może wystąpić różnica w raportowaniu postępu między programem PowerShell i witryną Azure Portal. Przed rozpoczęciem tworzenia definicji pola deweloperskiego poczekaj na zakończenie procesu.
Uzyskaj informacje o nowo utworzonym obrazie, w tym o stanie uruchomienia i stanie aprowizacji.
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup | Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
Przykładowe dane wyjściowe:
Name LastRunStatusRunState LastRunStatusMessage ProvisioningState --------------------------------------------------------------------------------------- vscodeWinTemplate Creating
Stan aprowizacji obrazu można również wyświetlić w witrynie Azure Portal. Przejdź do galerii i wyświetl definicję obrazu.
Konfigurowanie galerii
Gdy obraz niestandardowy jest przechowywany w galerii, możesz skonfigurować galerię tak, aby korzystała z obrazów w centrum deweloperów. Aby uzyskać więcej informacji, zobacz Konfigurowanie galerii obliczeń platformy Azure.
Konfigurowanie usługi Microsoft Dev Box przy użyciu obrazu niestandardowego
Gdy obrazy galerii są dostępne w centrum deweloperów, możesz użyć obrazu niestandardowego z usługą Microsoft Dev Box. Aby uzyskać więcej informacji, zobacz Szybki start: Konfigurowanie usługi Microsoft Dev Box.