Artikel ini menjelaskan struktur templat Azure Resource Manager (templat ARM). Isi artikel menyajikan berbagai bagian templat dan properti yang tersedia di bagian tersebut.
Bicep adalah bahasa baru yang menawarkan kemampuan yang sama seperti templat ARM tetapi dengan sintaks yang lebih mudah digunakan. Jika Anda mempertimbangkan infrastruktur sebagai opsi kode, kami rekomendasikan untuk memeriksa Bicep.
Lokasi file skema JavaScript Object Notation (JSON) yang menjelaskan versi bahasa templat. Nomor versi yang Anda gunakan bergantung pada cakupan penyebaran dan editor JSON Anda.
Editor lain (termasuk Visual Studio) mungkin tidak dapat memproses skema ini. Untuk editor tersebut, gunakan: https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#
Untuk penyebaran langganan, gunakan: https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#
Untuk penyebaran grup manajemen, gunakan: https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#
Untuk penyebaran penyewa, gunakan: https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
languageVersion
No
Versi bahasa templat. Untuk melihat penyempurnaan languageVersion 2.0, lihat languageVersion 2.0.
contentVersion
Ya
Versi templat (seperti 1.0.0.0). Anda dapat memberikan nilai apa pun untuk elemen ini. Gunakan nilai tersebut untuk mendokumentasikan perubahan signifikan dalam templat Anda. Saat menyebarkan sumber daya menggunakan templat, nilai tersebut dapat digunakan untuk memastikan bahwa templat yang tepat sedang digunakan.
apiProfile
No
Versi API yang berfungsi sebagai kumpulan versi API untuk jenis sumber daya. Gunakan nilai tersebut untuk menghindari keharusan menentukan versi API untuk setiap sumber daya di dalam templat. Saat Anda menentukan versi profil API dan tidak menentukan versi API untuk jenis sumber daya, Resource Manager menggunakan versi API untuk jenis sumber daya yang ditentukan dalam profil.
Properti profil API sangat membantu saat menyebarkan templat ke lingkungan yang berbeda, seperti Azure Stack dan Azure global. Gunakan versi profil API untuk memastikan templat Anda secara otomatis menggunakan versi yang didukung di kedua lingkungan. Untuk daftar versi profil API saat ini dan versi API sumber daya yang ditentukan pada profil, lihat Profil API.
Setiap elemen memiliki properti yang dapat Anda tetapkan. Artikel ini menjelaskan bagian templat secara terperinci.
Definisi
Di bagian definitions templat, tentukan skema yang digunakan untuk memvalidasi nilai array dan objek. Definitions hanya dapat digunakan dengan languageVersion 2.0.
Nama definisi jenis. Harus menjadi pengidentifikasi JavaScript yang valid.
jenis
Ya
Jenis definisi jenis. Jenis dan nilai yang diizinkan adalah string, securestring,int, bool,object,secureObject, dan array. Lihat Jenis data dalam templat ARM.
allowedValues
No
Array nilai yang diizinkan untuk definisi jenis untuk memastikan bahwa nilai yang tepat disediakan.
minValue
No
Nilai minimum untuk definisi jenis int, nilai ini inklusif.
maxValue
No
Nilai maksimum untuk definisi jenis int, nilai ini inklusif.
minLength
No
Panjang minimum untuk string, string aman, dan definisi jenis array, nilai ini inklusif.
maxLength
No
Panjang maksimum untuk string, string aman, dan definisi jenis array, nilai ini inklusif.
prefixItems
No
Skema untuk memvalidasi elemen array pada indeks yang sama.
item
No
Skema yang diterapkan ke semua elemen array yang indeksnya lebih besar dari indeks prefixItems terbesar batasan, atau boolean untuk mengontrol elemen array yang indeksnya lebih besar dari indeks terbesar batasan prefixItems .
properti
No
Skema untuk memvalidasi objek.
additionalProperties
No
Skema yang diterapkan ke semua properti yang tidak disebutkan dalam properties batasan, atau boolean untuk menerima properti apa pun yang tidak ditentukan dalam properties batasan.
diskriminator
No
Skema yang akan diterapkan berdasarkan properti diskriminator.
nullable
No
Boolean yang menunjukkan bahwa nilai mungkin null atau dihilangkan.
description
No
Deskripsi definisi jenis yang ditampilkan kepada pengguna melalui portal. Untuk informasi selengkapnya, lihat Komentar di dalam templat.
Di Bicep, lihat Jenis data yang ditentukan pengguna.
Parameter
Di bagian parameters templat, Anda menentukan nilai mana yang dapat Anda masukkan saat menyebarkan sumber daya. Anda dibatasi hingga 256 parameter dalam templat. Anda dapat mengurangi jumlah parameter dengan menggunakan objek yang berisi beberapa properti.
Nama parameter. Harus menjadi pengidentifikasi JavaScript yang valid.
jenis
Ya
Jenis nilai parameter. Jenis dan nilai yang diizinkan adalah string, securestring,int, bool,object,secureObject, dan array. Lihat Jenis data dalam templat ARM.
defaultValue
No
Nilai default untuk parameter, jika tidak ada nilai yang diberikan untuk parameter.
allowedValues
No
Larik nilai yang diizinkan untuk parameter guna memastikan bahwa nilai yang benar diberikan.
minValue
No
Nilai minimum untuk parameter jenis int termasuk nilai inklusif.
maxValue
No
Nilai maksimum untuk parameter jenis int termasuk nilai inklusif.
minLength
No
Panjang minimum untuk string, string aman, dan parameter tipe larik termasuk nilai inklusif.
maxLength
No
Panjang maksimum untuk string, string aman, dan parameter tipe larik termasuk nilai inklusif.
prefixItems
No
Definisi jenis untuk memvalidasi elemen array pada indeks yang sama. prefixItems hanya didukung dalam languageVersion 2.0.
item
No
Skema yang diterapkan ke semua elemen array yang indeksnya lebih besar dari indeks prefixItems terbesar batasan, atau boolean untuk mengontrol elemen array yang indeksnya lebih besar dari indeks terbesar batasan prefixItems . items hanya didukung dalam languageVersion 2.0.
properti
No
Skema untuk memvalidasi objek. properties hanya didukung dalam languageVersion 2.0.
additionalProperties
No
Skema yang diterapkan ke semua properti yang tidak disebutkan dalam properties batasan, atau boolean untuk menerima properti apa pun yang tidak ditentukan dalam properties batasan. additionalProperties hanya didukung dalam languageVersion 2.0.
diskriminator
No
Skema yang akan diterapkan berdasarkan properti diskriminator. discriminator hanya didukung dalam languageVersion 2.0.
nullable
No
Boolean yang menunjukkan bahwa nilai mungkin null atau dihilangkan. nullable hanya didukung dalam languageVersion 2.0.
description
No
Deskripsi parameter yang ditampilkan kepada pengguna melalui portal. Untuk informasi selengkapnya, lihat Komentar di dalam templat.
Di bagian variables ini, Anda membuat nilai yang dapat digunakan di seluruh templat Anda. Anda tidak perlu menentukan variabel, tetapi templat Anda sering disederhanakan dengan cara mengurangi ekspresi kompleks. Format setiap variabel sesuai dengan salah satu jenis data. Anda dibatasi hingga 256 variabel dalam templat.
Contoh berikut menunjukkan pilihan yang tersedia untuk menentukan variabel:
Dalam templat Anda, Anda dapat membuat fungsi Anda sendiri. Fungsi-fungsi ini tersedia untuk digunakan dalam templat Anda. Biasanya, Anda menentukan ekspresi rumit yang tidak ingin Anda ulangi di seluruh templat Anda. Anda membuat fungsi yang ditentukan pengguna dari ekspresi dan fungsi yang didukung dalam templat.
Saat mendefinisikan fungsi pengguna, ada beberapa batasan:
Fungsi tidak dapat mengakses variabel.
Fungsi tersebut hanya dapat menggunakan parameter yang ditentukan dalam fungsi. Saat Anda menggunakan fungsi parameter dalam fungsi yang ditentukan pengguna, Anda dibatasi pada parameter untuk fungsi tersebut.
Fungsi ini tidak dapat memanggil fungsi lain yang ditentukan pengguna.
Namespace untuk fungsi kustom. Gunakan untuk menghindari konflik penamaan dengan fungsi templat.
nama fungsi
Ya
Nama fungsi kustom. Saat memanggil fungsi, gabungkan nama fungsi dengan namespace. Misalnya, untuk memanggil fungsi bernama uniqueName di dalam contoso namespace, gunakan "[contoso.uniqueName()]".
nama parameter
No
Nama parameter yang akan digunakan dalam fungsi kustom.
parameter-value
No
Jenis nilai parameter. Jenis dan nilai yang diizinkan adalah string, securestring,int, bool,object,secureObject, dan array.
jenis output
Ya
Jenis nilai output. Nilai output mendukung jenis yang sama dengan parameter input fungsi.
nilai output
Ya
Ekspresi bahasa templat yang dievaluasi dan dikembalikan dari fungsi.
Nilai Boolean yang menunjukkan apakah sumber daya disediakan selama penyebaran ini. Ketika true, sumber daya dibuat selama penyebaran. Ketika false, sumber daya dilewati untuk penyebaran ini. Lihat kondisi.
jenis
Ya
Jenis sumber daya. Nilai ini adalah kombinasi dari namespace penyedia sumber daya dan jenis sumber daya (seperti Microsoft.Storage/storageAccounts). Untuk menentukan nilai yang tersedia, lihat referensi templat. Untuk sumber daya anak, format jenisnya bedalam sumber daya induk atau ditentukan di luar sumber daya induk. Lihat Pengaturan nama dan jenis untuk sumber daya anak.
apiVersion
Ya
Versi REST API yang digunakan untuk membuat sumber daya. Saat membuat templat baru, atur nilai ke versi terbaru dari sumber daya yang Anda terapkan. Selama templat berfungsi sesuai kebutuhan, tetap gunakan versi API yang sama. Saat Anda tetap menggunakan versi API yang sama, Anda dapat meminimalkan risiko versi API baru yang mengubah cara kerja templat Anda. Pertimbangkan untuk memperbarui versi API hanya saat Anda ingin menggunakan fitur baru yang diperkenalkan dalam versi terbaru tersebut. Untuk menentukan nilai yang tersedia, lihat referensi templat.
nama
Ya
Nama sumber daya. Nama harus mengikuti batasan komponen URI yang ditentukan di RFC3986. Layanan Azure yang mengekspos nama sumber daya ke pihak luar memvalidasi nama tersebut untuk memastikan itu bukan upaya untuk memalsukan identitas lain. Untuk sumber daya anak, format nama bergantung pada apakah itu berlapis di dalam sumber daya induk atau ditentukan di luar sumber daya induk. Lihat Pengaturan nama dan jenis untuk sumber daya anak.
komentar
No
Catatan Anda untuk mendokumentasikan sumber daya di templat Anda. Untuk informasi selengkapnya, lihat Komentar di dalam templat.
lokasi
Bervariasi
Lokasi geografis yang didukung dari sumber daya yang tersedia. Anda dapat memilih salah satu lokasi yang tersedia, umumnya lebih diutamakan memilih lokasi yang dekat dengan pengguna Anda. Anda juga dapat menempatkan sumber daya yang berinteraksi satu sama lain di wilayah yang sama. Sebagian besar jenis sumber daya memerlukan lokasi, tetapi beberapa jenis (seperti penetapan peran) tidak memerlukan lokasi. Lihat Mengatur lokasi sumber daya.
dependsOn
No
Sumber daya yang harus digunakan sebelum sumber daya ini disebarkan. Resource Manager mengevaluasi dependensi antar sumber daya dan menyebarkannya dalam urutan yang benar. Ketika sumber daya tidak bergantung satu sama lain, sumber daya diterapkan secara paralel. Nilainya dapat berupa daftar nama sumber daya atau pengenal unik sumber daya yang dipisahkan dengan koma. Hanya daftar sumber daya yang disebarkan dalam templat ini. Sumber daya yang tidak ditentukan dalam templat ini harus sudah ada. Hindari menambahkan dependensi yang tidak perlu karena dapat memperlambat penyebaran Anda dan membuat dependensi melingkar. Untuk panduan pengaturan dependensi, lihat Menentukan urutan untuk penyebaran sumber daya di templat ARM.
tag
No
Tag yang terkait dengan sumber daya. Terapkan tag untuk mengatur sumber daya secara logis di seluruh langganan Anda.
Beberapa sumber daya mengizinkan penyebaran nilai yang menentukan SKU. Misalnya, Anda dapat menentukan jenis redundansi untuk akun penyimpanan.
jenis
No
Beberapa sumber daya mengizinkan nilai yang menentukan jenis sumber daya yang Anda terapkan. Misalnya, Anda dapat menentukan jenis instans Azure Cosmos DB yang akan dibuat.
Jika memerlukan lebih dari satu instans, jumlah sumber daya yang akan dibuat. Mode default bersifat paralel. Tentukan mode serial saat Anda tidak ingin semua atau sumber daya disebarkan secara bersamaan. Untuk informasi selengkapnya, lihat Membuat beberapa instan sumber daya di Azure Resource Manager.
rencana
No
Beberapa sumber daya mengizinkan nilai yang menentukan rencana untuk disebarkan. Misalnya, Anda dapat menentukan gambar marketplace untuk komputer virtual.
properti
No
Pengaturan konfigurasi khusus sumber daya. Nilai untuk properti sama dengan nilai yang Anda berikan di dalam isi permintaan untuk operasi REST API (metode PUT) untuk membuat sumber daya. Anda juga dapat menentukan array salinan untuk membuat beberapa instans properti. Untuk menentukan nilai yang tersedia, lihat referensi templat.
sumber daya
No
Sumber daya anak yang bergantung pada sumber daya yang ditentukan. Cukup sediakan jenis sumber daya yang diizinkan oleh skema sumber daya induk. Dependensi pada sumber daya induk tidak tersirat. Anda harus menentukan ketergantungan tersebut secara jelas. Lihat Pengaturan nama dan jenis untuk sumber daya anak.
Untuk mendukung nama simbolis Bicep dalam templat ARM JSON, tambahkan languageVersion dengan versi 2.0 atau yang lebih baru, dan ubah definisi sumber daya dari array ke objek.
Di outputs bagian tersebut, Anda menentukan nilai yang dikembalikan dari penyebaran. Biasanya, Anda mengembalikan nilai dari sumber daya yang disebarkan. Anda dibatasi hingga 64 output dalam templat.
Contoh berikut menunjukkan struktur definisi output:
Nama nilai output. Harus menjadi pengidentifikasi JavaScript yang valid.
kondisi
No
Nilai Boolean menunjukkan apakah nilai output tersebut dikembalikan. Ketika true, nilai disertakan dalam output untuk penyebaran. Ketika false, nilai output dilewati untuk penyebaran ini. Ketika tidak ditentukan, nilai defaultnya adalah true.
jenis
Ya
Jenis nilai output. Nilai output mendukung jenis yang sama dengan parameter input templat. Jika Anda menentukan securestring untuk jenis output, nilai tidak ditampilkan dalam riwayat penyebaran dan tidak dapat diambil dari templat lain. Untuk menggunakan nilai rahasia di lebih dari satu templat, simpan rahasia di Key Vault dan referensikan di dalam file parameter. Untuk informasi selengkapnya, lihat Gunakan Azure Key Vault untuk meneruskan nilai parameter aman selama penyebaran.
value
No
Ekspresi templat yang dievaluasi dan dikembalikan sebagai nilai output. Tentukan nilai ataumenyalin.
menyalin
No
Digunakan untuk mengembalikan lebih dari satu nilai untuk output. Tentukan nilai atau salin. Untuk informasi selengkapnya, lihat Perulangan output di dalam templat ARM.
Anda memiliki beberapa pilihan untuk menambahkan komentar dan metadata ke templat Anda.
Komentar
Untuk komentar sebaris, Anda dapat menggunakan // atau /* ... */. Di Visual Studio Code, simpan file parameter dengan komentar sebagai JSON dengan jenis file komentar (JSONC), jika tidak, Anda akan mendapatkan pesan kesalahan yang mengatakan "Komentar tidak diizinkan di JSON".
Catatan
Saat menggunakan Azure CLI untuk menyebarkan templat dengan komentar, gunakan versi 2.3.0 atau versi lebih baru, dan tentukan pengalihan --handle-extended-json-format-nya.
JSON
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2023-03-01",
"name": "[variables('vmName')]", // to customize name, change it in variables
"location": "[parameters('location')]", //defaults to resource group location
"dependsOn": [ /* storage account and network interface must be deployed first */
"[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
"[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
],
Di Visual Studio Code, ekstensi Azure Resource Manager Tool dapat mendeteksi templat ARM secara otomatis dan mengubah mode bahasa. Jika Anda melihat Templat Azure Resource Manager di sudut kanan bawah Visual Studio Code, Anda dapat menggunakan komentar sebaris. Komentar sebaris tidak lagi bertanda tidak valid.
Anda dapat menambahkan objek metadata hampir di mana saja di templat Anda. Resource Manager mengabaikan objek tersebut, tetapi editor JSON Anda mungkin memperingatkan Anda bahwa properti tersebut tidak valid. Di dalam objek, tentukan properti yang Anda butuhkan.
JSON
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"comments": "This template was developed for demonstration purposes.",
"author": "Example Name"
},
Untuk parameters, tambahkan metadata objek dengan description properti.
JSON
"parameters": {
"adminUsername": {
"type": "string",
"metadata": {
"description": "User name for the Virtual Machine."
}
},
Saat menyebarkan templat melalui portal, teks yang Anda berikan dalam deskripsi secara otomatis digunakan sebagai tip untuk parameter tersebut.
Untuk resources, tambahkan comments elemen atau metadata objek. Contoh berikut menunjukkan comments elemen dan metadata objek.
JSON
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[format('{0}{1}', 'storage', uniqueString(resourceGroup().id))]",
"comments": "Storage account used to store VM disks",
"location": "[parameters('location')]",
"metadata": {
"comments": "These tags are needed for policy compliance."
},
"tags": {
"Dept": "[parameters('deptName')]",
"Environment": "[parameters('environment')]"
},
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
}
]
Untuk outputs, tambahkan metadata objek ke nilai output.
Anda tidak dapat menambahkan metadata objek ke fungsi yang ditentukan pengguna.
String multibaris
Anda dapat memecah string menjadi beberapa baris. Misalnya, lihat location properti dan salah satu komentar dalam contoh JSON berikut.
Catatan
Untuk menyebarkan templat dengan string multibaris, gunakan Azure PowerShell atau Azure CLI. Untuk CLI, gunakan versi 2.3.0 atau yang lebih baru, lalu tentukan pengalihan --handle-extended-json-format.
String multibaris tidak didukung saat Anda menyebarkan templat melalui portal Microsoft Azure, alur DevOps, atau REST API.
JSON
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2023-03-01",
"name": "[variables('vmName')]", // to customize name, change it in variables
"location": "[
parameters('location')
]", //defaults to resource group location
/*
storage account and network interface
must be deployed first
*/
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
"[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
],
Menggunakan apa pun languageVersion yang berakhiran tidak disarankan -experimental di lingkungan produksi karena fungsionalitas eksperimental dapat diubah kapan saja.
Catatan
Rilis ekstensi Alat Azure Resource Manager saat ini untuk Visual Studio Code tidak mengenali penyempurnaan yang dibuat dalam languageVersion 2.0.
Untuk menggunakan languageVersion 2.0, tambahkan "languageVersion": "2.0" ke templat Anda:
Gunakan nama simbolis alih-alih nama sumber daya dalam reference fungsi. Lihat referensi.
Fungsi references() yang mengembalikan array objek yang mewakili status runtime kumpulan sumber daya. Lihat referensi.
Gunakan properti sumber daya 'yang ada' untuk mendeklarasikan sumber daya yang ada untuk dibaca ARM daripada menyebarkan sumber daya. Lihat Mendeklarasikan sumber daya yang ada.
Membuat jenis yang ditentukan pengguna. Lihat Definisi jenis.
Batasan validasi jenis agregat tambahan yang akan digunakan dalam parameter dan output.
Kelola beberapa penyebaran lingkungan Azure templat JSON Azure Resource Manager (templat ARM) Anda dengan menggunakan fungsi, variabel, tag, dan file parameter.
Menjelaskan cara menggunakan templat tertaut dalam templat Azure Resource Manager (templat ARM) untuk membuat solusi templat modular. Menunjukkan cara meneruskan nilai parameter, menentukan file parameter, dan URL yang dibuat secara dinamis.
Menjelaskan pendekatan yang direkomendasikan untuk penulisan templat Azure Resource Manager (templat ARM). Menawarkan saran untuk menghindari masalah umum saat menggunakan templat.