Membuat templat JSON templat Azure Image Builder Bicep atau ARM

Berlaku untuk: ✔️ mesin virtual Linux ✔️ mesin virtual Windows ✔️ Set skala fleksibel

Azure Image Builder menggunakan file Bicep atau file templat JSON templat ARM untuk meneruskan informasi ke layanan Image Builder. Dalam artikel ini kita membahas bagian file, sehingga Anda dapat membangun sendiri. Untuk mengetahui API versi terbaru, lihat referensi templat. Untuk melihat contoh file .json lengkap, lihat Azure Image Builder GitHub.

Format dasarnya adalah:

{
  "type": "Microsoft.VirtualMachineImages/imageTemplates",
  "apiVersion": "2022-02-14",
  "location": "<region>",
  "tags": {
    "<name>": "<value>",
    "<name>": "<value>"
  },
  "identity": {},
  "properties": {
    "buildTimeoutInMinutes": <minutes>,
    "customize": [],
    "errorHandling":[],
    "distribute": [],
    "optimize": [],
    "source": {},
    "stagingResourceGroup": "/subscriptions/<subscriptionID>/resourceGroups/<stagingResourceGroupName>",
    "validate": {},
    "vmProfile": {
      "vmSize": "<vmSize>",
      "osDiskSizeGB": <sizeInGB>,
      "vnetConfig": {
        "subnetId": "/subscriptions/<subscriptionID>/resourceGroups/<vnetRgName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName>",
        "proxyVmSize": "<vmSize>"
      },
      "userAssignedIdentities": [
              "/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName1>",
        "/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName2>",
        "/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName3>",
        ...
      ]
    }
  }
}

Jenis dan versi API

type adalah jenis sumber daya, yang harus Microsoft.VirtualMachineImages/imageTemplates. apiVersion akan berubah seiring berubahnya API. Lihat Yang baru di Azure VM Image Builder untuk mengetahui semua perubahan API utama dan pembaruan fitur untuk layanan Azure VM Image Builder.

"type": "Microsoft.VirtualMachineImages/imageTemplates",
"apiVersion": "2022-02-14",

Lokasi

Lokasi adalah wilayah tempat gambar kustom dibuat. Berikut wilayah yang didukung:

  • AS Timur
  • AS Timur 2
  • AS Tengah Bagian Barat
  • AS Barat
  • US Barat 2
  • AS Barat 3
  • US Tengah Selatan
  • Eropa Utara
  • Eropa Barat
  • Asia Tenggara
  • Australia Tenggara
  • Australia Timur
  • UK Selatan
  • UK Barat
  • Brasil Selatan
  • Kanada Tengah
  • India Tengah
  • US Tengah
  • Prancis Tengah
  • Jerman Barat Tengah
  • Jepang Timur
  • AS Tengah Bagian Utara
  • Norwegia Timur
  • Swiss Utara
  • Jio India Barat
  • Arab Saudi Utara
  • Asia Timur
  • Korea Tengah
  • Afrika Selatan Utara
  • Qatar Tengah
  • Gov (US) Arizona (Pratinjau Umum)
  • Gov (US) Virginia (Pratinjau Umum)
  • Tiongkok Utara 3 (Pratinjau Umum)
  • Swedia Tengah
  • Polandia Tengah

Penting

Gunakan perintah Microsoft.VirtualMachineImages/FairfaxPublicPreview untuk mengakses pratinjau publik Image Builder di wilayah Azure Government (US Gov Arizona dan US Gov Virginia).

Penting

Daftarkan fitur Microsoft.VirtualMachineImages/MooncakePublicPreview untuk mengakses pratinjau publik Azure Image Builder di wilayah Tiongkok Utara 3.

Untuk mengakses pratinjau publik Azure VM Image Builder di wilayah Azure Government (USGov Arizona dan USGov Virginia), Anda harus mendaftarkan fitur Microsoft.VirtualMachineImages/FairfaxPublicPreview . Untuk melakukannya, jalankan perintah berikut di PowerShell atau Azure CLI:

Register-AzProviderPreviewFeature -ProviderNamespace Microsoft.VirtualMachineImages -Name FairfaxPublicPreview

Untuk mengakses pratinjau publik Azure VM Image Builder di wilayah Tiongkok Utara 3, Anda harus mendaftarkan fitur Microsoft.VirtualMachineImages/MooncakePublicPreview . Untuk melakukannya, jalankan perintah berikut di PowerShell atau Azure CLI:

Register-AzProviderPreviewFeature -ProviderNamespace Microsoft.VirtualMachineImages -Name MooncakePublicPreview
"location": "<region>"

Residensi data

Layanan Azure VM Image Builder tidak menyimpan/memproses data pelanggan di luar wilayah yang memiliki persyaratan residensi data wilayah tunggal yang ketat saat pelanggan meminta build di wilayah tersebut. Jika pemadaman layanan untuk wilayah yang memiliki persyaratan residensi data, Anda perlu membuat file/templat Bicep di wilayah dan geografi yang berbeda.

Redundansi zona

Distribusi mendukung redundansi zona, VHD didistribusikan ke akun Zone Redundant Storage (ZRS) secara default dan versi Azure Compute Gallery (sebelumnya dikenal sebagai Shared Image Gallery) akan mendukung jenis penyimpanan ZRS jika ditentukan.

Tag

Tag adalah pasangan kunci/nilai yang dapat Anda tentukan untuk citra yang dihasilkan.

Identitas

Ada dua cara untuk menambahkan identitas yang ditetapkan pengguna yang dijelaskan di bawah ini.

Identitas Yang Ditetapkan Pengguna untuk sumber daya templat citra Image Builder

Diperlukan - Agar Image Builder memiliki izin untuk baca/tulis citra dan izin baca dalam skrip dalam Azure Storage, Anda harus membuat identitas yang ditetapkan pengguna Azure yang memiliki izin ke sumber daya individual. Untuk detail tentang cara kerja izin Image Builder, dan langkah yang relevan, lihat Membuat citra dan menggunakan identitas terkelola yang ditetapkan pengguna untuk mengakses file di akun penyimpanan Azure.

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "<imgBuilderId>": {}
    }
}

Identitas yang Ditetapkan Pengguna layanan Image Builder:

  • Mendukung hanya satu identitas.
  • Tidak mendukung nama domain kustom.

Untuk mempelajari selengkapnya, lihat Apa identitas terkelola untuk sumber daya Azure?. Untuk informasi selengkapnya tentang menerapkan fitur ini, lihat Mengonfigurasi identitas terkelola untuk sumber daya Azure pada Azure VM menggunakan Azure CLI.

Identitas yang ditetapkan pengguna untuk VM Build Image Builder

Properti ini hanya tersedia dalam API versi 2021-10-01 atau yang lebih baru.

Opsional - Image Builder Build VM yang dibuat oleh layanan Image Builder di langganan Anda digunakan untuk membangun dan menyesuaikan gambar. Agar VM Build Image Builder memiliki izin untuk mengautentikasi dengan layanan lain seperti Azure Key Vault di langganan, Anda harus membuat satu atau beberapa Identitas yang Ditetapkan Pengguna Azure yang memiliki izin ke sumber daya individual. Azure Image Builder kemudian dapat mengaitkan Identitas yang Ditetapkan Pengguna ini dengan mesin virtual Build. Skrip penyesuai yang berjalan di dalam mesin virtual Build kemudian dapat mengambil token untuk identitas ini dan berinteraksi dengan sumber daya Azure lainnya sesuai kebutuhan. Ketahuilah, identitas yang ditetapkan pengguna untuk Azure Image Builder harus memiliki penetapan peran "Operator Identitas Terkelola" pada semua identitas yang ditetapkan pengguna untuk Azure Image Builder agar dapat mengaitkannya ke VM build.

Catatan

Ketahuilah bahwa banyak identitas dapat ditentukan untuk VM Build Image Builder, termasuk identitas yang Anda buat untuk sumber daya kerangka gambar. Secara default, identitas yang Anda buat untuk sumber daya templat citra tidak akan secara otomatis ditambahkan ke mesin virtual build.

"properties": {
  "vmProfile": {
    "userAssignedIdentities": [
      "/subscriptions/<subscriptionID>/resourceGroups/<identityRgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName>"
    ]
  }
}

Identitas yang Ditetapkan Pengguna untuk VM Build Image Builder:

  • Mendukung daftar salah satu atau beberapa identitas terkelola yang ditetapkan pengguna untuk dikonfigurasi di mesin virtual.
  • Mendukung skenario lintas langganan (identitas yang dibuat di satu langganan sementara templat citra dibuat di langganan lain di bawah penyewa yang sama).
  • Tidak mendukung skenario lintas penyewa (identitas yang dibuat di satu penyewa sementara templat citra dibuat di penyewa lain).

Untuk mempelajari selengkapnya, lihat:

Properti: buildTimeoutInMinutes

Durasi maksimum untuk menunggu saat membangun templat citra (mencakup semua kustomisasi, validasi, dan distribusi).

Jika Anda tidak menentukan properti atau mengatur nilainya ke 0, nilai default akan digunakan, yaitu 240 menit atau empat jam. Nilai minimumnya adalah 6 menit dan nilai maksimumnya adalah 960 menit atau 16 jam. Ketika nilai batas waktu terpukul (apakah build gambar selesai atau tidak), Anda akan melihat kesalahan yang mirip dengan:

[ERROR] Failed while waiting for packerizer: Timeout waiting for microservice to
[ERROR] complete: 'context deadline exceeded'

Untuk Windows, sebaiknya jangan atur buildTimeoutInMinutes kurang dari 60 menit. Jika Anda hampir mencapai waktu habis, tinjau log untuk melihat apakah langkah kustomisasi sedang menunggu input pengguna atau semacamnya. Jika Anda merasa membutuhkan waktu lebih banyak untuk menyelesaikan kustomisasi, tingkatkan nilai buildTimeoutInMinutes. Namun, jangan mengaturnya terlalu tinggi karena Anda mungkin harus menunggu waktu habis sebelum melihat kesalahan.

Properti: sesuaikan

Image Builder mendukung beberapa "penyesuai", yang merupakan fungsi yang digunakan untuk mengkustomisasi citra Anda, seperti menjalankan skrip, atau melakukan boot ulang server.

Ketika menggunakan customize :

  • Anda dapat menggunakan beberapa penyesuai.
  • Kustomisasi mengeksekusi dalam urutan yang ditentukan dalam templat.
  • Jika satu penyesuai gagal, maka seluruh komponen penyesuaian akan gagal dan melaporkan kembali kesalahan.
  • Uji skrip secara menyeluruh sebelum menggunakannya dalam templat. Penelusuran kesalahan skrip sendiri sekarang lebih mudah.
  • Jangan memasukkan data sensitif ke dalam skrip. Perintah sebaris dapat dilihat dalam definisi templat gambar. Jika Anda memiliki informasi sensitif (termasuk kata sandi, token SAS, token autentikasi, dll), informasi tersebut harus dipindahkan ke skrip di Azure Storage tempat akses membutuhkan autentikasi.
  • Lokasi skrip harus dapat diakses secara publik, kecuali Anda menggunakan MSI.

Bagian customize adalah array. Jenis penyesuai yang didukung adalah: File, PowerShell, Shell, WindowsRestart, dan WindowsUpdate.

"customize": [
  {
    "type": "File",
    "destination": "string",
    "sha256Checksum": "string",
    "sourceUri": "string"
  },
  {
    "type": "PowerShell",
    "inline": [ "string" ],
    "runAsSystem": "bool",
    "runElevated": "bool",
    "scriptUri": "string",
    "sha256Checksum": "string",
    "validExitCodes": [ "int" ]
  },
  {
    "type": "Shell",
    "inline": [ "string" ],
    "scriptUri": "string",
    "sha256Checksum": "string"
  },
  {
    "type": "WindowsRestart",
    "restartCheckCommand": "string",
    "restartCommand": "string",
    "restartTimeout": "string"
  },
  {
    "type": "WindowsUpdate",
    "filters": [ "string" ],
    "searchCriteria": "string",
    "updateLimit": "int"
  }
]

Penyesuai shell

Penyesuai Shell mendukung menjalankan skrip shell di Linux. Skrip shell harus dapat diakses secara publik atau Anda harus mengonfigurasi MSI untuk Image Builder untuk mengaksesnya.

"customize": [
  {
    "type": "Shell",
    "name": "<name>",
    "scriptUri": "<link to script>",
    "sha256Checksum": "<sha256 checksum>"
  }
],
"customize": [
  {
    "type": "Shell",
    "name": "<name>",
    "inline": "<commands to run>"
  }
]

Mengkustomisasi properti:

  • jenis – Shell.

  • nama - nama untuk melacak penyesuaian.

  • scriptUri - URI ke lokasi file.

  • sebaris - array perintah shell, dipisahkan oleh koma.

  • sha256Checksum - Nilai checksum sha256 file, nilai ini dihasilkan secara lokal, dan kemudian Image Builder akan melakukan checksum dan memvalidasi.

    Untuk menghasilkan sha256Checksum, menggunakan terminal yang dijalankan Mac/Linux : sha256sum <fileName>

Catatan

Perintah sebaris disimpan sebagai bagian dari definisi templat gambar, Anda dapat melihatnya ketika membuang definisi gambar. Jika Anda memiliki perintah atau nilai sensitif (termasuk kata sandi, token SAS, token autentikasi, dll.), direkomendasikan untuk memindahkannya ke skrip dan menggunakan identitas pengguna untuk mengautentikasi ke Azure Storage.

Hak istimewa pengguna super

Awali perintah dengan sudo untuk menjalankannya dengan hak istimewa pengguna super. Anda dapat menambahkan perintah ke skrip atau gunakan perintah sebaris, misalnya:

"type": "Shell",
"name": "setupBuildPath",
"inline": [
    "sudo mkdir /buildArtifacts",
    "sudo cp /tmp/index.html /buildArtifacts/index.html"
]

Contoh skrip menggunakan sudo yang dapat Anda referensikan menggunakan scriptUri:

#!/bin/bash -e

echo "Telemetry: creating files"
mkdir /myfiles

echo "Telemetry: running sudo 'as-is' in a script"
sudo touch /myfiles/somethingElevated.txt

Mulai ulang penyesuai Windows

Alat penyesuaian WindowsRestart memungkinkan Anda memulai ulang VM Windows dan menunggu VM kembali online. Alat penyesuaian ini memungkinkan Anda menginstal perangkat lunak yang memerlukan booting ulang.

"customize": [
  {
    "type": "WindowsRestart",
    "restartCommand": "shutdown /r /f /t 0",
    "restartCheckCommand": "echo Azure-Image-Builder-Restarted-the-VM  > c:\\buildArtifacts\\azureImageBuilderRestart.txt",
    "restartTimeout": "5m"
  }
]

Mengkustomisasi properti:

  • Jenis: WindowsRestart.
  • restartCommand - Perintah untuk menjalankan restart (opsional). Default adalah 'shutdown /r /f /t 0 /c \"packer restart\"'.
  • restartCheckCommand - Perintah untuk memeriksa apakah restart berhasil (opsional).
  • restartTimeout - Waktu mulai ulang habis ditentukan sebagai string besaran dan unit. Misalnya, 5m (5 menit) atau 2h (2 jam). Default-nya adalah 5m.

Catatan

Tidak ada penyesuai penghidupan ulang Linux.

Penyesuai PowerShell

Alat penyesuaian PowerShell mendukung operasi skrip PowerShell dan perintah sebaris di Windows, skrip harus dapat diakses secara publik agar IB bisa mengaksesnya.

"customize": [
  {
    "type": "PowerShell",
    "name":   "<name>",
    "scriptUri": "<path to script>",
    "runElevated": <true false>,
    "runAsSystem": <true false>,
    "sha256Checksum": "<sha256 checksum>"
  },
  {
    "type": "PowerShell",
    "name": "<name>",
    "inline": "<PowerShell syntax to run>",
    "validExitCodes": [<exit code>],
    "runElevated": <true or false>,
    "runAsSystem": <true or false>
  }
]

Mengkustomisasi properti:

  • jenis – PowerShell.

  • scriptUri - URI ke lokasi file skrip PowerShell.

  • inline – Perintah sebaris yang akan dijalankan, dipisahkan dengan koma.

  • validExitCodes – Opsional, kode valid yang dapat dikembalikan dari skrip/perintah sebaris. Properti ini menghindari kegagalan skrip/perintah sebaris.

  • runElevated – Opsional, boolean, dukungan untuk menjalankan perintah dan skrip dengan izin yang ditinggikan.

  • runAsSystem - Opsional, boolean, menentukan apakah skrip PowerShell harus dijalankan sebagai pengguna Sistem.

  • sha256Checksum - buat checksum SHA256 file secara lokal, perbarui nilai checksum menjadi huruf kecil, dan Image Builder akan memvalidasi checksum selama penyebaran templat gambar.

    Untuk membuat sha256Checksum, gunakan cmdlet Get-FileHash di PowerShell.

Penyesuai berkas

Alat penyesuaian File memungkinkan Image Builder mengunduh file dari repositori GitHub atau penyimpanan Azure. Alat penyesuaian ini mendukung Linux dan Windows. Jika Anda memiliki pipeline build gambar yang mengandalkan artefak build, Anda dapat mengatur penyesuai file untuk diunduh dari berbagi build, dan memindahkan artefak ke dalam gambar.

"customize": [
  {
    "type": "File",
    "name": "<name>",
    "sourceUri": "<source location>",
    "destination": "<destination>",
    "sha256Checksum": "<sha256 checksum>"
  }
]

Properti penyesuai berkas:

  • sourceUri - titik akhir penyimpanan yang dapat diakses, titik akhir ini bisa merupakan penyimpanan Azure atau GitHub. Anda hanya dapat mengunduh satu file, bukan seluruh direktori. Jika Anda perlu mengunduh direktori, gunakan file terkompresi, lalu uncompress menggunakan penyesuai Shell atau PowerShell.

    Catatan

    Jika sourceUri adalah Akun Azure Storage, terlepas dari apakah blob ditandai publik, Anda harus memberikan izin Identitas Pengguna Terkelola untuk membaca akses pada blob. Lihat contoh ini untuk mengatur izin penyimpanan.

  • destination - ini adalah jalur tujuan lengkap dan nama file. Setiap jalur dan subdirektori yang direferensikan harus ada, gunakan penyesuai Shell atau PowerShell untuk mengatur jalur-jalur ini sebelumnya. Anda dapat menggunakan kustomisasi skrip untuk membuat jalur.

Alat penyesuaian ini didukung oleh direktori Windows dan jalur Linux, tapi ada beberapa perbedaan:

  • Linux – satu-satunya jalur yang dapat ditulisi Image Builder adalah /tmp.
  • Windows – Tidak ada batasan jalur, tetapi jalurnya harus ada.

Jika ada kesalahan saat mencoba mengunduh file, atau memasukkannya ke direktori tertentu, maka langkah kustomisasi gagal, dan kesalahan ini akan berada di customization.log.

Catatan

Penyesuai file hanya cocok untuk pengunduhan file kecil, < 20MB. Untuk unduhan file yang lebih besar, gunakan skrip atau perintah sebaris, lalu gunakan kode untuk mengunduh file, seperti, Linux wget atau curl, Windows, Invoke-WebRequest. Untuk file yang ada di penyimpanan Azure, pastikan Anda menetapkan identitas dengan izin untuk melihat file tersebut ke VM build dengan mengikuti dokumentasi di sini: Identitas yang Ditetapkan Pengguna untuk VM Build Image Builder. File apa pun yang tidak disimpan di Azure harus dapat diakses secara publik agar Azure Image Builder dapat mengunduhnya.

  • sha256Checksum - buat checksum SHA256 file secara lokal, perbarui nilai checksum menjadi huruf kecil, dan Image Builder akan memvalidasi checksum selama penyebaran templat gambar.

    Untuk membuat sha256Checksum, gunakan cmdlet Get-FileHash di PowerShell.

Alat penyesuaian update Windows

Alat penyesuaian WindowsUpdate dibangun di Penyedia Pembaruan Windows komunitas untuk Packer, yang merupakan proyek sumber terbuka yang dikelola oleh komunitas Packer. Microsoft menguji dan memvalidasi penyedia dengan layanan Image Builder, dan akan mendukung penyelidikan masalah dengannya, dan bekerja untuk mengatasi masalah, tetapi proyek sumber terbuka tidak didukung secara resmi oleh Microsoft. Untuk dokumentasi terperinci tentang dan bantuan dengan Penyedia Pembaruan Windows, lihat repositori proyek.

"customize": [
  {
    "type": "WindowsUpdate",
    "searchCriteria": "IsInstalled=0",
    "filters": [
      "exclude:$_.Title -like '*Preview*'",
      "include:$true"
    ],
    "updateLimit": 20
  }
]

Properti penyesuai:

  • jenis – WindowsUpdate.
  • searchCriteria - Opsional, menentukan jenis pembaruan yang diinstal (seperti Direkomendasikan atau Penting), BrowseOnly=0 dan IsInstalled=0 (Disarankan) adalah default.
  • filter – Opsional, memungkinkan Anda menentukan filter untuk menyertakan atau mengecualikan pembaruan.
  • updateLimit - Opsional, menentukan berapa banyak pembaruan yang dapat dipasang, default 1000.

Catatan

Penyesuai Windows Update bisa gagal jika ada hidupkan ulang Windows yang beredar, atau penginstalan aplikasi masih berjalan, biasanya Anda mungkin melihat galat ini dalam customization.log, System.Runtime.InteropServices.COMException (0x80240016): Exception from HRESULT: 0x80240016. Kami sangat menyarankan Anda mempertimbangkan untuk menambahkan Windows Restart, dan/atau memungkinkan aplikasi cukup waktu untuk menyelesaikan penginstalan mereka menggunakan perintah tidur atau tunggu dalam perintah sebaris atau skrip sebelum menjalankan Windows Update.

Generalisasikan

Secara default, Azure Image Builder juga akan menjalankan kode deprovision di akhir setiap fase kustomisasi gambar, untuk menyamaratakan gambar. Generalisasi adalah proses di mana gambar diatur sehingga dapat digunakan kembali untuk membuat beberapa VM. Untuk Windows VMs, Azure Image Builder menggunakan Sysprep. Untuk Linux, Azure Image Builder menjalankan waagent -deprovision.

Perintah pengguna Image Builder untuk menggeneralisasi mungkin tidak cocok untuk setiap situasi, sehingga Azure Image Builder memungkinkan Anda menyesuaikan perintah ini, jika diperlukan.

Jika Anda memigrasikan kustomisasi yang ada dan menggunakan perintah Sysprep/waagen yang berbeda, Anda dapat menggunakan perintah umum Image Builder, lalu jika pembuatan mesin virtual gagal, gunakan perintah Sysprep atau waagen Anda sendiri.

Jika Azure Image Builder berhasil membuat gambar kustom Windows, dan Anda membuat VM darinya, maka temukan bahwa pembuatan VM gagal atau tidak berhasil diselesaikan, Anda perlu meninjau dokumentasi Windows Server Sysprep atau mengajukan permintaan dukungan dengan tim Dukungan Layanan Pelanggan Windows Server Sysprep, yang dapat memecahkan masalah dan menyarankan penggunaan Sysprep yang benar.

Perintah Sysprep default

Write-Output '>>> Waiting for GA Service (RdAgent) to start ...'
while ((Get-Service RdAgent).Status -ne 'Running') { Start-Sleep -s 5 }
Write-Output '>>> Waiting for GA Service (WindowsAzureTelemetryService) to start ...'
while ((Get-Service WindowsAzureTelemetryService) -and ((Get-Service WindowsAzureTelemetryService).Status -ne 'Running')) { Start-Sleep -s 5 }
Write-Output '>>> Waiting for GA Service (WindowsAzureGuestAgent) to start ...'
while ((Get-Service WindowsAzureGuestAgent).Status -ne 'Running') { Start-Sleep -s 5 }
if( Test-Path $Env:SystemRoot\system32\Sysprep\unattend.xml ) {
  Write-Output '>>> Removing Sysprep\unattend.xml ...'
  Remove-Item $Env:SystemRoot\system32\Sysprep\unattend.xml -Force
}
if (Test-Path $Env:SystemRoot\Panther\unattend.xml) {
  Write-Output '>>> Removing Panther\unattend.xml ...'
  Remove-Item $Env:SystemRoot\Panther\unattend.xml -Force
}
Write-Output '>>> Sysprepping VM ...'
& $Env:SystemRoot\System32\Sysprep\Sysprep.exe /oobe /generalize /quiet /quit
while($true) {
  $imageState = (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State).ImageState
  Write-Output $imageState
  if ($imageState -eq 'IMAGE_STATE_GENERALIZE_RESEAL_TO_OOBE') { break }
  Start-Sleep -s 5
}
Write-Output '>>> Sysprep complete ...'

Perintah deprovision Linux default

WAAGENT=/usr/sbin/waagent
waagent -version 1> /dev/null 2>&1
if [ $? -eq 0 ]; then
  WAAGENT=waagent
fi
$WAAGENT -force -deprovision+user && export HISTSIZE=0 && sync

Mengesampingkan Perintah

Untuk mengganti perintah, gunakan provisioner skrip PowerShell atau Shell untuk membuat file perintah dengan nama file yang tepat, dan memasukkannya ke dalam direktori yang benar:

  • Windows: c:\DeprovisioningScript.ps1
  • Linux: /tmp/DeprovisioningScript.sh

Image Builder membaca perintah ini, perintah ini ditulis ke log AIB, customization.log. Lihat pemecahan masalah tentang cara mengumpulkan log.

Properti: errorHandling

Properti errorHandling ini memungkinkan Anda untuk mengonfigurasi bagaimana kesalahan ditangani selama pembuatan gambar.

{
  "errorHandling": {
    "onCustomizerError": "abort",
    "onValidationError": "cleanup"
  }
}

Properti errorHandling ini memungkinkan Anda untuk mengonfigurasi bagaimana kesalahan ditangani selama pembuatan gambar. Ini memiliki dua properti:

  • onCustomizerError - Menentukan tindakan yang harus diambil ketika kesalahan terjadi selama fase penyesuai pembuatan gambar.
  • onValidationError - Menentukan tindakan yang harus diambil ketika terjadi kesalahan selama validasi templat gambar.

Properti errorHandling ini juga memiliki dua nilai yang mungkin untuk menangani kesalahan selama pembuatan gambar:

  • pembersihan - Memastikan bahwa sumber daya sementara yang dibuat oleh Packer dibersihkan meskipun Packer atau salah satu penyesuaian/validasi mengalami kesalahan. Ini mempertahankan kompatibilitas mundur dengan perilaku yang ada.
  • abort - Jika Packer mengalami kesalahan, layanan Azure Image Builder (AIB) melewati pembersihan sumber daya sementara. Sebagai pemilik templat AIB, Anda bertanggung jawab untuk membersihkan sumber daya ini dari langganan Anda. Sumber daya ini mungkin berisi informasi yang berguna seperti log dan file yang tertinggal dalam VM sementara, yang dapat membantu dalam menyelidiki kesalahan yang dihadapi oleh Packer.

Properti: distribusikan

Azure Image Builder mendukung tiga target distribusi:

  • ManagedImage - Gambar terkelola.
  • sharedImage - Azure Compute Gallery.
  • VHD - VHD dalam akun penyimpanan.

Anda dapat mendistribusikan gambar ke kedua jenis target dalam konfigurasi yang sama.

Catatan

Perintah sysprep AIB default tidak menyertakan "/mode:vm", namun properti ini mungkin diperlukan saat membuat citra yang akan menginstal peran HyperV. Jika Anda perlu menambahkan argumen perintah ini, Anda harus mengganti perintah sysprep.

Karena Anda dapat memiliki lebih dari satu target untuk didistribusikan, Image Builder mempertahankan status untuk setiap target distribusi yang dapat diakses dengan meminta runOutputName. Objek runOutputName yang bisa Anda kuerikan distribusi postingan untuk informasi tentang distribusi tersebut. Misalnya, Anda dapat meminta lokasi VHD, atau wilayah tempat versi gambar direplikasi, atau versi Gambar SIG dibuat. Ini adalah properti dari setiap target distribusi. Yang runOutputName harus unik untuk setiap target distribusi. Berikut adalah contoh untuk mengkueri distribusi Azure Compute Gallery:

subscriptionID=<subcriptionID>
imageResourceGroup=<resourceGroup of image template>
runOutputName=<runOutputName>

az resource show \
  --ids "/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.VirtualMachineImages/imageTemplates/ImageTemplateLinuxRHEL77/runOutputs/$runOutputName"  \
  --api-version=2021-10-01

Output:

{
  "id": "/subscriptions/xxxxxx/resourcegroups/rheltest/providers/Microsoft.VirtualMachineImages/imageTemplates/ImageTemplateLinuxRHEL77/runOutputs/rhel77",
  "identity": null,
  "kind": null,
  "location": null,
  "managedBy": null,
  "name": "rhel77",
  "plan": null,
  "properties": {
    "artifactId": "/subscriptions/xxxxxx/resourceGroups/aibDevOpsImg/providers/Microsoft.Compute/galleries/devOpsSIG/images/rhel/versions/0.24105.52755",
    "provisioningState": "Succeeded"
  },
  "resourceGroup": "rheltest",
  "sku": null,
  "tags": null,
  "type": "Microsoft.VirtualMachineImages/imageTemplates/runOutputs"
}

Distribusi: managedImage

Output gambar adalah sumber daya gambar terkelola.

{
  "type":"ManagedImage",
  "imageId": "<resource ID>",
  "location": "<region>",
  "runOutputName": "<name>",
  "artifactTags": {
      "<name>": "<value>",
      "<name>": "<value>"
  }
}

Mendistribusikan properti:

  • type – ManagedImage
  • imageId – ID Sumber daya dari gambar tujuan, format yang diharapkan: /subscriptions/<subscriptionId>/resourceGroups/<destinationResourceGroupName>/providers/Microsoft.Compute/images/<imageName>
  • lokasi - lokasi gambar yang dikelola.
  • runOutputName – nama unik untuk mengidentifikasi distribusi.
  • artifactTags - Tag nilai\kunci yang ditentukan pengguna opsional.

Catatan

Grup sumber daya tujuan harus ada. Jika Anda ingin gambar didistribusikan ke wilayah yang berbeda, maka akan meningkatkan waktu penyebaran.

Distribusi: sharedImage

Azure Compute Gallery adalah layanan Manajemen Gambar baru yang memungkinkan pengelolaan replikasi wilayah gambar, penerapan versi, dan berbagi gambar kustom. Image Builder Azure mendukung pendistribusian dengan layanan ini, sehingga Anda dapat mendistribusikan gambar ke wilayah yang didukung oleh Azure Compute Gallery.

Azure Compute Gallery terdiri dari:

  • Galeri - Kontainer untuk beberapa citra. Galeri disebarkan dalam satu wilayah.
  • Definisi citra - pengelompokan konseptual untuk citra.
  • Versi citra - jenis citra yang digunakan untuk menyebarkan VM atau set skala. Versi gambar dapat direplikasi ke wilayah lain di mana VM perlu digunakan.

Sebelum dapat mendistribusikan ke galeri, Anda harus membuat galeri dan definisi gambar, lihat Membuat galeri.

Catatan

ID versi gambar harus berbeda atau berbeda dari versi gambar apa pun yang ada di Azure Compute Gallery yang ada.

{
  "type": "SharedImage",
  "galleryImageId": "<resource ID>",
  "runOutputName": "<name>",
  "artifactTags": {
      "<name>": "<value>",
      "<name>": "<value>"
  }
}

JSON berikut adalah contoh cara menggunakan replicationRegions bidang untuk mendistribusikan ke Azure Compute Gallery.

  "replicationRegions": [
      "<region where the gallery is deployed>",
      "<region>"
  ]

Catatan

replicationRegions tidak digunakan lagi untuk distribusi galeri seperti targetRegions properti yang diperbarui. Untuk informasi selengkapnya, lihat targetRegions.

Distribusi: targetRegions

JSON berikut adalah contoh cara menggunakan bidang targetRegions untuk mendistribusikan ke Azure Compute Gallery.

"distribute": [
      {
        "type": "SharedImage",
        "galleryImageId": "<resource ID>",
        "runOutputName": "<name>",
        "artifactTags": {
          "<name>": "<value>",
          "<name>": "<value>"
        },
        "targetRegions": [
             {
              "name": "eastus",
              "replicaCount": 2,
              "storageAccountType": "Standard_ZRS"
             },
             {
              "name": "eastus2",
              "replicaCount": 3,
              "storageAccountType": "Premium_LRS"
             }
          ]
       },
    ]

Distribusikan properti untuk galeri:

  • jenis - sharedImage

  • galleryImageId – ID dari Azure Compute Gallery, properti ini dapat ditentukan dalam dua format:

    • Penerapan versi otomatis - Image Builder menghasilkan nomor versi monotonik untuk Anda, properti ini berguna ketika Anda ingin terus membangun ulang gambar dari templat yang sama: Formatnya adalah: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/galleries/<sharedImageGalleryName>/images/<imageGalleryName>.
    • Penerapan versi eksplisit - Anda dapat meneruskan nomor versi yang Anda inginkan untuk digunakan oleh pembangun gambar. Formatnya adalah: /subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<sharedImageGalName>/images/<imageDefName>/versions/<version - for example: 1.1.1>
  • runOutputName – nama unik untuk mengidentifikasi distribusi.

  • artifactTags - Tag nilai\kunci yang ditentukan pengguna opsional.

  • replicationRegions - array wilayah untuk replikasi. Salah satu wilayah harus menjadi wilayah tempat Galeri disebarkan. Menambahkan wilayah berarti peningkatan waktu build, karena build tidak selesai sampai replikasi selesai. Bidang ini tidak digunakan lagi pada API versi 2022-07-01, silakan gunakan targetRegions saat mendistribusikan jenis "SharedImage".

  • targetRegions - array wilayah untuk replikasi. Ini baru diperkenalkan sebagai bagian dari API 2022-07-01 dan hanya berlaku untuk SharedImage jenis distribusi.

  • excludeFromLatest (opsional) - memungkinkan Anda menandai versi citra yang Anda buat agar tidak digunakan sebagai versi terbaru di definisi galeri, default-nya adalah 'false'.

  • storageAccountType (opsional) - AIB mendukung menentukan jenis-jenis penyimpanan ini untuk versi citra yang akan dibuat:

    • "Standar_LRS"
    • "Standard_ZRS","

Catatan

Jika templat citra dan image definition yang direferensikan tidak berada di lokasi yang sama, waktu untuk membuat citra akan bertambah. Image Builder saat ini tidak memiliki parameter location untuk sumber daya versi gambar, kami mengambilnya dari induknya image definition. Misalnya, jika definisi citra berada di westus dan Anda ingin versi citra direplikasi ke eastus, blob akan disalin ke westus, sumber daya versi citra di westus akan dibuat, lalu direplikasi ke eastus. Untuk menghindari waktu replikasi tambahan, pastikan templat image definition dan gambar berada di lokasi yang sama.

Penerapan versi

Properti penerapan versi hanya untuk sharedImage jenis distribusi. Ini adalah enum dengan dua nilai yang mungkin:

  • terbaru - Skema baru yang meningkat secara ketat per desain
  • source - Skema berdasarkan nomor versi gambar sumber.

Skema penomoran versi default adalah latest. Skema terbaru memiliki properti tambahan, "utama" yang menentukan versi utama untuk menghasilkan versi terbaru.

Catatan

Logika pembuatan versi yang ada untuk sharedImage distribusi tidak digunakan lagi. Dua opsi baru disediakan: meningkatkan versi yang selalu merupakan versi terbaru secara monoton di galeri, dan versi yang dihasilkan berdasarkan nomor versi gambar sumber. Enum yang menentukan skema pembuatan versi memungkinkan ekspansi di masa depan dengan skema pembuatan versi tambahan.

    "distribute": [
        "versioning": {
            "scheme": "Latest",
            "major": 1
        }
    ]

properti penerapan versi:

  • skema - Hasilkan nomor versi baru untuk distribusi. Latest atau Source adalah dua nilai yang mungkin.
  • major - Menentukan versi utama untuk menghasilkan versi terbaru. Hanya berlaku ketika scheme diatur ke Latest. Misalnya, di galeri dengan versi berikut yang diterbitkan: 0.1.1, 0.1.2, 1.0.0, 1.0.1, 1.1.0, 1.1.1, 1.2.0, 2.0.0, 2.0.1, 2.1.0
    • Dengan tidak diatur utama atau diatur utama ke 2, Latest Skema menghasilkan versi 2.1.1
    • Dengan set utama ke 1, skema Terbaru menghasilkan versi 1.2.1
    • Dengan set utama ke 0, skema Terbaru menghasilkan versi 0.1.3

Distribusikan: VHD

Anda dapat keluaran ke VHD. Anda kemudian dapat menyalin VHD, dan menggunakannya untuk menerbitkan ke Azure MarketPlace, atau menggunakan dengan Azure Stack.

{
  "type": "VHD",
  "runOutputName": "<VHD name>",
  "artifactTags": {
      "<name>": "<value>",
      "<name>": "<value>"
  }
}

Dukungan OS: Windows dan Linux

Mendistribusikan parameter VHD:

  • jenis - VHD.
  • runOutputName – nama unik untuk mengidentifikasi distribusi.
  • tag - Tag pasangan nilai kunci opsional yang ditentukan pengguna.

Azure Image Builder tidak mengizinkan pengguna untuk menentukan lokasi akun penyimpanan, tetapi Anda dapat mengkueri status runOutputs untuk mendapatkan lokasi.

az resource show \
  --ids "/subscriptions/$subscriptionId/resourcegroups/<imageResourceGroup>/providers/Microsoft.VirtualMachineImages/imageTemplates/<imageTemplateName>/runOutputs/<runOutputName>"  | grep artifactUri

Catatan

Setelah VHD dibuat, salin ke lokasi yang berbeda, sesegera mungkin. VHD disimpan dalam akun penyimpanan di grup sumber daya sementara yang dibuat saat templat gambar dikirimkan ke layanan Azure Image Builder. Jika Anda menghapus templat citra, Anda akan kehilangan VHD.

JSON berikut mendistribusikan gambar sebagai VHD ke akun penyimpanan kustom.

"distribute": [
  {
    "type": "VHD",
    "runOutputName": "<VHD name>",
    "artifactTags": {
        "<name>": "<value>",
        "<name>": "<value>"
    },
    "uri": "<replace with Azure storage URI>"
  }
]

Properti distribusi VHD:

uri - URI Azure Storage opsional untuk blob VHD terdistribusi. Hilangkan untuk menggunakan default (string kosong) dalam hal ini VHD akan diterbitkan ke akun penyimpanan di grup sumber daya penahapan.

Properti: optimalkan

optimize Properti dapat diaktifkan saat membuat gambar VM dan memungkinkan pengoptimalan VM untuk meningkatkan waktu pembuatan gambar.

"optimize": {
      "vmboot": {
        "state": "Enabled"
      }
    }
  • vmboot: Konfigurasi yang terkait dengan proses booting komputer virtual (VM), digunakan untuk mengontrol pengoptimalan yang dapat meningkatkan waktu boot atau aspek performa lainnya.
  • status: Status fitur pengoptimalan boot dalam vmboot, dengan nilai Enabled yang menunjukkan bahwa fitur diaktifkan untuk meningkatkan waktu pembuatan gambar.

Untuk mempelajari selengkapnya, lihat Pengoptimalan VM untuk gambar galeri dengan Azure VM Image Builder.

Properti: sumber

Bagian source ini berisi informasi tentang gambar sumber yang akan digunakan oleh Image Builder. Azure Image Builder hanya mendukung gambar umum sebagai gambar sumber, gambar khusus tidak didukung saat ini.

API memerlukan SourceType yang menentukan sumber untuk build gambar, saat ini ada tiga jenis:

  • PlatformImage - menunjukkan gambar sumber adalah gambar Marketplace.
  • ManagedImage - digunakan saat memulai cari citra terkelola reguler.
  • SharedImageVersion - digunakan saat Anda menggunakan versi citra di Azure Compute Gallery sebagai sumber.

Catatan

Saat menggunakan citra kustom Windows yang ada, Anda dapat menjalankan perintah Sysprep hingga tiga kali pada satu citra Windows 7 atau Windows Server 2008 R2, atau 1001 kali pada satu citra Windows untuk versi yang lebih baru; untuk informasi selengkapnya, lihat dokumentasi sysprep.

Sumber PlatformImage

Azure Image Builder mendukung Windows Server dan klien, dan gambar Marketplace Azure Linux, lihat Mempelajari tentang Azure Image Builder untuk daftar lengkapnya.

"source": {
  "type": "PlatformImage",
  "publisher": "Canonical",
  "offer": "UbuntuServer",
  "sku": "18.04-LTS",
  "version": "latest"
}

Properti di sini sama yang digunakan untuk membuat VM, menggunakan AZ CLI, jalankan di bawah ini untuk mendapatkan properti:

az vm image list -l westus -f UbuntuServer -p Canonical --output table --all

Anda dapat menggunakan latest dalam versi, versi dievaluasi saat proses build gambar berlangsung, bukan saat templat dikirimkan. Jika menggunakan fungsionalitas ini dengan tujuan Azure Compute Gallery, Anda dapat menghindari pengiriman ulang templat, dan menjalankan ulang build gambar secara berkala, sehingga gambar Anda dibuat ulang dari gambar terbaru.

Dukungan untuk informasi paket marketplace

Anda juga dapat menentukan informasi paket, misalnya:

"source": {
  "type": "PlatformImage",
  "publisher": "RedHat",
  "offer": "rhel-byos",
  "sku": "rhel-lvm75",
  "version": "latest",
  "planInfo": {
    "planName": "rhel-lvm75",
    "planProduct": "rhel-byos",
    "planPublisher": "redhat"
  }
}

Sumber ManagedImage

Mengatur gambar sumber sebagai gambar terkelola yang sudah ada dari VHD atau VM umum.

Catatan

Gambar terkelola sumber harus dari OS yang didukung dan gambar harus berada di langganan dan wilayah yang sama dengan templat Azure Image Builder Anda.

"source": {
  "type": "ManagedImage",
  "imageId": "/subscriptions/<subscriptionId>/resourceGroups/{destinationResourceGroupName}/providers/Microsoft.Compute/images/<imageName>"
}

imageIdSeharusnya menjadi ResourceId dari gambar yang dikelola. Gunakan az image list untuk mencantumkan gambar yang tersedia.

Sumber SharedImageVersion

Mengatur gambar sumber sebagai versi gambar yang sudah ada di Azure Compute Gallery.

Catatan

Versi gambar bersama sumber harus dari OS yang didukung dan versi gambar harus berada di wilayah yang sama dengan templat Azure Image Builder Anda, jika tidak, replikasi versi gambar ke wilayah Templat Image Builder.

"source": {
  "type": "SharedImageVersion",
  "imageVersionID": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Compute/galleries/<sharedImageGalleryName>/images/<imageDefinitionName/versions/<imageVersion>"
}
  • imageVersionId - ID sumber daya templat ARM dari versi gambar. Ketika nama versi gambar adalah 'terbaru', versi dievaluasi saat build gambar berlangsung. imageVersionId harus menjadi ResourceId versi gambar. Gunakan daftar versi gambar az sig untuk mencantumkan versi gambar.

JSON berikut mengatur gambar sumber sebagai gambar yang disimpan di Galeri Bersama Langsung.

Catatan

Direct Shared Gallery saat ini dalam ketersediaan pratinjau.

    source: {
      "type": "SharedImageVersion",
      "imageVersionId": "<replace with resourceId of the image stored in the Direct Shared Gallery>"
    },

JSON berikut mengatur gambar sumber sebagai versi gambar terbaru untuk gambar yang disimpan di Azure Compute Gallery.

"properties": {
    "source": {
        "type": "SharedImageVersion",
        "imageVersionId": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/galleries/<azureComputeGalleryName>/images/<imageDefinitionName>/versions/latest"
    }
},

Properti SharedImageVersion:

imageVersionId - ID sumber daya templat ARM dari versi gambar. Ketika nama versi gambar adalah 'terbaru', versi dievaluasi saat build gambar berlangsung.

Properti: stagingResourceGroup

Properti stagingResourceGroup berisi informasi tentang grup sumber daya penahapan yang dibuat layanan Image Builder untuk digunakan selama proses build gambar. stagingResourceGroup adalah properti opsional bagi siapa saja yang menginginkan kontrol lebih besar atas grup sumber daya yang dibuat oleh Image Builder selama proses pembuatan citra. Anda dapat membuat grup sumber daya Anda sendiri dan menentukannya di bagian stagingResourceGroup atau meminta Image Builder membuatnya atas nama Anda.

Penting

Grup sumber daya penahapan yang ditentukan tidak dapat dikaitkan dengan templat gambar lain, harus kosong (tidak ada sumber daya di dalam), di wilayah yang sama dengan templat gambar, dan memiliki RBAC "Kontributor" atau "Pemilik" yang diterapkan ke identitas yang ditetapkan ke sumber daya templat gambar Azure Image Builder.

"properties": {
  "stagingResourceGroup": "/subscriptions/<subscriptionID>/resourceGroups/<stagingResourceGroupName>"
}

Skenario pembuatan templat

  • Properti The stagingResourceGroup dibiarkan kosong

    stagingResourceGroup Jika properti tidak ditentukan atau ditentukan dengan string kosong, layanan Image Builder membuat grup sumber daya penahapan dengan konvensi nama default "IT_***". Grup sumber daya penahapan memiliki tag default yang diterapkan padanya: createdBy, , imageTemplateNameimageTemplateResourceGroupName. Selain itu, RBAC default diterapkan ke identitas yang ditetapkan ke sumber daya templat Azure Image Builder, yaitu "Kontributor".

  • Properti The stagingResourceGroup ditentukan dengan grup sumber daya yang ada

    stagingResourceGroup Jika properti ditentukan dengan grup sumber daya yang memang ada, maka layanan Image Builder memeriksa untuk memastikan grup sumber daya tidak terkait dengan templat gambar lain, kosong (tidak ada sumber daya di dalam), di wilayah yang sama dengan templat gambar, dan memiliki RBAC "Kontributor" atau "Pemilik" yang diterapkan ke identitas yang ditetapkan ke sumber daya templat gambar Azure Image Builder. Jika salah satu persyaratan yang disebutkan di atas tidak terpenuhi, kesalahan akan muncul. Grup sumber daya penahapan memiliki tag berikut yang ditambahkan ke dalamnya: usedBy, , imageTemplateNameimageTemplateResourceGroupName. Tag yang sudah ada sebelumnya tidak dihapus.

Penting

Anda harus menetapkan peran kontributor ke grup sumber daya untuk perwakilan layanan yang sesuai dengan aplikasi pihak pertama Azure Image Builder saat mencoba menentukan grup sumber daya dan VNet yang sudah ada sebelumnya ke layanan Azure Image Builder dengan gambar sumber Windows. Untuk perintah CLI dan instruksi portal tentang cara menetapkan peran kontributor ke grup sumber daya, lihat dokumentasi berikut Memecahkan Masalah VM Azure Image Builder: Kesalahan otorisasi membuat disk

  • Properti stagingResourceGroup ditentukan dengan grup sumber daya yang tidak ada

    stagingResourceGroup Jika properti ditentukan dengan grup sumber daya yang tidak ada, maka layanan Image Builder membuat grup sumber daya penahapan dengan nama yang disediakan di stagingResourceGroup properti . Akan terjadi kesalahan jika nama yang diberikan tidak memenuhi persyaratan penamaan Azure untuk grup sumber daya. Grup sumber daya penahapan memiliki tag default yang diterapkan padanya: createdBy, , imageTemplateNameimageTemplateResourceGroupName. Secara default identitas yang ditetapkan ke sumber daya templat gambar Azure Image Builder memiliki RBAC "Kontributor" yang diterapkan di grup sumber daya.

Penghapusan templat

Setiap grup sumber daya penahapan yang dibuat oleh layanan Image Builder akan dihapus setelah templat gambar dihapus. Penghapusan mencakup grup sumber daya penahapan yang ditentukan di properti stagingResourceGroup, tetapi tidak ada sebelum pembangunan citra.

Jika Image Builder tidak membuat grup sumber daya penahapan, tetapi membuat sumber daya di dalam grup sumber daya, sumber daya tersebut akan dihapus setelah templat citra dihapus, selama layanan Image Builder memiliki izin atau peran yang sesuai yang diperlukan untuk menghapus sumber daya.

Properti: validasi

Anda dapat menggunakan properti validate untuk memvalidasi gambar platform dan gambar yang disesuaikan apa pun yang Anda buat, terlepas dari apakah Anda menggunakan Azure Image Builder untuk membuatnya.

Image Builder mendukung mode 'Source-Validation-Only' yang dapat diatur menggunakan properti sourceValidationOnly. Jika properti sourceValidationOnly diatur ke true, citra yang ditentukan di bagian source akan langsung tervalidasi. Tidak ada build terpisah yang akan dijalankan untuk menghasilkan dan kemudian memvalidasi gambar yang disesuaikan.

Properti inVMValidations mengambil daftar validator yang akan dilakukan pada citra. Azure Image Builder mendukung validator File, PowerShell, dan Shell.

Properti continueDistributeOnFailure bertanggung jawab atas apakah citra output akan didistribusikan jika validasi gagal. Secara default, jika validasi gagal dan properti ini diatur ke false, citra output tidak akan didistribusikan. Jika validasi gagal dan bidang ini diatur menjadi true, gambar output masih akan didistribusikan. Gunakan opsi ini dengan hati-hati karena dapat mengakibatkan gambar gagal didistribusikan untuk digunakan. Pada kasus apa pun (true atau false), eksekusi citra menyeluruh akan dilaporkan gagal jika validasi gagal. Properti ini tidak memengaruhi keberhasilan validasi.

Ketika menggunakan validate :

  • Anda dapat menggunakan beberapa validator.
  • Validator mengeksekusi dalam urutan yang ditentukan dalam templat.
  • Jika salah satu validator gagal, maka seluruh komponen validasi akan gagal dan melaporkan kembali kesalahan.
  • Sebaiknya uji skrip secara menyeluruh sebelum menggunakannya dalam templat. Men-debug skrip pada VM Anda sendiri akan lebih mudah.
  • Jangan memasukkan data sensitif ke dalam skrip.
  • Lokasi skrip harus dapat diakses secara publik, kecuali Anda menggunakan MSI.

Cara menggunakan properti validate untuk memvalidasi citra Windows:

{
   "properties":{
      "validate":{
         "continueDistributeOnFailure":false,
         "sourceValidationOnly":false,
         "inVMValidations":[
            {
               "type":"File",
               "destination":"string",
               "sha256Checksum":"string",
               "sourceUri":"string"
            },
            {
               "type":"PowerShell",
               "name":"test PowerShell validator inline",
               "inline":[
                  "<command to run inline>"
               ],
               "validExitCodes":"<exit code>",
               "runElevated":"<true or false>",
               "runAsSystem":"<true or false>"
            },
            {
               "type":"PowerShell",
               "name":"<name>",
               "scriptUri":"<path to script>",
               "runElevated":"<true false>",
               "sha256Checksum":"<sha256 checksum>"
            }
         ]
      }
   }
}

properti inVMValidations:

  • jenis – PowerShell.

  • name - nama validator

  • scriptUri - URI file skrip PowerShell.

  • inline – larik perintah yang akan dijalankan, dipisahkan dengan koma.

  • validExitCodes – Kode opsional dan valid yang dapat dikembalikan dari perintah skrip/sebaris, ini menghindari kegagalan perintah skrip/sebaris yang dilaporkan.

  • runElevated – Opsional, boolean, dukungan untuk menjalankan perintah dan skrip dengan izin yang ditinggikan.

  • sha256Checksum - Nilai checksum file sha256, Anda menghasilkan ini secara lokal, dan kemudian Image Builder akan checksum dan memvalidasi.

    Untuk menghasilkan sha256Checksum, menggunakan PowerShell pada Windows Get-Hash

Cara menggunakan properti validate untuk memvalidasi citra Linux:

{
  "properties": {
    "validate": {
      "continueDistributeOnFailure": false,
      "sourceValidationOnly": false,
      "inVMValidations": [
        {
          "type": "Shell",
          "name": "<name>",
          "inline": [
            "<command to run inline>"
          ]
        },
        {
          "type": "Shell",
          "name": "<name>",
          "scriptUri": "<path to script>",
          "sha256Checksum": "<sha256 checksum>"
        },
        {
          "type": "File",
          "destination": "string",
          "sha256Checksum": "string",
          "sourceUri": "string"
        }
      ]
    }
  }
}

properti inVMValidations:

  • type – Shell atau File yang ditentukan sebagai jenis validasi yang akan dilakukan.

  • name - nama validator

  • scriptUri - URI file skrip

  • inline - larik perintah yang akan dijalankan, dipisahkan dengan koma.

  • sha256Checksum - Nilai checksum file sha256, Anda menghasilkan ini secara lokal, dan kemudian Image Builder akan checksum dan memvalidasi.

    Untuk menghasilkan sha256Checksum, menggunakan terminal yang dijalankan Mac/Linux : sha256sum <fileName>

  • tujuan - Tujuan file.

  • sha256Checksum - Menentukan checksum SHA256 file.

  • sourceUri - URI sumber file.

Properti: vmProfile

vmSize (opsional)

Image Builder menggunakan ukuran SKU default Standard_D1_v2 untuk citra Gen1 dan Standard_D2ds_v4 untuk citra Gen2. Generasi ditentukan oleh gambar yang Anda tentukan di source. Anda dapat mengambil alih vmSize untuk alasan berikut:

  • Melakukan kustomisasi yang memerlukan peningkatan memori, CPU, dan penanganan file besar (GB).
  • Menjalankan build Windows, Anda harus menggunakan "Standard_D2_v2" atau ukuran VM yang setara.
  • Perlu isolasi VM.
  • Menyesuaikan gambar yang memerlukan perangkat keras tertentu. Misalnya, untuk mesin virtual GPU, Anda memerlukan ukuran mesin virtual GPU.
  • Memerlukan enkripsi ujung ke ujung di sisa VM build, Anda perlu menentukan ukuran VM build dukungan yang tidak menggunakan disk sementara lokal.

osDiskSizeGB

Secara default, Image Builder tidak akan mengubah ukuran citra, Image Builder menggunakan ukuran dari citra sumber. Secara opsional, Anda bisa hanya meningkatkan ukuran Disk OS (Windows dan Linux), dan nilai 0 berarti menggunakan ukuran yang sama dengan citra sumber. Anda tidak dapat mengurangi ukuran Disk OS ke ukuran yang lebih kecil dari citra sumber.

{
  "osDiskSizeGB": 100
}

vnetConfig (opsional)

Jika Anda tidak menentukan properti VNet apa pun, Image Builder membuat VNet, IP Publik, dan grup keamanan jaringan (NSG) sendiri. IP Publik digunakan layanan untuk berkomunikasi dengan VM build. Jika Anda tidak ingin memiliki IP Publik atau Anda ingin Image Builder memiliki akses ke sumber daya VNet yang sudah ada, seperti server konfigurasi (DSC, Chef, Puppet, Ansible), berbagi file, Anda akan dapat menentukan VNet. Untuk mengetahui informasi selengkapnya, tinjau dokumentasi jaringan.

"vnetConfig": {
  "subnetId": "/subscriptions/<subscriptionID>/resourceGroups/<vnetRgName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/<subnetName>"
}

Operasi Templat Gambar

Memulai Build Gambar

Untuk memulai build, Anda perlu memanggil 'Jalankan' pada sumber daya Templat Gambar, run contoh perintah:

Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2021-10-01" -Action Run -Force
az resource invoke-action \
  --resource-group $imageResourceGroup \
  --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
  -n helloImageTemplateLinux01 \
  --action Run

Membatalkan Image Build

Jika Anda menjalankan build gambar yang Menurut Anda salah, menunggu input pengguna, atau Anda merasa tidak akan pernah berhasil menyelesaikannya, maka Anda dapat membatalkan build.

Build dapat dibatalkan kapan saja. Jika fase distribusi telah dimulai, Anda masih dapat membatalkan, tetapi Anda perlu membersihkan gambar apa pun yang mungkin tidak selesai. Perintah batal tidak menunggu pembatalan selesai, pantau lastrunstatus.runstate untuk kemajuan pembatalan, menggunakan perintah status ini.

Contoh cancel perintah:

Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2021-10-01" -Action Cancel -Force
az resource invoke-action \
  --resource-group $imageResourceGroup \
  --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
  -n helloImageTemplateLinux01 \
  --action Cancel

Langkah berikutnya

Ada contoh file .json untuk skenario yang berbeda di Azure Image Builder GitHub.