Tworzenie maszyny wirtualnej z systemem Windows przy użyciu programu Image Builder przy użyciu programu PowerShell
Dotyczy: ✔️ maszyny wirtualne z systemem Windows
W tym artykule pokazano, jak utworzyć dostosowany obraz maszyny wirtualnej z systemem Windows przy użyciu modułu Programu PowerShell dla maszyny wirtualnej platformy Azure.
Wymagania wstępne
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Jeśli zdecydujesz się używać programu PowerShell lokalnie, ten artykuł wymaga zainstalowania modułu Azure PowerShell i nawiązania połączenia z kontem platformy Azure przy użyciu polecenia cmdlet Connect-AzAccount . Aby uzyskać więcej informacji, zobacz Instalowanie programu Azure PowerShell.
Niektóre kroki wymagają poleceń cmdlet z modułu Az.ImageBuilder . Zainstaluj oddzielnie przy użyciu następującego polecenia.
Install-Module -Name Az.ImageBuilder
Azure Cloud Shell
Na platforma Azure hostowane jest Azure Cloud Shell, interaktywne środowisko powłoki, z którego można korzystać w przeglądarce. Do pracy z usługami platformy Azure można używać programu Bash lub PowerShell w środowisku Cloud Shell. Aby uruchomić kod w tym artykule, możesz użyć wstępnie zainstalowanych poleceń usługi Cloud Shell bez konieczności instalowania niczego w środowisku lokalnym.
Aby uruchomić środowisko Azure Cloud Shell:
Opcja | Przykład/link |
---|---|
Wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu lub polecenia. Wybranie pozycji Wypróbuj nie powoduje automatycznego skopiowania kodu lub polecenia do usługi Cloud Shell. | |
Przejdź do witryny https://shell.azure.com lub wybierz przycisk Uruchom Cloud Shell, aby otworzyć środowisko Cloud Shell w przeglądarce. | |
Wybierz przycisk Cloud Shell na pasku menu w prawym górnym rogu witryny Azure Portal. |
Aby użyć usługi Azure Cloud Shell:
Uruchom usługę Cloud Shell.
Wybierz przycisk Kopiuj w bloku kodu (lub bloku poleceń), aby skopiować kod lub polecenie.
Wklej kod lub polecenie do sesji usługi Cloud Shell, wybierając Ctrl+Shift V w systemach Windows i Linux lub wybierając pozycję Cmd+Shift++V w systemie macOS.
Wybierz Enter, aby uruchomić kod lub polecenie.
Jeśli masz wiele subskrypcji platformy Azure, wybierz odpowiednią subskrypcję, w której mają być rozliczane zasoby. Wybierz określoną subskrypcję przy użyciu polecenia cmdlet Set-AzContext .
Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000
Rejestrowanie dostawców
Jeśli jeszcze tego nie zrobiono, zarejestruj następujących dostawców zasobów do użycia z subskrypcją platformy Azure:
- 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
Definiowanie zmiennych
Ponieważ będziesz używać niektórych informacji wielokrotnie, utwórz niektóre zmienne do przechowywania tych informacji:
# 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'
Utwórz zmienną dla identyfikatora subskrypcji platformy Azure. Aby potwierdzić, że zmienna subscriptionID
zawiera identyfikator subskrypcji, możesz uruchomić drugi wiersz w poniższym przykładzie:
# Your Azure Subscription ID
$subscriptionID = (Get-AzContext).Subscription.Id
Write-Output $subscriptionID
Tworzenie grupy zasobów
Utwórz grupę zasobów platformy Azure przy użyciu polecenia cmdlet New-AzResourceGroup. Grupa zasobów to logiczny kontener przeznaczony do wdrażania zasobów platformy Azure i zarządzania nimi w formie grupy.
Poniższy przykład tworzy grupę zasobów opartą na nazwie w $imageResourceGroup
zmiennej w regionie określonym w zmiennej $location
. Ta grupa zasobów służy do przechowywania artefaktu szablonu konfiguracji obrazu i obrazu.
New-AzResourceGroup -Name $imageResourceGroup -Location $location
Tworzenie tożsamości użytkownika i ustawianie uprawnień roli
Przy użyciu poniższego przykładu przyznaj konstruktorowi obrazów platformy Azure uprawnienia do tworzenia obrazów w określonej grupie zasobów. Bez tego uprawnienia proces kompilacji obrazu nie zakończy się pomyślnie.
Utwórz zmienne dla definicji roli i nazw tożsamości. Te wartości muszą być unikatowe.
[int]$timeInt = $(Get-Date -UFormat '%s') $imageRoleDefName = "Azure Image Builder Image Def $timeInt" $identityName = "myIdentity$timeInt"
Utwórz tożsamość użytkownika.
New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location
Przechowuj zasób tożsamości i identyfikatory podmiotów zabezpieczeń w zmiennych.
$identityNameResourceId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id $identityNamePrincipalId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
Przypisywanie uprawnień do tożsamości w celu rozpowszechniania obrazów
Pobierz plik konfiguracji JSON, a następnie zmodyfikuj go na podstawie ustawień zdefiniowanych w tym artykule.
$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
Utwórz definicję roli.
New-AzRoleDefinition -InputFile $myRoleImageCreationPath
Udziel definicji roli jednostce usługi Konstruktor obrazów maszyny wirtualnej.
$RoleAssignParams = @{ ObjectId = $identityNamePrincipalId RoleDefinitionName = $imageRoleDefName Scope = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" } New-AzRoleAssignment @RoleAssignParams
Uwaga
Jeśli zostanie wyświetlony błąd "New-AzRoleDefinition: Przekroczono limit definicji roli. Nie można utworzyć więcej definicji ról", zobacz Rozwiązywanie problemów z kontrolą dostępu opartą na rolach na platformie Azure.
Tworzenie galerii zasobów obliczeniowych platformy Azure
Utwórz galerię.
$myGalleryName = 'myImageGallery' $imageDefName = 'winSvrImages' New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $location
Utwórz definicję galerii.
$GalleryParams = @{ GalleryName = $myGalleryName ResourceGroupName = $imageResourceGroup Location = $location Name = $imageDefName OsState = 'generalized' OsType = 'Windows' Publisher = 'myCo' Offer = 'Windows' Sku = 'Win2019' } New-AzGalleryImageDefinition @GalleryParams
Tworzenie obrazu
Utwórz obiekt źródłowy konstruktora obrazów maszyny wirtualnej. Aby uzyskać prawidłowe wartości parametrów, zobacz Znajdowanie obrazów maszyn wirtualnych z systemem Windows w witrynie Azure Marketplace przy użyciu programu Azure PowerShell.
$SrcObjParams = @{ PlatformImageSource = $true Publisher = 'MicrosoftWindowsServer' Offer = 'WindowsServer' Sku = '2019-Datacenter' Version = 'latest' } $srcPlatform = New-AzImageBuilderTemplateSourceObject @SrcObjParams
Utwórz obiekt dystrybutora konstruktora obrazów maszyny wirtualnej.
$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
Utwórz obiekt dostosowywania konstruktora obrazów maszyny wirtualnej.
$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
Utwórz drugi obiekt dostosowywania konstruktora obrazów maszyny wirtualnej.
$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
Utwórz szablon konstruktora obrazów maszyny wirtualnej.
$ImgTemplateParams = @{ ImageTemplateName = $imageTemplateName ResourceGroupName = $imageResourceGroup Source = $srcPlatform Distribute = $disSharedImg Customize = $Customizer01, $Customizer02 Location = $location UserAssignedIdentityId = $identityNameResourceId } New-AzImageBuilderTemplate @ImgTemplateParams
Po utworzeniu szablonu zostanie zwrócony komunikat, a szablon konfiguracji konstruktora obrazów maszyny wirtualnej zostanie utworzony w programie $imageResourceGroup
.
Aby określić, czy proces tworzenia szablonu zakończył się pomyślnie, użyj następującego przykładu:
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup |
Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
W tle narzędzie VM Image Builder tworzy również tymczasową grupę zasobów w ramach subskrypcji. Ta grupa zasobów jest używana na potrzeby kompilacji obrazu. IT_<DestinationResourceGroup>_<TemplateName>
Ma format .
Ostrzeżenie
Nie usuwaj tymczasowej grupy zasobów bezpośrednio. Aby spowodować usunięcie przejściowej grupy zasobów, usuń artefakt szablonu obrazu.
Jeśli usługa zgłasza błąd podczas przesyłania szablonu konfiguracji obrazu, wykonaj następujące czynności:
Zobacz Rozwiązywanie problemów z błędami narzędzia Image Builder maszyny wirtualnej platformy Azure.
Przed ponowieniu próby przesłania szablonu usuń go, wykonując następujące czynności:
Remove-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup
Uruchamianie kompilacji obrazu
Prześlij konfigurację obrazu do usługi Vm Image Builder, uruchamiając następujące polecenie:
Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Poczekaj na zakończenie procesu tworzenia obrazu, co może potrwać do godziny.
Jeśli wystąpią błędy, zapoznaj się z artykułem Rozwiązywanie problemów z błędami narzędzia Image Builder maszyny wirtualnej platformy Azure.
Tworzenie maszyny wirtualnej
Zapisz poświadczenia logowania maszyny wirtualnej w zmiennej. Hasło musi być złożone.
$Cred = Get-Credential
Utwórz maszynę wirtualną przy użyciu utworzonego obrazu.
$ArtifactId = (Get-AzImageBuilderTemplateRunOutput -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup).ArtifactId New-AzVM -ResourceGroupName $imageResourceGroup -Image $ArtifactId -Name myWinVM01 -Credential $Cred
Weryfikowanie dostosowań
Utwórz połączenie pulpitu zdalnego z maszyną wirtualną przy użyciu nazwy użytkownika i hasła ustawionego podczas tworzenia maszyny wirtualnej.
Na maszynie wirtualnej otwórz program PowerShell i uruchom polecenie
Get-Content
, jak pokazano w poniższym przykładzie:Get-Content -Path C:\buildActions\buildActionsOutput.txt
Dane wyjściowe są oparte na zawartości pliku utworzonego podczas procesu dostosowywania obrazu.
Azure-Image-Builder-Was-Here
W tej samej sesji programu PowerShell sprawdź, czy drugie dostosowanie zakończyło się pomyślnie, sprawdzając obecność
c:\buildArtifacts\index.html
elementu , jak pokazano w poniższym przykładzie:Get-ChildItem c:\buildArtifacts\
Wynikiem powinna być lista katalogów pokazująca, że plik został pobrany podczas procesu dostosowywania obrazu.
Directory: C:\buildArtifacts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 29/01/2021 10:04 276 index.html
Oczyszczanie zasobów
Jeśli nie potrzebujesz już zasobów utworzonych podczas tego procesu, możesz je usunąć, wykonując następujące czynności:
Usuń szablon konstruktora obrazów maszyny wirtualnej.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Usuń grupę zasobów obrazu.
Uwaga
Poniższy przykład usuwa określoną grupę zasobów i wszystkie zawarte w niej zasoby. Jeśli jakiekolwiek zasoby spoza zakresu tego artykułu istnieją w grupie zasobów, zostaną również usunięte.
Remove-AzResourceGroup -Name $imageResourceGroup
Następne kroki
Aby dowiedzieć się więcej o składnikach pliku JSON używanego w tym artykule, zobacz dokumentację szablonu narzędzia Image Builder maszyny wirtualnej.