Windows rendszerű virtuális gép létrehozása a VM Image Builderrel a PowerShell használatával
A következőkre vonatkozik: ✔️ Windows rendszerű virtuális gépek
Ez a cikk bemutatja, hogyan hozhat létre testreszabott Windows rendszerű virtuálisgép-rendszerképet az Azure VM Image Builder PowerShell-modul használatával.
Előfeltételek
Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.
Ha úgy dönt, hogy helyileg használja a PowerShellt, ehhez a cikkhez telepítenie kell az Azure PowerShell-modult, és csatlakoznia kell az Azure-fiókjához az Csatlakozás-AzAccount parancsmag használatával. További információ: Az Azure PowerShell telepítése.
Néhány lépéshez az Az.ImageBuilder modul parancsmagjai szükségesek. Telepítse külön a következő paranccsal.
Install-Module -Name Az.ImageBuilder
Azure Cloud Shell
Az Azure által üzemeltetett Azure Cloud Shell egy interaktív felület, amelyet a böngészőből használhat. A Bash vagy a PowerShell segítségével is használhatja a Cloud Shellt az Azure-szolgáltatásokhoz. A Cloud Shell előre telepített parancsaival futtathatja a jelen cikkben szereplő kódot anélkül, hogy bármit telepítenie kellene a helyi környezetben.
Az Azure Cloud Shell indítása:
Lehetőség | Példa/hivatkozás |
---|---|
Válassza a Kipróbálás lehetőséget egy kód vagy parancsblokk jobb felső sarkában. A Kipróbálás lehetőség választása nem másolja automatikusan a kódot vagy a parancsot a Cloud Shellbe. | |
Látogasson el a https://shell.azure.com webhelyre, vagy kattintson a Cloud Shell indítása gombra a böngészőben. | |
Az Azure Portal jobb felső sarkában található menüben kattintson a Cloud Shell gombra. |
Az Azure Cloud Shell használata:
Indítsa el a Cloud Shellt.
A kód vagy parancs másolásához kattintson a Másolás gombra egy kódblokkon (vagy parancsblokkon).
Illessze be a kódot vagy parancsot a Cloud Shell-munkamenetbe a Windows és Linux rendszeren a Ctrl Shift+V billentyűkombinációval+, vagy a Cmd+Shift+V macOS rendszeren való kiválasztásával.
A kód vagy parancs futtatásához válassza az Enter lehetőséget .
Ha több Azure-előfizetéssel rendelkezik, válassza ki a megfelelő előfizetést, amelyben az erőforrásokat ki kell számlázni. Válasszon ki egy adott előfizetést a Set-AzContext parancsmag használatával.
Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000
Szolgáltatók regisztrálása
Ha még nem tette meg, regisztrálja a következő erőforrás-szolgáltatókat az Azure-előfizetéshez való használatra:
- Microsoft.Compute
- Microsoft.KeyVault
- Microsoft.Storage
- Microsoft.Network
- Microsoft.VirtualMachineImages
- Microsoft.ManagedIdentity
- Microsoft.ContainerInstance
Get-AzResourceProvider -ProviderNamespace Microsoft.Compute, Microsoft.KeyVault, Microsoft.Storage, Microsoft.VirtualMachineImages, Microsoft.Network, Microsoft.ManagedIdentity |
Where-Object RegistrationState -ne Registered |
Register-AzResourceProvider
Változók meghatározása
Mivel néhány információt többször is használni fog, hozzon létre néhány változót az információk tárolásához:
# Destination image resource group name
$imageResourceGroup = 'myWinImgBuilderRG'
# Azure region
$location = 'WestUS2'
# Name of the image to be created
$imageTemplateName = 'myWinImage'
# Distribution properties of the managed image upon completion
$runOutputName = 'myDistResults'
Hozzon létre egy változót az Azure-előfizetés azonosítójához. Annak ellenőrzéséhez, hogy a subscriptionID
változó tartalmazza-e az előfizetés azonosítóját, futtassa a második sort a következő példában:
# Your Azure Subscription ID
$subscriptionID = (Get-AzContext).Subscription.Id
Write-Output $subscriptionID
Erőforráscsoport létrehozása
Hozzon létre egy Azure-erőforráscsoportot a New-AzResourceGroup parancsmaggal. Az erőforráscsoport olyan logikai tároló, amelyben a rendszer csoportként helyezi üzembe és kezeli az Azure-erőforrásokat.
Az alábbi példa létrehoz egy erőforráscsoportot, amely a változóban $imageResourceGroup
megadott $location
régió változójának neve alapján jön létre. Ez az erőforráscsoport a képkonfigurációs sablon összetevőjének és a rendszerképnek a tárolására szolgál.
New-AzResourceGroup -Name $imageResourceGroup -Location $location
Felhasználói identitás létrehozása és szerepkör-engedélyek beállítása
Adjon engedélyt az Azure image buildernek, hogy képeket hozzon létre a megadott erőforráscsoportban az alábbi példával. Ezen engedély nélkül a rendszerkép-létrehozási folyamat nem fejeződik be sikeresen.
Változók létrehozása a szerepkör-definícióhoz és az identitásnevekhez. Ezeknek az értékeknek egyedinek kell lenniük.
[int]$timeInt = $(Get-Date -UFormat '%s') $imageRoleDefName = "Azure Image Builder Image Def $timeInt" $identityName = "myIdentity$timeInt"
Hozzon létre egy felhasználói identitást.
New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location
Az identitáserőforrás és az egyszerű azonosítók tárolása változókban.
$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
Töltse le a JSON-konfigurációs fájlt, majd módosítsa a cikkben meghatározott beállítások alapján.
$myRoleImageCreationUrl = 'https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json' $myRoleImageCreationPath = "myRoleImageCreation.json" Invoke-WebRequest -Uri $myRoleImageCreationUrl -OutFile $myRoleImageCreationPath -UseBasicParsing $Content = Get-Content -Path $myRoleImageCreationPath -Raw $Content = $Content -replace '<subscriptionID>', $subscriptionID $Content = $Content -replace '<rgName>', $imageResourceGroup $Content = $Content -replace 'Azure Image Builder Service Image Creation Role', $imageRoleDefName $Content | Out-File -FilePath $myRoleImageCreationPath -Force
Hozza létre a szerepkördefiníciót.
New-AzRoleDefinition -InputFile $myRoleImageCreationPath
Adja meg a szerepkördefiníciót a VM Image Builder szolgáltatásnévnek.
$RoleAssignParams = @{ ObjectId = $identityNamePrincipalId RoleDefinitionName = $imageRoleDefName Scope = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" } New-AzRoleAssignment @RoleAssignParams
Feljegyzés
Ha a következő hibaüzenetet kapja: "New-AzRoleDefinition: Szerepkördefiníciós korlát 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ását.
Azure Compute Gallery létrehozása
Hozza létre a katalógust.
$myGalleryName = 'myImageGallery' $imageDefName = 'winSvrImages' New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $location
Katalógusdefiníció létrehozása.
$GalleryParams = @{ GalleryName = $myGalleryName ResourceGroupName = $imageResourceGroup Location = $location Name = $imageDefName OsState = 'generalized' OsType = 'Windows' Publisher = 'myCo' Offer = 'Windows' Sku = 'Win2019' } New-AzGalleryImageDefinition @GalleryParams
Rendszerkép létrehozása
Hozzon létre egy VM Image Builder forrásobjektumot. Érvényes paraméterértékekért tekintse meg a Windows rendszerű virtuálisgép-rendszerképek keresését az Azure Marketplace-en az Azure PowerShell-lel.
$SrcObjParams = @{ PlatformImageSource = $true Publisher = 'MicrosoftWindowsServer' Offer = 'WindowsServer' Sku = '2019-Datacenter' Version = 'latest' } $srcPlatform = New-AzImageBuilderTemplateSourceObject @SrcObjParams
Hozzon létre egy VM Image Builder-terjesztő objektumot.
$disObjParams = @{ SharedImageDistributor = $true ArtifactTag = @{tag='dis-share'} GalleryImageId = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup/providers/Microsoft.Compute/galleries/$myGalleryName/images/$imageDefName" ReplicationRegion = $location RunOutputName = $runOutputName ExcludeFromLatest = $false } $disSharedImg = New-AzImageBuilderTemplateDistributorObject @disObjParams
Hozzon létre egy VM Image Builder testreszabási objektumot.
$ImgCustomParams01 = @{ PowerShellCustomizer = $true Name = 'settingUpMgmtAgtPath' RunElevated = $false Inline = @("mkdir c:\\buildActions", "mkdir c:\\buildArtifacts", "echo Azure-Image-Builder-Was-Here > c:\\buildActions\\buildActionsOutput.txt") } $Customizer01 = New-AzImageBuilderTemplateCustomizerObject @ImgCustomParams01
Hozzon létre egy második virtuálisgép-képszerkesztő testreszabási objektumot.
$ImgCustomParams02 = @{ FileCustomizer = $true Name = 'downloadBuildArtifacts' Destination = 'c:\\buildArtifacts\\index.html' SourceUri = 'https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/exampleArtifacts/buildArtifacts/index.html' } $Customizer02 = New-AzImageBuilderTemplateCustomizerObject @ImgCustomParams02
VM Image Builder-sablon létrehozása.
$ImgTemplateParams = @{ ImageTemplateName = $imageTemplateName ResourceGroupName = $imageResourceGroup Source = $srcPlatform Distribute = $disSharedImg Customize = $Customizer01, $Customizer02 Location = $location UserAssignedIdentityId = $identityNameResourceId } New-AzImageBuilderTemplate @ImgTemplateParams
A sablon létrehozása után a rendszer egy üzenetet ad vissza, és létrehoz egy VM Image Builder-konfigurációs sablont.$imageResourceGroup
Annak megállapításához, hogy a sablonlétrehozás sikeres volt-e, használja az alábbi példát:
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup |
Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
A háttérben a VM Image Builder egy átmeneti erőforráscsoportot is létrehoz az előfizetésben. Ezt az erőforráscsoportot használja a rendszerkép-összeállításhoz. A formátuma IT_<DestinationResourceGroup>_<TemplateName>
.
Figyelmeztetés
Ne törölje közvetlenül az átmeneti erőforráscsoportot. Az átmeneti erőforráscsoport törléséhez törölje a képsablon összetevőjét.
Ha a szolgáltatás hibát jelez a képkonfigurációs sablon elküldésekor, tegye a következőket:
Mielőtt újra megkísérlené elküldeni a sablont, törölje az alábbi példával:
Remove-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup
A rendszerkép összeállításának indítása
Küldje el a képkonfigurációt a VM Image Builder szolgáltatásnak az alábbi parancs futtatásával:
Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Várjon, amíg a képkészítési folyamat befejeződik, ami akár egy órát is igénybe vehet.
Ha hibákba ütközik, tekintse át az Azure-beli VM Image Builder hibáinak hibaelhárítását.
Virtuális gép létrehozása
Tárolja a virtuális gép bejelentkezési hitelesítő adatait egy változóban. A jelszónak összetettnek kell lennie.
$Cred = Get-Credential
Hozza létre a virtuális gépet a létrehozott lemezkép használatával.
$ArtifactId = (Get-AzImageBuilderTemplateRunOutput -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup).ArtifactId New-AzVM -ResourceGroupName $imageResourceGroup -Image $ArtifactId -Name myWinVM01 -Credential $Cred
A testreszabások ellenőrzése
Hozzon létre távoli asztali kapcsolatot a virtuális géppel a virtuális gép létrehozásakor beállított felhasználónévvel és jelszóval.
Nyissa meg a PowerShellt a virtuális gépen belül, és futtassa
Get-Content
a következő példában látható módon:Get-Content -Path C:\buildActions\buildActionsOutput.txt
A kimenet a kép testreszabása során létrehozott fájl tartalmán alapul.
Azure-Image-Builder-Was-Here
Ugyanabból a PowerShell-munkamenetből ellenőrizze, hogy a második testreszabás sikeresen befejeződött-e az
c:\buildArtifacts\index.html
alábbi példában látható módon:Get-ChildItem c:\buildArtifacts\
Az eredménynek egy könyvtárlistának kell lennie, amely azt mutatja, hogy a fájl a kép testreszabása során lett letöltve.
Directory: C:\buildArtifacts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 29/01/2021 10:04 276 index.html
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:
Törölje a VM Image Builder-sablont.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Törölje a kép erőforráscsoportját.
Figyelemfelhívás
Az alábbi példa törli a megadott erőforráscsoportot és az összes benne lévő erőforrást. Ha a cikk hatókörén kívüli erőforrások szerepelnek az erőforráscsoportban, azokat is törlik.
Remove-AzResourceGroup -Name $imageResourceGroup
Következő lépések
A cikk által használt JSON-fájl összetevőiről a VM Image Builder sablonreferenciája nyújt további információt.