Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: ✔️ maszyny wirtualne z systemem Windows
Z tego artykułu dowiesz się, jak utworzyć obraz usługi Azure Virtual Desktop przy użyciu następujących dostosowań:
- FSLogix konfiguracja
- Optymalizacja usługi Azure Virtual Desktop
- Instalacja usługi Microsoft Teams
- konfigurator ponownego uruchamiania systemu Windows
- Dostosowywacz usługi Windows Update
W tym artykule omówiono sposób automatyzowania dostosowań przy użyciu narzędzia Azure VM Image Builder. Następnie możesz rozpowszechnić obraz w galerii obliczeniowej platformy Azure (wcześniej udostępnionej galerii obrazów), gdzie można replikować go do innych regionów, kontrolować skalę i udostępniać obraz w organizacji i poza nią.
Aby uprościć wdrażanie konfiguracji narzędzia Image Builder maszyny wirtualnej, w tym przykładzie użyto szablonu usługi Azure Resource Manager z zagnieżdżonym w nim szablonem konstruktora obrazów maszyny wirtualnej. Takie podejście zapewnia kilka dodatkowych korzyści, takich jak zmienne i dane wejściowe parametrów. Parametry można również przekazać z wiersza polecenia.
Ten artykuł jest przeznaczony jako ćwiczenie kopiowania i wklejania.
Uwaga / Notatka
Skrypty instalowania aplikacji można znaleźć w witrynie GitHub. Są one przeznaczone tylko do celów ilustracyjnych i testowych. Nie należy ich używać w przypadku obciążeń produkcyjnych.
Porady dotyczące tworzenia obrazów systemu Windows
Rozmiar maszyny wirtualnej: w przypadku systemu Windows użyj
Standard_D2_v2lub nowszego. Domyślny rozmiar toStandard_D1_v2, który nie jest odpowiedni dla systemu Windows.W tym artykule są używane skrypty konfiguratora programu PowerShell . Użyj następujących ustawień lub kompilacja przestanie odpowiadać:
"runElevated": true, "runAsSystem": true,Przykład:
{ "type": "PowerShell", "name": "installFSLogix", "runElevated": true, "runAsSystem": true, "scriptUri": "https://raw.githubusercontent.com/azure/azvmimagebuilder/main/solutions/14_Building_Images_WVD/0_installConfFsLogix.ps1"Skomentuj swój kod: Dziennik kompilacji VM Image Builder, customization.log, jest szczegółowy. Jeśli skomentujesz skrypty przy użyciu polecenia "write-host", zostaną one wysłane do dzienników, co powinno ułatwić rozwiązywanie problemów.
write-host 'AIB Customization: Starting OS Optimizations script'Kody zakończenia: Konstruktor obrazów maszyny wirtualnej oczekuje, że wszystkie skrypty zwracają
0kod zakończenia. Jeśli używasz kodu zakończenia innego niż zero, Kreator obrazów VM przerwie dostosowywanie i zatrzyma proces budowania. Jeśli masz złożone skrypty, dodaj instrumentację i wygeneruj kody zakończenia, które będą wyświetlane w pliku customization.log.Write-Host "Exit code: " $LASTEXITCODETest: przetestuj i ponownie przetestuj kod na samodzielnej maszynie wirtualnej. Upewnij się, że nie ma żadnych monitów użytkownika, że używasz odpowiednich uprawnień itd.
Sieć:
Set-NetAdapterAdvancedPropertyjest ustawiana w skrypcie optymalizacji, ale kończy się niepowodzeniem budowy buildera obrazów VM. Ponieważ powoduje rozłączenie sieci, jest zakomentowana. Badamy ten problem.
Wymagania wstępne
Musisz mieć zainstalowane najnowsze polecenia cmdlet programu Azure PowerShell. Aby uzyskać więcej informacji, zobacz Omówienie programu Azure PowerShell.
# Check to ensure that you're registered for the providers and RegistrationState is set to 'Registered'
Get-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages
Get-AzResourceProvider -ProviderNamespace Microsoft.Storage
Get-AzResourceProvider -ProviderNamespace Microsoft.Compute
Get-AzResourceProvider -ProviderNamespace Microsoft.KeyVault
Get-AzResourceProvider -ProviderNamespace Microsoft.ContainerInstance
# If they don't show as 'Registered', run the following commented-out code
## Register-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages
## Register-AzResourceProvider -ProviderNamespace Microsoft.Storage
## Register-AzResourceProvider -ProviderNamespace Microsoft.Compute
## Register-AzResourceProvider -ProviderNamespace Microsoft.KeyVault
## Register-AzResourceProvider -ProviderNamespace Microsoft.ContainerInstance
Konfigurowanie środowiska i zmiennych
# Step 1: Import module
Import-Module Az.Accounts
# Step 2: get existing context
$currentAzContext = Get-AzContext
# Destination image resource group
$imageResourceGroup="avdImageDemoRg"
# Location (see possible locations in the main docs)
$location="westus2"
# Your subscription. This command gets your current subscription
$subscriptionID=$currentAzContext.Subscription.Id
# Image template name
$imageTemplateName="avd10ImageTemplate01"
# Distribution properties object name (runOutput). Gives you the properties of the managed image on completion
$runOutputName="sigOutput"
# Create resource group
New-AzResourceGroup -Name $imageResourceGroup -Location $location
Uprawnienia, tożsamość użytkownika i rola
Utwórz tożsamość użytkownika.
# setup role def names, these need to be unique $timeInt=$(get-date -UFormat "%s") $imageRoleDefName="Azure Image Builder Image Def"+$timeInt $identityName="aibIdentity"+$timeInt ## Add Azure PowerShell modules to support AzUserAssignedIdentity and Azure VM Image Builder 'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease} # Create the identity New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location $identityNameResourceId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id $identityNamePrincipalId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalIdPrzypisz uprawnienia tożsamości do dystrybuowania obrazów. Następujące polecenia pobierają i aktualizują szablon przy użyciu wcześniej określonych parametrów.
$aibRoleImageCreationUrl="https://raw.githubusercontent.com/azure/azvmimagebuilder/main/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json" $aibRoleImageCreationPath = "aibRoleImageCreation.json" # Download the config 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"
Uwaga / Notatka
Jeśli zostanie wyświetlony błąd "New-AzRoleDefinition: Przekroczono limit definicji roli. Nie można utworzyć więcej definicji ról", zobacz Rozwiązywanie problemów z kontrolą dostępu opartą na rolach na platformie Azure.
Tworzenie galerii zasobów obliczeniowych platformy Azure
Jeśli nie masz jeszcze galerii zasobów obliczeniowych platformy Azure, musisz je utworzyć.
$sigGalleryName= "myaibsig01"
$imageDefName ="win10avd"
# Create the gallery
New-AzGallery -GalleryName $sigGalleryName -ResourceGroupName $imageResourceGroup -Location $location
# Create the gallery definition
New-AzGalleryImageDefinition -GalleryName $sigGalleryName -ResourceGroupName $imageResourceGroup -Location $location -Name $imageDefName -OsState generalized -OsType Windows -Publisher 'myCo' -Offer 'Windows' -Sku '10avd'
Konfigurowanie szablonu konstruktora obrazów maszyny wirtualnej
W tym przykładzie przygotowaliśmy szablon, który pobiera i aktualizuje szablon konstruktora obrazów maszyny wirtualnej z określonymi wcześniej parametrami. Szablon instaluje oprogramowanie FSLogix, optymalizacje systemu operacyjnego i usługę Microsoft Teams, a na końcu uruchamia usługę Windows Update.
Jeśli otworzysz szablon, możesz zobaczyć we właściwości źródłowej używany obraz. W tym przykładzie użyto obrazu z wieloma sesjami systemu Windows 10.
Obrazy systemu Windows 10
Należy pamiętać o dwóch kluczowych typach obrazów: wielosesyjnych i jednosyjnych.
Obrazy wielosesyjne są przeznaczone do wspólnego użytku. Oto przykład szczegółów obrazu na platformie Azure:
"publisher": "MicrosoftWindowsDesktop",
"offer": "Windows-10",
"sku": "20h2-avd",
"version": "latest"
Obrazy z pojedynczej sesji są przeznaczone do indywidualnego użycia. Oto przykład szczegółów obrazu na platformie Azure:
"publisher": "MicrosoftWindowsDesktop",
"offer": "Windows-10",
"sku": "19h2-ent",
"version": "latest"
Możesz również zmienić dostępne obrazy systemu Windows 10:
Get-AzVMImageSku -Location westus2 -PublisherName MicrosoftWindowsDesktop -Offer windows-10
Pobieranie i konfigurowanie szablonu
Teraz pobierz szablon i skonfiguruj go do własnego użycia.
$templateUrl="https://raw.githubusercontent.com/azure/azvmimagebuilder/main/solutions/14_Building_Images_WVD/armTemplateWVD.json"
$templateFilePath = "armTemplateWVD.json"
Invoke-WebRequest -Uri $templateUrl -OutFile $templateFilePath -UseBasicParsing
((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 '<region>',$location) | 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>',$sigGalleryName) | Set-Content -Path $templateFilePath
((Get-Content -path $templateFilePath -Raw) -replace '<region1>',$location) | Set-Content -Path $templateFilePath
((Get-Content -path $templateFilePath -Raw) -replace '<imgBuilderId>',$identityNameResourceId) | Set-Content -Path $templateFilePath
((Get-Content -path $templateFilePath -Raw) -replace '20h1-ent','win10-21h2-ent-g2') | Set-Content -Path $templateFilePath
Możesz wyświetlić szablon . Cały kod jest wyświetlany.
Przesyłanie szablonu
Szablon musi zostać przesłany do usługi. Spowoduje to pobranie wszelkich zależnych artefaktów, takich jak skrypty, oraz ich walidację, sprawdzanie uprawnień i przechowywanie w przejściowej grupie zasobów, której prefiks to IT_.
New-AzResourceGroupDeployment -ResourceGroupName $imageResourceGroup -TemplateFile $templateFilePath -TemplateParameterObject @{"api-Version" = "2020-02-14"; "imageTemplateName" = $imageTemplateName; "svclocation" = $location}
# Optional - if you have any errors running the preceding command, run:
$getStatus=$(Get-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName)
$getStatus.ProvisioningErrorCode
$getStatus.ProvisioningErrorMessage
Tworzenie obrazu
Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName -NoWait
Uwaga / Notatka
Polecenie nie czeka na ukończenie kompilacji obrazu przez usługę Vm Image Builder, więc możesz wykonać zapytanie o stan, jak pokazano tutaj.
$getStatus=$(Get-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName)
# Shows all the properties
$getStatus | Format-List -Property *
# Shows the status of the build
$getStatus.LastRunStatusRunState
$getStatus.LastRunStatusMessage
$getStatus.LastRunStatusRunSubState
Tworzenie maszyny wirtualnej
Teraz, gdy obraz został zbudowany, możesz utworzyć z niego maszynę wirtualną. Skorzystaj z przykładów z modułu programu PowerShellNew-AzVM (Az.Compute).
Czyszczenie zasobów
Jeśli nie potrzebujesz już zasobów utworzonych podczas tego procesu, możesz je usunąć, wykonując następujące czynności:
Ważne
Najpierw usuń szablon grupy zasobów. Jeśli usuniesz tylko grupę zasobów, tymczasowa grupa zasobów (IT_), która jest używana przez narzędzie VM Image Builder, nie zostanie wyczyszczona.
Usuń szablon konstruktora obrazów maszyny wirtualnej.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name vd10ImageTemplateUsuń przypisanie roli.
Remove-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" ## Remove the definitions Remove-AzRoleDefinition -Name "$identityNamePrincipalId" -Force -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" ## Delete the identity Remove-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -ForceUsuń grupę zasobów.
Remove-AzResourceGroup $imageResourceGroup -Force
Dalsze kroki
Aby wypróbować więcej przykładów VM Image Buildera, przejdź do witryny GitHub.