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. Screenshot that shows an example of Try It for Azure Cloud Shell.
Látogasson el a https://shell.azure.com webhelyre, vagy kattintson a Cloud Shell indítása gombra a böngészőben. Button to launch Azure Cloud Shell.
Az Azure Portal jobb felső sarkában található menüben kattintson a Cloud Shell gombra. Screenshot that shows the Cloud Shell button in the Azure portal

Az Azure Cloud Shell használata:

  1. Indítsa el a Cloud Shellt.

  2. A kód vagy parancs másolásához kattintson a Másolás gombra egy kódblokkon (vagy parancsblokkon).

  3. 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.

  4. 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.

  1. 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"
    
  2. Hozzon létre egy felhasználói identitást.

    New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location
    
  3. 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

  1. 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
    
  2. Hozza létre a szerepkördefiníciót.

    New-AzRoleDefinition -InputFile $myRoleImageCreationPath
    
  3. 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.

  1. Hozza létre a katalógust.

    $myGalleryName = 'myImageGallery'
    $imageDefName = 'winSvrImages'
    
    New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $location
    
  2. 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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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:

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

  1. 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
    
  2. 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

  1. 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.

  2. Nyissa meg a PowerShellt a virtuális gépen belül, és futtassa Get-Contenta 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
    
  3. Ugyanabból a PowerShell-munkamenetből ellenőrizze, hogy a második testreszabás sikeresen befejeződött-e az c:\buildArtifacts\index.htmlalá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:

  1. Törölje a VM Image Builder-sablont.

    Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
    
  2. 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.