Azure Virtual Desktop-rendszerkép létrehozása a VM Image Builder és a PowerShell használatával
A következőkre vonatkozik: ✔️ Windows rendszerű virtuális gépek
Ebből a cikkből megtudhatja, hogyan hozhat létre Azure Virtual Desktop-rendszerképet az alábbi testreszabásokkal:
- FSLogix beállítása
- Az Azure Virtual Desktop optimalizálása
- Microsoft Teams telepítése
- A Windows újraindítása testreszabó
- Windows Update testreszabó
A cikk azt ismerteti, hogyan automatizálhatja a testreszabásokat az Azure VM Image Builder használatával. Ezután terjesztheti a lemezképet egy Azure Compute Gallerybe (korábban Shared Image Gallery), ahol replikálhatja más régiókba, szabályozhatja a skálázást, és megoszthatja a rendszerképet a szervezeten belül és kívül.
A VM Image Builder-konfiguráció üzembe helyezésének egyszerűsítése érdekében a példánk egy Azure Resource Manager-sablont használ, amelybe a VM Image Builder-sablon van beágyazva. Ez a megközelítés további előnyöket nyújt, például a változókat és a paraméterbemeneteket. Paramétereket a parancssorból is átadhat.
Ez a cikk másolási és beillesztési gyakorlatként szolgál.
Megjegyzés
Az alkalmazásokat a GitHubon telepítheti. Csak illusztrációs és tesztelési célokra szolgálnak. Éles számítási feladatokhoz ne használja őket.
Tippek Windows-rendszerképek készítéséhez
Virtuális gép mérete: Windows esetén használja
Standard_D2_v2
vagy nagyobb. Az alapértelmezett méret aStandard_D1_v2
, amely nem felel meg a Windowsnak.Ez a cikk PowerShell-testreszabó szkripteket használ. Használja az alábbi beállításokat, vagy a build nem válaszol:
"runElevated": true, "runAsSystem": true,
Például:
{ "type": "PowerShell", "name": "installFSLogix", "runElevated": true, "runAsSystem": true, "scriptUri": "https://raw.githubusercontent.com/azure/azvmimagebuilder/main/solutions/14_Building_Images_WVD/0_installConfFsLogix.ps1"
Megjegyzés a kódhoz: A VM Image Builder buildnaplója, a testreszabás.log részletes. Ha "write-host" használatával megjegyzést fűz a szkriptekhez, a rendszer elküldi őket a naplókba, ami megkönnyíti a hibaelhárítást.
write-host 'AIB Customization: Starting OS Optimizations script'
Kilépési kódok: A VM Image Builder arra számít, hogy az összes szkript egy kilépési kódot ad vissza
0
. Ha nem nulla kilépési kódot használ, a VM Image Builder nem tudja végrehajtani a testreszabást, és leállítja a buildet. Ha összetett szkriptekkel rendelkezik, adjon hozzá rendszerállapotot, és adjon ki kilépési kódokat, amelyek megjelennek a testreszabás.log fájlban.Write-Host "Exit code: " $LASTEXITCODE
Teszt: Tesztelje és tesztelje újra a kódot egy különálló virtuális gépen. Győződjön meg arról, hogy nincsenek felhasználói kérések, hogy a megfelelő jogosultságokat használja, és így tovább.
Hálózatkezelés:
Set-NetAdapterAdvancedProperty
az optimalizálási szkriptben van beállítva, de a VM Image Builder buildelése meghiúsul. Mivel leválasztja a hálózatot, a rendszer megjegyzést fűz hozzá. A probléma kivizsgálása folyamatban van.
Előfeltételek
Telepítve kell lennie a legújabb Azure PowerShell parancsmagoknak. További információ: A Azure PowerShell áttekintése.
# 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
A környezet és a változók beállítása
# 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
Engedélyek, felhasználói identitás és szerepkör
Hozzon létre egy felhasználói identitást.
# 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
Engedélyek hozzárendelése az identitáshoz a képek terjesztéséhez. A következő parancsok letöltik és frissítik a sablont a korábban megadott paraméterekkel.
$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"
Megjegyzés
Ha a következő hibaüzenetet kapja: "New-AzRoleDefinition: A szerepkördefiníció korlátja túllépve. Nem hozható létre több szerepkördefiníció", lásd: Az Azure RBAC (szerepköralapú hozzáférés-vezérlés) hibaelhárítása.
Azure Compute-katalógus létrehozása
Ha még nincs Azure Compute-katalógusa, létre kell hoznia egyet.
$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'
A VM Image Builder-sablon konfigurálása
Ebben a példában készítettünk egy sablont, amely letölti és frissíti a VM Image Builder sablont a korábban megadott paraméterekkel. A sablon telepíti az FSLogixot, az operációs rendszer optimalizálását és a Microsoft Teamst, és a végén Windows Update fut.
Ha megnyitja a sablont, a forrástulajdonságban láthatja a használt képet. Ebben a példában egy Windows 10 több munkamenetes rendszerképet használ.
Windows 10 képek
A rendszerképek két fő típusát kell figyelembe vennie: a több munkamenetet és az egy munkamenetet.
A több munkamenetes rendszerképek készletezett használatra szolgálnak. Íme egy példa a kép részleteire az Azure-ban:
"publisher": "MicrosoftWindowsDesktop",
"offer": "Windows-10",
"sku": "20h2-avd",
"version": "latest"
Az egy munkamenetes rendszerképek egyéni használatra készültek. Íme egy példa a kép részleteire az Azure-ban:
"publisher": "MicrosoftWindowsDesktop",
"offer": "Windows-10",
"sku": "19h2-ent",
"version": "latest"
Azt is módosíthatja, hogy mely Windows 10 képek érhetők el:
Get-AzVMImageSku -Location westus2 -PublisherName MicrosoftWindowsDesktop -Offer windows-10
A sablon letöltése és konfigurálása
Most töltse le a sablont, és konfigurálja saját használatra.
$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
Nyugodtan megtekintheti a sablont. Az összes kód megtekinthető.
A sablon elküldése
A sablont el kell küldeni a szolgáltatásnak. Ezzel letölti a függő összetevőket, például a szkripteket, és ellenőrzi, ellenőrzi az engedélyeket, és azokat az előkészítési erőforráscsoportban tárolja, amely IT_ előtaggal rendelkezik.
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
Rendszerkép létrehozása
Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName -NoWait
Megjegyzés
A parancs nem várja meg, hogy a VM Image Builder szolgáltatás befejezze a rendszerkép összeállítását, így az itt látható módon lekérdezheti az állapotot.
$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
Virtuális gép létrehozása
Most, hogy a rendszerkép elkészült, létrehozhat belőle egy virtuális gépet. Használja a New-AzVM (Az PowerShell-modul) példáit. Számítás).
Az erőforrások törlése
Ha már nincs szüksége a folyamat során létrehozott erőforrásokra, az alábbi lépéssel törölheti őket:
Fontos
Először törölje az erőforráscsoport-sablont. Ha csak az erőforráscsoportot törli, a VM Image Builder által használt átmeneti erőforráscsoport (IT_) nem lesz eltávolítva.
Távolítsa el a VM Image Builder sablont.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name vd10ImageTemplate
Törölje a szerepkör-hozzárendelést.
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 -Force
Törölje az erőforráscsoportot.
Remove-AzResourceGroup $imageResourceGroup -Force
Következő lépések
További VM Image Builder-példák kipróbálásához lépjen a GitHubra.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: