Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: ✔️ VM Windows
Artikel ini menunjukkan cara membuat gambar Windows VM yang dikustomisasi menggunakan modul Azure VM Image Builder PowerShell.
Prasyarat
Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.
Jika Anda memilih untuk menggunakan PowerShell secara lokal, artikel ini mengharuskan Anda menginstal modul Azure PowerShell dan menyambungkan ke akun Azure Anda dengan menggunakan cmdlet Connect-AzAccount . Untuk informasi selengkapnya, lihat Menginstal Azure PowerShell.
Beberapa langkah memerlukan cmdlet dari modul Az.ImageBuilder . Instal secara terpisah dengan menggunakan perintah berikut.
Install-Module -Name Az.ImageBuilder
Azure Cloud Shell
Azure menghosting Azure Cloud Shell, lingkungan shell interaktif yang dapat Anda gunakan melalui browser Anda. Anda dapat menggunakan Bash atau PowerShell dengan Cloud Shell untuk bekerja dengan layanan Azure. Anda dapat menggunakan perintah Cloud Shell yang telah diinstal sebelumnya untuk menjalankan kode dalam artikel ini, tanpa harus menginstal apa pun di lingkungan lokal Anda.
Untuk memulai Azure Cloud Shell:
| Opsi | Contoh/Tautan |
|---|---|
| Pilih Coba di sudut kanan atas kode atau blok perintah. Memilih Coba tidak secara otomatis menyalin kode atau perintah ke Cloud Shell. |
|
| Buka https://shell.azure.com, atau pilih tombol Luncurkan Cloud Shell untuk membuka Cloud Shell di browser Anda. |
|
| Pilih tombol Cloud Shell pada bilah menu di kanan atas di portal Microsoft Azure. |
|
Untuk menggunakan Azure Cloud Shell:
Mulai Cloud Shell.
Pilih tombol Salin pada blok kode (atau blok perintah) untuk menyalin kode atau perintah.
Tempelkan kode atau perintah ke sesi Cloud Shell dengan memilih Ctrl+Shift+V di Windows dan Linux, atau dengan memilih Cmd+Shift+V di macOS.
Pilih Enter untuk menjalankan kode atau perintah.
Jika Anda memiliki beberapa langganan Azure, pilihlah langganan yang sesuai di mana sumber daya harus ditagih. Pilih langganan tertentu dengan menggunakan cmdlet Set-AzContext .
Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000
Mendaftarkan penyedia
Jika Anda belum melakukannya, daftarkan penyedia sumber berikut untuk digunakan dengan langganan Azure Anda:
- 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
Tentukan variabel
Karena Anda akan menggunakan beberapa informasi berulang kali, buat beberapa variabel untuk menyimpan informasi tersebut:
# 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'
Tentukan variabel untuk ID langganan Azure Anda. Untuk mengonfirmasi bahwa subscriptionID variabel berisi ID langganan, Anda dapat menjalankan baris kedua dalam contoh berikut:
# Your Azure Subscription ID
$subscriptionID = (Get-AzContext).Subscription.Id
Write-Output $subscriptionID
Membuat grup sumber daya
Buat grup sumber daya Azure dengan menggunakan cmdlet New-AzResourceGroup . Grup sumber daya adalah kontainer logis di mana sumber daya Azure disebarkan dan dikelola sebagai grup.
Contoh berikut membuat grup sumber daya yang didasarkan pada nama di variabel $imageResourceGroup di wilayah yang telah Anda tentukan di variabel $location. Grup sumber daya ini digunakan untuk menyimpan artefak templat konfigurasi gambar dan gambar.
New-AzResourceGroup -Name $imageResourceGroup -Location $location
Membuat identitas pengguna dan atur izin peran
Memberikan izin pembuat gambar Azure untuk membuat gambar dalam grup sumber daya tertentu dengan menggunakan contoh berikut. Tanpa izin ini, proses pembuatan gambar tidak akan berhasil diselesaikan.
Buat variabel untuk definisi peran dan nama identitas. Nilai-nilai ini harus unik.
[int]$timeInt = $(Get-Date -UFormat '%s') $imageRoleDefName = "Azure Image Builder Image Def $timeInt" $identityName = "myIdentity$timeInt"Membuat identitas pengguna.
New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $locationSimpan sumber daya identitas dan IDENTITAS utama dalam variabel.
$identityNameResourceId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id $identityNamePrincipalId = (Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
Menetapkan izin untuk identitas untuk mendistribusikan gambar
Unduh file konfigurasi JSON, lalu ubah berdasarkan pengaturan yang ditentukan dalam artikel ini.
$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 -ForceBuat definisi peran.
New-AzRoleDefinition -InputFile $myRoleImageCreationPathBerikan definisi peran ke prinsip layanan VM Image Builder.
$RoleAssignParams = @{ ObjectId = $identityNamePrincipalId RoleDefinitionName = $imageRoleDefName Scope = "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup" } New-AzRoleAssignment @RoleAssignParams
Nota
Jika Anda menerima kesalahan "New-AzRoleDefinition: Batas definisi peran terlampaui. Tidak ada lagi definisi peran yang dapat dibuat," lihat Memecahkan masalah Azure RBAC (kontrol akses berbasis peran).
Buat Azure Compute Gallery
Buat galeri.
$myGalleryName = 'myImageGallery' $imageDefName = 'winSvrImages' New-AzGallery -GalleryName $myGalleryName -ResourceGroupName $imageResourceGroup -Location $locationMembuat definisi galeri.
$GalleryParams = @{ GalleryName = $myGalleryName ResourceGroupName = $imageResourceGroup Location = $location Name = $imageDefName OsState = 'generalized' OsType = 'Windows' Publisher = 'myCo' Offer = 'Windows' Sku = 'Win2019' HyperVGeneration = 'v1' } New-AzGalleryImageDefinition @GalleryParams
Buat sebuah citra
Buat objek sumber VM Image Builder. Untuk nilai parameter yang valid, lihat Menemukan gambar VM Windows di Azure Marketplace dengan Azure PowerShell.
$SrcObjParams = @{ PlatformImageSource = $true Publisher = 'MicrosoftWindowsServer' Offer = 'WindowsServer' Sku = '2019-Datacenter' Version = 'latest' } $srcPlatform = New-AzImageBuilderTemplateSourceObject @SrcObjParamsBuat objek distributor VM Image Builder.
$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 @disObjParamsBuat objek kustomisasi VM Image Builder.
$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 @ImgCustomParams01Buat objek kustomisasi VM Image Builder.
$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 @ImgCustomParams02Buat templat VM Image Builder.
$ImgTemplateParams = @{ ImageTemplateName = $imageTemplateName ResourceGroupName = $imageResourceGroup Source = $srcPlatform Distribute = $disSharedImg Customize = $Customizer01, $Customizer02 Location = $location UserAssignedIdentityId = $identityNameResourceId } New-AzImageBuilderTemplate @ImgTemplateParams
Ketika templat telah dibuat, pesan dikembalikan, dan templat konfigurasi VM Image Builder dibuat di $imageResourceGroup.
Untuk menentukan apakah proses pembuatan template berhasil, gunakan contoh berikut:
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup |
Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
Di latar belakang, VM Image Builder juga membuat grup sumber daya penahapan di langganan Anda. Grup sumber daya ini digunakan untuk kompilasi gambar. Ini dalam format IT_<DestinationResourceGroup>_<TemplateName>.
Peringatan
Jangan hapus grup sumber daya penahapan secara langsung. Untuk menyebabkan grup sumber daya penahapan dihapus, hapus artefak templat gambar.
Jika layanan melaporkan kegagalan saat templat konfigurasi gambar dikirimkan, lakukan hal berikut:
Sebelum Anda mencoba mengirimkan kembali templat, hapus dengan mengikuti contoh ini:
Remove-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup
Memulai build gambar
Kirimkan konfigurasi gambar ke layanan VM Image Builder dengan menjalankan perintah berikut:
Start-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateName
Tunggu hingga proses pembuatan gambar selesai, yang bisa memakan waktu hingga satu jam.
Jika Anda mengalami kesalahan, tinjau Memecahkan masalah kegagalan Azure VM Image Builder.
Membuat VM
Simpan mandat masuk VM dalam variabel. Kata sandi harus rumit.
$Cred = Get-CredentialBuat VM dengan menggunakan gambar yang Anda buat.
$ArtifactId = (Get-AzImageBuilderTemplateRunOutput -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup).ArtifactId New-AzVM -ResourceGroupName $imageResourceGroup -Image $ArtifactId -Name myWinVM01 -Credential $Cred
Verifikasikan kustomisasi
Buat koneksi Desktop Jauh ke VM dengan menggunakan nama pengguna dan sandi yang Anda tetapkan saat membuat VM.
Di dalam VM, buka PowerShell dan jalankan
Get-Content, seperti yang diperlihatkan contoh berikut:Get-Content -Path C:\buildActions\buildActionsOutput.txtOutputnya didasarkan pada konten file yang Anda buat selama proses kustomisasi gambar.
Azure-Image-Builder-Was-HereDari sesi PowerShell yang sama, verifikasi bahwa penyesuaian kedua berhasil diselesaikan dengan memeriksa keberadaan
c:\buildArtifacts\index.html, seperti yang ditunjukkan pada contoh berikut:Get-ChildItem c:\buildArtifacts\Hasilnya harus berupa daftar direktori yang menunjukkan bahwa file telah diunduh selama proses penyesuaian gambar.
Directory: C:\buildArtifacts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 29/01/2021 10:04 276 index.html
Membersihkan sumber daya Anda
Jika Anda tidak lagi memerlukan sumber daya yang dibuat selama proses ini, Anda dapat menghapusnya dengan melakukan hal berikut:
Hapus templat VM Image Builder tersebut.
Remove-AzImageBuilderTemplate -ResourceGroupName $imageResourceGroup -Name $imageTemplateNameMenghapus grup sumber daya gambar.
Perhatian
Contoh berikut menghapus grup sumber daya yang ditentukan dan semua sumber daya yang ada di dalamnya. Jika ada sumber daya di luar cakupan artikel ini di grup sumber daya, sumber daya tersebut juga akan dihapus.
Remove-AzResourceGroup -Name $imageResourceGroup
Langkah selanjutnya
Untuk mempelajari selengkapnya tentang komponen file JSON yang digunakan artikel ini, lihat referensi templat VM Image Builder.