Migracja na szczyt innowacji:
Dowiedz się, jak migrowanie i modernizacja na platformę Azure może zwiększyć wydajność, odporność i bezpieczeństwo firmy, umożliwiając pełne wykorzystanie sztucznej inteligencji.Zarejestruj się teraz
Ta przeglądarka nie jest już obsługiwana.
Przejdź na przeglądarkę Microsoft Edge, aby korzystać z najnowszych funkcji, aktualizacji zabezpieczeń i pomocy technicznej.
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
Skrypty instalowania aplikacji znajdziesz 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_v2 lub nowszego. Domyślny rozmiar to Standard_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ć:
Oznacz jako komentarz kod: dziennik kompilacji konstruktora obrazów maszyny wirtualnej, customization.log, jest pełny. 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ą 0 kod zakończenia. Jeśli używasz kodu zakończenia innego niż zero, konstruktor obrazów maszyny wirtualnej zakończy się niepowodzeniem dostosowywania i zatrzyma kompilację. Jeśli masz złożone skrypty, dodaj instrumentację i emituj kody zakończenia, które będą wyświetlane w pliku customization.log .
Write-Host "Exit code: " $LASTEXITCODE
Test: przetestuj i przetestuj kod na autonomicznej maszynie wirtualnej. Upewnij się, że nie ma żadnych monitów użytkownika, że używasz odpowiednich uprawnień itd.
Sieć: Set-NetAdapterAdvancedProperty jest ustawiana w skrygcie optymalizacji, ale kończy się niepowodzeniem kompilacji konstruktora obrazów maszyny wirtualnej. Ponieważ rozłącza sieć, jest ona oznaczona jako komentarz. 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).PrincipalId
Przypisz uprawnienia do tożsamości, aby dystrybuować obrazy. 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
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.
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: wielu sesjach i jednej sesji.
Obrazy wielosesyjne są przeznaczone do użycia w puli. Oto przykład szczegółów obrazu na platformie Azure:
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 i zweryfikowanie, sprawdzenie uprawnień i zapisanie ich w przejściowej grupie zasobów, która jest poprzedzona 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
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
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.
Galeria udostępnionych obrazów upraszcza udostępnianie spersonalizowanych obrazów w całej organizacji. Obrazy niestandardowe mogą być używane do inicjowania zadań wdrażania, takich jak przedwczesne ładowanie aplikacji, konfiguracje aplikacji i inne konfiguracje systemu operacyjnego.
Planowanie, dostarczanie i monitorowanie środowisk pulpitu wirtualnego oraz aplikacji zdalnych oraz zarządzanie nimi na platformie Microsoft Azure dla dowolnego urządzenia.