Delen via


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.

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

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.

  1. Haal de installatiekopieënversie op die u hebt gemaakt:

    $imageVersion = Get-AzGalleryImageVersion `
    -ResourceGroupName $imageResourceGroup `
    -GalleryName $sigGalleryName `
    -GalleryImageDefinitionName $imageDefName
    $imageVersionId = $imageVersion.Id
    
  2. 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.

  1. Haal de ResourceID van de afbeeldingssjabloon op.

    $resTemplateId = Get-AzResource -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2022-02-14"
    
  2. Afbeeldingssjabloon verwijderen.

    Remove-AzResource -ResourceId $resTemplateId.ResourceId -Force
    
  3. Verwijder de roltoewijzing.

    Remove-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
    
  4. Verwijder de definities.

    Remove-AzRoleDefinition -Name "$identityNamePrincipalId" -Force -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
    
  5. Verwijder de identiteit.

    Remove-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Force
    
  6. 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.