Vytvoření virtuálního počítače s Windows pomocí Nástroje image virtuálního počítače pomocí PowerShellu

Platí pro: ✔️ Virtuální počítače s Windows

Tento článek ukazuje, jak vytvořit přizpůsobenou image virtuálního počítače s Windows pomocí modulu PowerShellu pro Tvůrce imagí virtuálního počítače Azure.

Požadavky

Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Pokud se rozhodnete používat PowerShell místně, musíte nainstalovat modul Azure PowerShellu a připojit se k účtu Azure pomocí rutiny Connect-AzAccount . Další informace najdete v tématu Instalace Azure PowerShellu.

Některé kroky vyžadují rutiny z modulu Az.ImageBuilder . Nainstalujte zvlášť pomocí následujícího příkazu.

Install-Module -Name Az.ImageBuilder

Azure Cloud Shell

Azure hostí interaktivní prostředí Azure Cloud Shell, které můžete používat v prohlížeči. Pro práci se službami Azure můžete v prostředí Cloud Shell použít buď Bash, nebo PowerShell. Předinstalované příkazy Cloud Shellu můžete použít ke spuštění kódu v tomto článku, aniž byste museli instalovat cokoli do místního prostředí.

Spuštění služby Azure Cloud Shell:

Možnost Příklad nebo odkaz
Vyberte Vyzkoušet v pravém horním rohu bloku kódu nebo příkazu. Výběrem možnosti Vyzkoušet se kód ani příkaz automaticky nekopíruje do Cloud Shellu. Snímek obrazovky znázorňující příklad možnosti Vyzkoušet pro Azure Cloud Shell
Přejděte na adresu https://shell.azure.com nebo výběrem tlačítka Spustit Cloud Shell otevřete Cloud Shell v prohlížeči. Tlačítko pro spuštění Azure Cloud Shellu
Zvolte tlačítko Cloud Shell v pruhu nabídky v pravém horním rohu webu Azure Portal. Snímek obrazovky znázorňující tlačítko Cloud Shell na webu Azure Portal

Použití Azure Cloud Shellu:

  1. Spusťte Cloud Shell.

  2. Výběrem tlačítka Kopírovat v bloku kódu (nebo bloku příkazů) zkopírujte kód nebo příkaz.

  3. Vložte kód nebo příkaz do relace Cloud Shellu tak, že ve Windows a Linuxu vyberete ctrl+Shift+V nebo vyberete Cmd+Shift+V v macOS.

  4. Stisknutím klávesy Enter spusťte kód nebo příkaz.

Pokud máte více předplatných Azure, zvolte příslušné předplatné, ve kterém se mají prostředky fakturovat. Pomocí rutiny Set-AzContext vyberte konkrétní předplatné.

Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000

Registrace poskytovatelů

Pokud jste to ještě neudělali, zaregistrujte u svého předplatného Azure následující poskytovatele prostředků:

  • Microsoft.Compute
  • Microsoft.KeyVault
  • Microsoft.Storage
  • Microsoft.Network
  • Microsoft.VirtualMachineImages
  • Microsoft.ManagedIdentity
  • Instance Microsoft.ContainerInstance
Get-AzResourceProvider -ProviderNamespace Microsoft.Compute, Microsoft.KeyVault, Microsoft.Storage, Microsoft.VirtualMachineImages, Microsoft.Network, Microsoft.ManagedIdentity |
  Where-Object RegistrationState -ne Registered |
    Register-AzResourceProvider

Definování proměnných

Protože budete opakovaně používat některé části informací, vytvořte některé proměnné pro uložení těchto informací:

# 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'

Vytvořte proměnnou pro ID předplatného Azure. Pokud chcete ověřit, že subscriptionID proměnná obsahuje ID vašeho předplatného, můžete spustit druhý řádek v následujícím příkladu:

# Your Azure Subscription ID
$subscriptionID = (Get-AzContext).Subscription.Id
Write-Output $subscriptionID

Vytvoření skupiny zdrojů

Vytvořte skupinu prostředků Azure pomocí rutiny New-AzResourceGroup . Skupina prostředků je logický kontejner, ve kterém se nasazují a spravují prostředky Azure jako skupina.

Následující příklad vytvoří skupinu prostředků založenou na názvu v $imageResourceGroup proměnné v oblasti, kterou jste zadali v $location proměnné. Tato skupina prostředků slouží k uložení artefaktu šablony konfigurace image a image.

New-AzResourceGroup -Name $imageResourceGroup -Location $location

Vytvoření identity uživatele a nastavení oprávnění role

Pomocí následujícího příkladu udělte tvůrci imagí Azure oprávnění k vytváření imagí v zadané skupině prostředků. Bez tohoto oprávnění se proces sestavení image nedokončí úspěšně.

  1. Vytvořte proměnné pro definici role a názvy identit. Tyto hodnoty musí být jedinečné.

    [int]$timeInt = $(Get-Date -UFormat '%s')
    $imageRoleDefName = "Azure Image Builder Image Def $timeInt"
    $identityName = "myIdentity$timeInt"
    
  2. Vytvořte identitu uživatele.

    New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location
    
  3. Uložte prostředek identity a ID objektu zabezpečení do proměnných.

    $identityNameResourceId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id
    $identityNamePrincipalId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
    

Přiřazení oprávnění pro identitu k distribuci imagí

  1. Stáhněte si konfigurační soubor JSON a pak ho upravte na základě nastavení definovaných v tomto článku.

    $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. Vytvořte definici role.

    New-AzRoleDefinition -InputFile $myRoleImageCreationPath
    
  3. Udělte definici role instančnímu objektu Image Builderu virtuálního počítače.

    $RoleAssignParams = @{
      ObjectId = $identityNamePrincipalId
      RoleDefinitionName = $imageRoleDefName
      Scope = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
    }
    New-AzRoleAssignment @RoleAssignParams
    

Poznámka:

Pokud se zobrazí chyba New-AzRoleDefinition: Byl překročen limit definice role. Žádné další definice rolí se nedají vytvořit," přečtěte si téma Řešení potíží s Azure RBAC (řízení přístupu na základě role).

  1. Vytvořte galerii.

    $myGalleryName = 'myImageGallery'
    $imageDefName = 'winSvrImages'
    
    New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $location
    
  2. Vytvořte definici galerie.

    $GalleryParams = @{
      GalleryName = $myGalleryName
      ResourceGroupName = $imageResourceGroup
      Location = $location
      Name = $imageDefName
      OsState = 'generalized'
      OsType = 'Windows'
      Publisher = 'myCo'
      Offer = 'Windows'
      Sku = 'Win2019'
    }
    New-AzGalleryImageDefinition @GalleryParams
    

Vytvoření image

  1. Vytvoření zdrojového objektu Image Builderu virtuálního počítače Platné hodnoty parametrů najdete v tématu Vyhledání imagí virtuálních počítačů s Windows na Azure Marketplace pomocí Azure PowerShellu.

    $SrcObjParams = @{
      PlatformImageSource = $true
      Publisher = 'MicrosoftWindowsServer'
      Offer = 'WindowsServer'
      Sku = '2019-Datacenter'
      Version = 'latest'
    }
    $srcPlatform = New-AzImageBuilderTemplateSourceObject @SrcObjParams
    
  2. Vytvořte objekt distributora VM Image Builderu.

    $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. Vytvoření objektu přizpůsobení Image Builderu virtuálního počítače

    $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. Vytvořte druhý objekt přizpůsobení Image Builderu virtuálního počítače.

    $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. Vytvoření šablony Image Builderu virtuálního počítače

    $ImgTemplateParams = @{
      ImageTemplateName = $imageTemplateName
      ResourceGroupName = $imageResourceGroup
      Source = $srcPlatform
      Distribute = $disSharedImg
      Customize = $Customizer01, $Customizer02
      Location = $location
      UserAssignedIdentityId = $identityNameResourceId
    }
    New-AzImageBuilderTemplate @ImgTemplateParams
    

Po vytvoření šablony se vrátí zpráva a v nástroji Image Builder se vytvoří konfigurační šablona nástroje VM Image Builder.$imageResourceGroup

Pokud chcete zjistit, jestli proces vytvoření šablony proběhl úspěšně, použijte následující příklad:

Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup |
  Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState

Na pozadí vytvoří Image Builder virtuálního počítače také pracovní skupinu prostředků ve vašem předplatném. Tato skupina prostředků se používá pro sestavení image. Je ve formátu IT_<DestinationResourceGroup>_<TemplateName>.

Upozorňující

Pracovní skupinu prostředků neodstraňovat přímo. Pokud chcete způsobit odstranění pracovní skupiny prostředků, odstraňte artefakt šablony obrázku.

Pokud služba hlásí chybu při odeslání šablony konfigurace image, postupujte takto:

Spuštění sestavení image

Spuštěním následujícího příkazu odešlete konfiguraci image do služby Image Builder virtuálního počítače:

Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName

Počkejte, až se proces vytváření image dokončí, což může trvat až hodinu.

Pokud dojde k chybám, projděte si řešení potíží se selháními Image Builderu virtuálních počítačů Azure.

Vytvoření virtuálního počítače

  1. Uložte přihlašovací údaje virtuálního počítače do proměnné. Heslo musí být složité.

    $Cred = Get-Credential
    
  2. Vytvořte virtuální počítač pomocí image, kterou jste vytvořili.

    $ArtifactId = (Get-AzImageBuilderTemplateRunOutput -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup).ArtifactId
    
    New-AzVM -ResourceGroupName $imageResourceGroup -Image $ArtifactId -Name myWinVM01 -Credential $Cred
    

Ověření přizpůsobení

  1. Vytvořte připojení ke vzdálené ploše k virtuálnímu počítači pomocí uživatelského jména a hesla, které jste nastavili při vytváření virtuálního počítače.

  2. Ve virtuálním počítači otevřete PowerShell a spusťte Get-Contentho, jak je znázorněno v následujícím příkladu:

    Get-Content -Path C:\buildActions\buildActionsOutput.txt
    

    Výstup je založený na obsahu souboru, který jste vytvořili během procesu přizpůsobení image.

    Azure-Image-Builder-Was-Here
    
  3. Ve stejné relaci PowerShellu ověřte, že se druhé přizpůsobení úspěšně dokončilo, a to tak, že zkontrolujete přítomnost c:\buildArtifacts\index.html, jak je znázorněno v následujícím příkladu:

    Get-ChildItem c:\buildArtifacts\
    

    Výsledkem by měl být seznam adresářů, který ukazuje, že se soubor stáhl během procesu přizpůsobení obrázku.

        Directory: C:\buildArtifacts
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a---          29/01/2021    10:04            276 index.html
    

Vyčištění prostředků

Pokud už prostředky vytvořené během tohoto procesu nepotřebujete, můžete je odstranit následujícím způsobem:

  1. Odstraňte šablonu Image Builderu virtuálního počítače.

    Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
    
  2. Odstraňte skupinu prostředků image.

    Upozornění

    Následující příklad odstraní zadanou skupinu prostředků a všechny prostředky, které obsahuje. Pokud ve skupině prostředků existují nějaké prostředky mimo rozsah tohoto článku, odstraní se také.

    Remove-AzResourceGroup -Name $imageResourceGroup
    

Další kroky

Další informace o součástech souboru JSON, které tento článek používá, najdete v referenčních informacích k šabloně Image Builderu virtuálního počítače.