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.
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
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
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 vmpassword
gibi 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.
Azure İşlem Galerisi oluşturma
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.
Oluşturduğunuz görüntü sürümünü alın:
$imageVersion = Get-AzGalleryImageVersion ` -ResourceGroupName $imageResourceGroup ` -GalleryName $sigGalleryName ` -GalleryImageDefinitionName $imageDefName $imageVersionId = $imageVersion.Id
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.
Görüntü şablonunun ResourceID değerini alın.
$resTemplateId = Get-AzResource -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2022-02-14"
Resim şablonunu silin.
Remove-AzResource -ResourceId $resTemplateId.ResourceId -Force
Rol atamasını silin.
Remove-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
Tanımları kaldırın.
Remove-AzRoleDefinition -Name "$identityNamePrincipalId" -Force -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
Kimliği silin.
Remove-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Force
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.