Een Windows-installatiekopieën maken en distribueren naar een Azure Compute Gallery
Van toepassing op: ✔️ Windows-VM's
In dit artikel leert u hoe u Azure VM Image Builder en Azure PowerShell gebruikt om een installatiekopieënversie te maken in een Azure Compute Gallery (voorheen Shared Image Gallery) en vervolgens de installatiekopieën wereldwijd te distribueren. U kunt dit ook doen met behulp van de Azure CLI.
Voor het configureren van de installatiekopieën gebruikt dit artikel een JSON-sjabloon, die u kunt vinden op armTemplateWinSIG.json. U downloadt en bewerkt een lokale versie van de sjabloon, dus u gebruikt ook een lokale PowerShell-sessie.
Als u de installatiekopie wilt distribueren naar een Azure Compute Gallery, gebruikt de sjabloon sharedImage als de waarde voor de distribute
sectie van de sjabloon.
VM Image Builder wordt automatisch uitgevoerd Sysprep
om de installatiekopieën te generaliseren. De opdracht is een algemene Sysprep
opdracht en u kunt deze desgewenst overschrijven .
Houd rekening met het aantal keren dat u laagaanpassingen maakt. U kunt de Sysprep
opdracht een beperkt aantal keren uitvoeren op één Windows-installatiekopieën. Nadat u de Sysprep
limiet hebt bereikt, moet u uw Windows-installatiekopieën opnieuw maken. Zie Limieten voor het aantal keren dat u Sysprep kunt uitvoeren voor meer informatie.
De providers registreren
Als u VM Image Builder wilt gebruiken, moet u de providers registreren.
Controleer uw providerregistraties. Zorg ervoor dat elke instantie Geregistreerd retourneert.
Get-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Storage | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Compute | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.KeyVault | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Network | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.ContainerInstance | Format-table -Property ResourceTypes,RegistrationState
Als ze niet worden geretourneerd Geregistreerd, registreert u de providers door de volgende opdrachten uit te voeren:
Register-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages Register-AzResourceProvider -ProviderNamespace Microsoft.Storage Register-AzResourceProvider -ProviderNamespace Microsoft.Compute Register-AzResourceProvider -ProviderNamespace Microsoft.KeyVault Register-AzResourceProvider -ProviderNamespace Microsoft.ContainerInstance
PowerShell-modules installeren:
'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
Variabelen maken
Omdat u enkele stukjes informatie herhaaldelijk gebruikt, maakt u enkele variabelen om die informatie op te slaan.
Vervang de waarden voor de variabelen, zoals username
en vmpassword
, door uw eigen gegevens.
# Get existing context
$currentAzContext = Get-AzContext
# Get your current subscription ID.
$subscriptionID=$currentAzContext.Subscription.Id
# Destination image resource group
$imageResourceGroup="aibwinsig"
# Location
$location="westus"
# Image distribution metadata reference name
$runOutputName="aibCustWinManImg02ro"
# Image template name
$imageTemplateName="helloImageTemplateWin02ps"
# Distribution properties object name (runOutput).
# This gives you the properties of the managed image on completion.
$runOutputName="winclientR01"
# Create a resource group for the VM Image Builder template and Azure Compute Gallery
New-AzResourceGroup `
-Name $imageResourceGroup `
-Location $location
Een door de gebruiker toegewezen identiteit maken en machtigingen instellen voor de resourcegroep
VM Image Builder maakt gebruik van de opgegeven gebruikersidentiteit om de installatiekopieën in de Azure Compute Gallery te injecteren. In dit voorbeeld maakt u een Azure-roldefinitie met specifieke acties voor het distribueren van de installatiekopieën. De roldefinitie wordt vervolgens toegewezen aan de gebruikersidentiteit.
# setup role def names, these need to be unique
$timeInt=$(get-date -UFormat "%s")
$imageRoleDefName="Azure Image Builder Image Def"+$timeInt
$identityName="aibIdentity"+$timeInt
## Add an Azure PowerShell module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity
# Create an identity
New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName
$identityNameResourceId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id
$identityNamePrincipalId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
Machtigingen toewijzen voor de identiteit om de installatiekopieën te distribueren
Gebruik deze opdracht om een Azure-roldefinitiesjabloon te downloaden en deze vervolgens bij te werken met de eerder opgegeven parameters.
$aibRoleImageCreationUrl="https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json"
$aibRoleImageCreationPath = "aibRoleImageCreation.json"
# Download the configuration
Invoke-WebRequest -Uri $aibRoleImageCreationUrl -OutFile $aibRoleImageCreationPath -UseBasicParsing
((Get-Content -path $aibRoleImageCreationPath -Raw) -replace '<subscriptionID>',$subscriptionID) | Set-Content -Path $aibRoleImageCreationPath
((Get-Content -path $aibRoleImageCreationPath -Raw) -replace '<rgName>', $imageResourceGroup) | Set-Content -Path $aibRoleImageCreationPath
((Get-Content -path $aibRoleImageCreationPath -Raw) -replace 'Azure Image Builder Service Image Creation Role', $imageRoleDefName) | Set-Content -Path $aibRoleImageCreationPath
# Create a role definition
New-AzRoleDefinition -InputFile ./aibRoleImageCreation.json
# Grant the role definition to the VM Image Builder service principal
New-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
Notitie
Als u de fout 'New-AzRoleDefinition: Limiet voor roldefinities is overschreden. Er kunnen geen roldefinities meer worden gemaakt, zie Problemen met Azure RBAC (op rollen gebaseerd toegangsbeheer) oplossen.
Een Azure Compute-galerie maken
Als u VM Image Builder wilt gebruiken met een Azure Compute Gallery, moet u een bestaande galerie en installatiekopieëndefinitie hebben. VM Image Builder maakt de galerie en installatiekopieëndefinitie niet voor u.
Als u nog geen galerie en definitie van installatiekopieën hebt die u wilt gebruiken, begint u met het maken ervan.
# Gallery name
$sigGalleryName= "myIBSIG"
# Image definition name
$imageDefName ="winSvrimage"
# Additional replication region
$replRegion2="eastus"
# Create the gallery
New-AzGallery `
-GalleryName $sigGalleryName `
-ResourceGroupName $imageResourceGroup `
-Location $location
# Create the image definition
New-AzGalleryImageDefinition `
-GalleryName $sigGalleryName `
-ResourceGroupName $imageResourceGroup `
-Location $location `
-Name $imageDefName `
-OsState generalized `
-OsType Windows `
-Publisher 'myCompany' `
-Offer 'WindowsServer' `
-Sku 'WinSrv2019'
De sjabloon downloaden en configureren
Download de JSON-sjabloon en configureer deze met uw variabelen.
$templateFilePath = "armTemplateWinSIG.json"
Invoke-WebRequest `
-Uri "https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/1_Creating_a_Custom_Win_Shared_Image_Gallery_Image/armTemplateWinSIG.json" `
-OutFile $templateFilePath `
-UseBasicParsing
(Get-Content -path $templateFilePath -Raw ) `
-replace '<subscriptionID>',$subscriptionID | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<rgName>',$imageResourceGroup | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<runOutputName>',$runOutputName | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<imageDefName>',$imageDefName | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<sharedImageGalName>',$sigGalleryName | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<region1>',$location | Set-Content -Path $templateFilePath
(Get-Content -path $templateFilePath -Raw ) `
-replace '<region2>',$replRegion2 | Set-Content -Path $templateFilePath
((Get-Content -path $templateFilePath -Raw) -replace '<imgBuilderId>',$identityNameResourceId) | Set-Content -Path $templateFilePath
De installatiekopieversie maken
Uw sjabloon moet naar de service worden verzonden. Met de volgende opdrachten worden afhankelijke artefacten, zoals scripts, gedownload en opgeslagen in de faseringsresourcegroep, die voorafgaat aan IT_.
New-AzResourceGroupDeployment `
-ResourceGroupName $imageResourceGroup `
-TemplateFile $templateFilePath `
-ApiVersion "2022-02-14" `
-imageTemplateName $imageTemplateName `
-svclocation $location
Als u de installatiekopieën wilt maken, roept u 'Uitvoeren' aan op de sjabloon.
Invoke-AzResourceAction `
-ResourceName $imageTemplateName `
-ResourceGroupName $imageResourceGroup `
-ResourceType Microsoft.VirtualMachineImages/imageTemplates `
-ApiVersion "2022-02-14" `
-Action Run
Het maken van de afbeelding en het repliceren naar beide regio's kan even duren. Wacht totdat u begint met het maken van een virtuele machine totdat dit onderdeel is voltooid.
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup |
Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
De VM maken
Maak een VIRTUELE machine op basis van de installatiekopieënversie die u hebt gemaakt met VM Image Builder.
Haal de installatiekopieënversie op die u hebt gemaakt:
$imageVersion = Get-AzGalleryImageVersion ` -ResourceGroupName $imageResourceGroup ` -GalleryName $sigGalleryName ` -GalleryImageDefinitionName $imageDefName $imageVersionId = $imageVersion.Id
Maak de VIRTUELE machine in de tweede regio, waar de installatiekopieën zijn gerepliceerd:
$vmResourceGroup = "myResourceGroup" $vmName = "myVMfromImage" # Create user object $cred = Get-Credential -Message "Enter a username and password for the virtual machine." # Create a resource group New-AzResourceGroup -Name $vmResourceGroup -Location $replRegion2 # Network pieces $subnetConfig = New-AzVirtualNetworkSubnetConfig -Name mySubnet -AddressPrefix 192.168.1.0/24 $vnet = New-AzVirtualNetwork -ResourceGroupName $vmResourceGroup -Location $replRegion2 ` -Name MYvNET -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig $pip = New-AzPublicIpAddress -ResourceGroupName $vmResourceGroup -Location $replRegion2 ` -Name "mypublicdns$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4 $nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP -Protocol Tcp ` -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * ` -DestinationPortRange 3389 -Access Deny $nsg = New-AzNetworkSecurityGroup -ResourceGroupName $vmResourceGroup -Location $replRegion2 ` -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP $nic = New-AzNetworkInterface -Name myNic -ResourceGroupName $vmResourceGroup -Location $replRegion2 ` -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id # Create a virtual machine configuration using $imageVersion.Id to specify the image $vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1_v2 | ` Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred | ` Set-AzVMSourceImage -Id $imageVersion.Id | ` Add-AzVMNetworkInterface -Id $nic.Id # Create a virtual machine New-AzVM -ResourceGroupName $vmResourceGroup -Location $replRegion2 -VM $vmConfig
De aanpassing controleren
Maak een verbinding met extern bureaublad met de virtuele machine met behulp van de gebruikersnaam en het wachtwoord die u hebt ingesteld toen u de virtuele machine maakte. Open in de VIRTUELE machine een opdrachtpromptvenster en voer de volgende opdracht uit:
dir c:\
U ziet nu een map met de naam buildActions
die is gemaakt tijdens het aanpassen van de installatiekopieën.
Uw resources opschonen
Notitie
Als u nu de versie van de installatiekopieën opnieuw wilt bekijken om een nieuwe versie van dezelfde installatiekopieën te maken, slaat u de hier beschreven stap over en gaat u naar VM Image Builder gebruiken om een andere versie van de installatiekopieën te maken.
Als u de resources die u hebt gemaakt niet meer nodig hebt terwijl u het proces in dit artikel hebt gevolgd, kunt u ze verwijderen.
Met het volgende proces verwijdert u zowel de installatiekopieën die u hebt gemaakt als alle andere resourcebestanden. Zorg ervoor dat u deze implementatie hebt voltooid voordat u de resources verwijdert.
Verwijder eerst de resourcegroepsjabloon. Anders wordt de faseringsresourcegroep (IT_) die door VM Image Builder wordt gebruikt, niet opgeschoond.
Haal de ResourceID van de afbeeldingssjabloon op.
$resTemplateId = Get-AzResource -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2022-02-14"
Afbeeldingssjabloon verwijderen.
Remove-AzResource -ResourceId $resTemplateId.ResourceId -Force
Verwijder de roltoewijzing.
Remove-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
Verwijder de definities.
Remove-AzRoleDefinition -Name "$identityNamePrincipalId" -Force -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
Verwijder de identiteit.
Remove-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Force
Verwijder de resourcegroep.
Remove-AzResourceGroup $imageResourceGroup -Force
Volgende stappen
Zie VM Image Builder gebruiken om een andere versie van de installatiekopieën te maken om de versie van de installatiekopieën bij te werken die u in dit artikel hebt gemaakt.