PowerShell kullanarak VM Görüntü Oluşturucusu ile Windows VM oluşturma
Şunlar için geçerlidir: ✔️ Windows VM'leri
Bu makalede, Azure VM Image Builder PowerShell modülünü kullanarak özelleştirilmiş bir Windows VM görüntüsünün nasıl oluşturulacağı gösterilmektedir.
Önkoşullar
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
PowerShell'i yerel olarak kullanmayı seçerseniz, bu makalede Azure PowerShell modülünü yüklemeniz ve Connect-AzAccount cmdlet'ini kullanarak Azure hesabınıza bağlanmanız gerekir. Daha fazla bilgi için bkz . Azure PowerShell'i yükleme.
Adımlardan bazıları Az.ImageBuilder modülünden cmdlet'ler gerektirir. Aşağıdaki komutu kullanarak ayrı olarak yükleyin.
Install-Module -Name Az.ImageBuilder
Azure Cloud Shell
Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı olan Azure Cloud Shell'i barındırıyor. Azure hizmetleriyle çalışmak için Cloud Shell ile Bash veya PowerShell kullanabilirsiniz. Yerel ortamınıza herhangi bir şey yüklemek zorunda kalmadan bu makaledeki kodu çalıştırmak için Cloud Shell önceden yüklenmiş komutlarını kullanabilirsiniz.
Azure Cloud Shell'i başlatmak için:
Seçenek | Örnek/Bağlantı |
---|---|
Kodun veya komut bloğunun sağ üst köşesindeki Deneyin'i seçin. Deneyin seçildiğinde kod veya komut otomatik olarak Cloud Shell'e kopyalanmaz. | |
https://shell.azure.comadresine gidin veya Cloud Shell'i tarayıcınızda açmak için Cloud Shell'i Başlat düğmesini seçin. | |
Azure portalının sağ üst kısmındaki menü çubuğunda Cloud Shell düğmesini seçin. |
Azure Cloud Shell'i kullanmak için:
Cloud Shell'i başlatın.
Kodu veya komutu kopyalamak için kod bloğundaki (veya komut bloğundaki) Kopyala düğmesini seçin.
Windows ve Linux'ta Ctrl+Shift V'yi seçerek veya macOS üzerinde Cmd+Shift++V'yi seçerek kodu veya komutu Cloud Shell oturumuna yapıştırın.
Kodu veya komutu çalıştırmak için Enter'ı seçin.
Birden çok Azure aboneliğiniz varsa, kaynakların faturalandırılacağı uygun aboneliği seçin. Set-AzContext cmdlet'ini kullanarak belirli bir aboneliği seçin.
Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000
Sağlayıcıları kaydetme
Henüz yapmadıysanız, Azure aboneliğinizle kullanmak üzere aşağıdaki kaynak sağlayıcılarını kaydedin:
- 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
Değişkenleri tanımlama
Bazı bilgileri art arda kullanacağınız için, bu bilgileri depolamak için bazı değişkenler oluşturun:
# 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'
Azure abonelik kimliğiniz için bir değişken oluşturun. Değişkenin abonelik kimliğinizi içerdiğini subscriptionID
onaylamak için aşağıdaki örnekte ikinci satırı çalıştırabilirsiniz:
# Your Azure Subscription ID
$subscriptionID = (Get-AzContext).Subscription.Id
Write-Output $subscriptionID
Kaynak grubu oluşturma
New-AzResourceGroup cmdlet'ini kullanarak bir Azure kaynak grubu oluşturun. Kaynak grubu, Azure kaynaklarının grup olarak dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır.
Aşağıdaki örnek, değişkende belirttiğiniz $location
bölgedeki değişkendeki $imageResourceGroup
adı temel alan bir kaynak grubu oluşturur. Bu kaynak grubu, görüntü yapılandırma şablonu yapıtını ve görüntüyü depolamak için kullanılır.
New-AzResourceGroup -Name $imageResourceGroup -Location $location
Kullanıcı kimliği oluşturma ve rol izinlerini ayarlama
Aşağıdaki örneği kullanarak belirtilen kaynak grubunda görüntü oluşturmak için Azure görüntü oluşturucu izinleri verin. Bu izin olmadan görüntü derleme işlemi başarıyla tamamlanmaz.
Rol tanımı ve kimlik adları için değişkenler oluşturun. Bu değerler benzersiz olmalıdır.
[int]$timeInt = $(Get-Date -UFormat '%s') $imageRoleDefName = "Azure Image Builder Image Def $timeInt" $identityName = "myIdentity$timeInt"
Kullanıcı kimliği oluşturma.
New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location
Kimlik kaynağını ve asıl kimlikleri değişkenlerde depolayın.
$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
JSON yapılandırma dosyasını indirin ve bu makalede tanımlanan ayarlara göre değiştirin.
$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
Rol tanımını oluşturun.
New-AzRoleDefinition -InputFile $myRoleImageCreationPath
Rol tanımını VM Görüntü Oluşturucusu hizmet sorumlusuna verin.
$RoleAssignParams = @{ ObjectId = $identityNamePrincipalId RoleDefinitionName = $imageRoleDefName Scope = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" } New-AzRoleAssignment @RoleAssignParams
Not
"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
Galeriyi oluşturun.
$myGalleryName = 'myImageGallery' $imageDefName = 'winSvrImages' New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $location
Galeri tanımı oluşturun.
$GalleryParams = @{ GalleryName = $myGalleryName ResourceGroupName = $imageResourceGroup Location = $location Name = $imageDefName OsState = 'generalized' OsType = 'Windows' Publisher = 'myCo' Offer = 'Windows' Sku = 'Win2019' } New-AzGalleryImageDefinition @GalleryParams
Görüntü oluşturma
VM Görüntü Oluşturucusu kaynak nesnesi oluşturun. Geçerli parametre değerleri için bkz. Azure PowerShell ile Azure Market'da Windows VM görüntülerini bulma.
$SrcObjParams = @{ PlatformImageSource = $true Publisher = 'MicrosoftWindowsServer' Offer = 'WindowsServer' Sku = '2019-Datacenter' Version = 'latest' } $srcPlatform = New-AzImageBuilderTemplateSourceObject @SrcObjParams
VM Görüntü Oluşturucusu dağıtım nesnesi oluşturma.
$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
VM Görüntü Oluşturucusu özelleştirme nesnesi oluşturun.
$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
İkinci bir VM Görüntü Oluşturucusu özelleştirme nesnesi oluşturun.
$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
VM Görüntü Oluşturucusu şablonu oluşturun.
$ImgTemplateParams = @{ ImageTemplateName = $imageTemplateName ResourceGroupName = $imageResourceGroup Source = $srcPlatform Distribute = $disSharedImg Customize = $Customizer01, $Customizer02 Location = $location UserAssignedIdentityId = $identityNameResourceId } New-AzImageBuilderTemplate @ImgTemplateParams
Şablon oluşturulduğunda bir ileti döndürülür ve içinde $imageResourceGroup
bir VM Görüntü Oluşturucusu yapılandırma şablonu oluşturulur.
Şablon oluşturma işleminin başarılı olup olmadığını belirlemek için aşağıdaki örneği kullanın:
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup |
Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
Arka planda, VM Görüntü Oluşturucusu aboneliğinizde bir hazırlama kaynak grubu da oluşturur. Bu kaynak grubu görüntü derlemesi için kullanılır. biçimindedir IT_<DestinationResourceGroup>_<TemplateName>
.
Uyarı
Hazırlama kaynak grubunu doğrudan silmeyin. Hazırlama kaynak grubunun silinmesine neden olmak için görüntü şablonu yapıtını silin.
Görüntü yapılandırma şablonu gönderildiğinde hizmet bir hata bildiriyorsa aşağıdakileri yapın:
Bkz . Azure VM Görüntü Oluşturucusu hatalarını giderme.
Şablonu göndermeyi yeniden denemeden önce şu örneği izleyerek şablonu silin:
Remove-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup
Görüntü derlemesini başlatma
Aşağıdaki komutu çalıştırarak görüntü yapılandırmasını VM Görüntü Oluşturucusu hizmetine gönderin:
Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Görüntü oluşturma işleminin tamamlanmasını bekleyin ve bu işlem bir saat kadar sürebilir.
Hatalarla karşılaşırsanız Azure VM Görüntü Oluşturucusu hatalarını giderme makalesini gözden geçirin.
VM oluşturma
VM oturum açma kimlik bilgilerini bir değişkende depolayın. Parola karmaşık olmalıdır.
$Cred = Get-Credential
Oluşturduğunuz görüntüyü kullanarak VM'yi oluşturun.
$ArtifactId = (Get-AzImageBuilderTemplateRunOutput -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup).ArtifactId New-AzVM -ResourceGroupName $imageResourceGroup -Image $ArtifactId -Name myWinVM01 -Credential $Cred
Özelleştirmeleri 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'nin içinde PowerShell'i açın ve aşağıdaki örnekte gösterildiği gibi komutunu çalıştırın
Get-Content
:Get-Content -Path C:\buildActions\buildActionsOutput.txt
Çıktı, görüntü özelleştirme işlemi sırasında oluşturduğunuz dosyanın içeriğini temel alır.
Azure-Image-Builder-Was-Here
Aynı PowerShell oturumunda, aşağıdaki örnekte gösterildiği gibi öğesinin varlığını denetleyerek ikinci özelleştirmenin
c:\buildArtifacts\index.html
başarıyla tamamlandığını doğrulayın:Get-ChildItem c:\buildArtifacts\
Sonuç, görüntü özelleştirme işlemi sırasında dosyanın indirildiğini gösteren bir dizin listesi olmalıdır.
Directory: C:\buildArtifacts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 29/01/2021 10:04 276 index.html
Kaynaklarınızı temizleme
Bu işlem sırasında oluşturulan kaynaklara artık ihtiyacınız yoksa, aşağıdakileri yaparak bunları silebilirsiniz:
VM Görüntü Oluşturucusu şablonunu silin.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Görüntü kaynak grubunu silin.
Dikkat
Aşağıdaki örnek, belirtilen kaynak grubunu ve içerdiği tüm kaynakları siler. Bu makalenin kapsamı dışındaki kaynaklar kaynak grubunda varsa, bunlar da silinir.
Remove-AzResourceGroup -Name $imageResourceGroup
Sonraki adımlar
Bu makalede kullanılan JSON dosyasının bileşenleri hakkında daha fazla bilgi edinmek için bkz . VM Görüntü Oluşturucusu şablon başvurusu.