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. | |
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. | |
Zvolte tlačítko Cloud Shell v pruhu nabídky v pravém horním rohu webu Azure Portal. |
Použití Azure Cloud Shellu:
Spusťte Cloud Shell.
Výběrem tlačítka Kopírovat v bloku kódu (nebo bloku příkazů) zkopírujte kód nebo příkaz.
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.
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ě.
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"
Vytvořte identitu uživatele.
New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location
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í
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
Vytvořte definici role.
New-AzRoleDefinition -InputFile $myRoleImageCreationPath
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).
Vytvoření galerie výpočetních prostředků Azure
Vytvořte galerii.
$myGalleryName = 'myImageGallery' $imageDefName = 'winSvrImages' New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $location
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
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
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
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
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
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:
Viz Řešení potíží se selháními Image Builderu virtuálních počítačů Azure.
Před opětovným odesláním šablony ji odstraňte pomocí následujícího příkladu:
Remove-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup
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
Uložte přihlašovací údaje virtuálního počítače do proměnné. Heslo musí být složité.
$Cred = Get-Credential
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í
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.
Ve virtuálním počítači otevřete PowerShell a spusťte
Get-Content
ho, 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
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:
Odstraňte šablonu Image Builderu virtuálního počítače.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
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.