Windows görüntüsü oluşturma ve azure işlem galerisine dağıtma

Şunlar için geçerlidir: ✔️ Windows VM'leri

Bu makalede, Azure VM Görüntü Oluşturucusu'nu ve Azure PowerShell'i kullanarak Azure İşlem Galerisi'nde (eski adıyla Paylaşılan Görüntü Galerisi) görüntü sürümü oluşturmayı ve ardından görüntüyü genel olarak dağıtmayı öğreneceksiniz. Bunu Azure CLI'yi kullanarak da yapabilirsiniz.

Görüntüyü yapılandırmak için bu makalede armTemplateWinSIG.json adresinde bulabileceğiniz bir JSON şablonu kullanılmaktadır. Şablonun yerel bir sürümünü indirip düzenleyerek yerel bir PowerShell oturumu da kullanacaksınız.

Görüntüyü bir Azure İşlem Galerisi'ne dağıtmak için şablon, şablonun bölümü için distribute sharedImage değerini kullanır.

VM Görüntü Oluşturucusu, görüntüyü genelleştirmek için otomatik olarak çalışır Sysprep . Komut genel Sysprep bir komutdur ve gerekirse bunu geçersiz kılabilirsiniz.

Özelleştirmeleri kaç kez katmanladığınıza dikkat edin. Komutu tek bir Windows görüntüsünde sınırlı sayıda çalıştırabilirsiniz Sysprep . Sınıra Sysprep ulaştıktan sonra Windows görüntünüzü yeniden oluşturmanız gerekir. Daha fazla bilgi için bkz . Sysprep'i kaç kez çalıştırabileceğinize ilişkin sınırlar.

Sağlayıcıları kaydetme

VM Görüntü Oluşturucusu'nu kullanmak için sağlayıcıları kaydetmeniz gerekir.

  1. Sağlayıcı kayıtlarınızı denetleyin. Her birinin Kayıtlı değerini döndürdüğüne emin olun.

    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. Kayıtlı döndürmezlerse, aşağıdaki komutları çalıştırarak sağlayıcıları kaydedin:

    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 modüllerini yükleme:

    'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
    

Değişken oluşturma

Bazı bilgileri art arda kullanacağınız için, bu bilgileri depolamak için bazı değişkenler oluşturun.

ve vmpasswordgibi username değişkenlerin değerlerini kendi bilgilerinizle değiştirin.

# 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

Kullanıcı tarafından atanan bir kimlik oluşturma ve kaynak grubunda izinleri ayarlama

VM Görüntü Oluşturucusu, sağlanan kullanıcı kimliğini kullanarak görüntüyü Azure İşlem Galerisi'ne ekler. Bu örnekte, görüntüyü dağıtmak için belirli eylemleri içeren bir Azure rol tanımı oluşturacaksınız. Rol tanımı daha sonra kullanıcı kimliğine atanır.

# 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

Görüntüleri dağıtmak için kimliğe izinler atama

Bu komutu kullanarak bir Azure rol tanımı şablonu indirin ve daha önce belirtilen parametrelerle güncelleştirin.

$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"

Dekont

"New-AzRoleDefinition: Rol tanımı sınırı aşıldı. Başka rol tanımı oluşturulamıyor", bkz . Azure RBAC (rol tabanlı erişim denetimi) sorunlarını giderme.

VM Görüntü Oluşturucusu'nu bir Azure İşlem Galerisi ile kullanmak için mevcut bir galeriye ve görüntü tanımına sahip olmanız gerekir. VM Görüntü Oluşturucusu galeriyi ve görüntü tanımını sizin için oluşturmaz.

Kullanılacak bir galeriniz ve görüntü tanımınız yoksa, bunları oluşturarak başlayın.

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

Şablonu indirme ve yapılandırma

JSON şablonunu indirin ve değişkenlerinizle yapılandırın.


$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

Görüntü sürümünü oluşturma

Şablonunuzun hizmete gönderilmesi gerekir. Aşağıdaki komutlar betikler gibi bağımlı yapıtları indirir ve bunları IT_ ön ekli hazırlama kaynak grubunda depolar.

New-AzResourceGroupDeployment `
   -ResourceGroupName $imageResourceGroup `
   -TemplateFile $templateFilePath `
   -ApiVersion "2022-02-14" `
   -imageTemplateName $imageTemplateName `
   -svclocation $location

Görüntüyü oluşturmak için şablonda 'Çalıştır'ı çağırın.

Invoke-AzResourceAction `
   -ResourceName $imageTemplateName `
   -ResourceGroupName $imageResourceGroup `
   -ResourceType Microsoft.VirtualMachineImages/imageTemplates `
   -ApiVersion "2022-02-14" `
   -Action Run

Görüntünün oluşturulması ve her iki bölgeye çoğaltılması birkaç dakika sürebilir. VM oluşturmaya başlamadan önce bu bölümün bitmesini bekleyin.

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

Sanal makineyi oluşturma

VM Görüntü Oluşturucusu ile oluşturduğunuz görüntü sürümünden bir VM oluşturun.

  1. Oluşturduğunuz görüntü sürümünü alın:

    $imageVersion = Get-AzGalleryImageVersion `
    -ResourceGroupName $imageResourceGroup `
    -GalleryName $sigGalleryName `
    -GalleryImageDefinitionName $imageDefName
    $imageVersionId = $imageVersion.Id
    
  2. VM'yi görüntünün çoğaltıldığı ikinci bölgede oluşturun:

    $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
    

Özelleştirmeyi doğrulama

VM'yi oluştururken ayarladığınız kullanıcı adını ve parolayı kullanarak VM'ye Uzak Masaüstü bağlantısı oluşturun. VM'de bir Komut İstemi penceresi açın ve aşağıdaki komutu çalıştırın:

dir c:\

Görüntü özelleştirmesi sırasında oluşturulan adlı buildActions bir dizin görmeniz gerekir.

Kaynaklarınızı temizleme

Dekont

Aynı görüntünün yeni bir sürümünü oluşturmak için görüntü sürümünü yeniden etkinleştirmeyi denemek istiyorsanız, burada özetlenen adımı atlayın ve VM Görüntü Oluşturucusu'nu kullanarak başka bir görüntü sürümü oluşturun.

Bu makaledeki süreci izlediğinizde oluşturduğunuz kaynaklara artık ihtiyacınız yoksa, bunları silebilirsiniz.

Aşağıdaki işlem hem oluşturduğunuz görüntüyü hem de diğer tüm kaynak dosyalarını siler. Kaynakları silmeden önce bu dağıtımı tamamladığınızdan emin olun.

Önce kaynak grubu şablonunu silin. Aksi takdirde, VM Görüntü Oluşturucusu'nun kullandığı hazırlama kaynak grubu (IT_) temizlenmez.

  1. Görüntü şablonunun ResourceID değerini alın.

    $resTemplateId = Get-AzResource -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2022-02-14"
    
  2. Resim şablonunu silin.

    Remove-AzResource -ResourceId $resTemplateId.ResourceId -Force
    
  3. Rol atamasını silin.

    Remove-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
    
  4. Tanımları kaldırın.

    Remove-AzRoleDefinition -Name "$identityNamePrincipalId" -Force -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
    
  5. Kimliği silin.

    Remove-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Force
    
  6. Kaynak grubunu silin.

    Remove-AzResourceGroup $imageResourceGroup -Force
    

Sonraki adımlar

Bu makalede oluşturduğunuz görüntü sürümünü güncelleştirmek için bkz . Başka bir görüntü sürümü oluşturmak için VM Görüntü Oluşturucusu'nu kullanma.