Penyebaran kondisional dengan templat ARM
Terkadang Anda perlu menyebarkan sumber daya secara opsional dalam templat Azure Resource Manager (templat ARM) atau file Bicep. Gunakan elemen condition
untuk menentukan apakah sumber daya disebarkan. Nilai untuk kondisi ini diselesaikan dengan benar atau salah. Ketika nilai tersebut benar, sumber daya dibuat. Saat bernilai false, sumber daya tidak dibuat. Nilai hanya dapat diterapkan ke seluruh sumber daya.
Catatan
Penyebaran kondisional tidak berkaskade dengan sumber daya turunan. Jika Anda ingin meyebarkan sumber daya dan turunannya secara kondisional, Anda harus menerapkan kondisi yang sama untuk setiap jenis sumber daya.
Tip
Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari lebih lanjut, lihat penyebaran bersyarat.
Kondisi penyebaran
Anda dapat meneruskan nilai parameter yang menunjukkan apakah sumber daya disebarkan. Contoh berikut menyebarkan zona DNS secara kondisional.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"deployZone": {
"type": "bool"
}
},
"functions": [],
"resources": [
{
"condition": "[parameters('deployZone')]",
"type": "Microsoft.Network/dnsZones",
"apiVersion": "2018-05-01",
"name": "myZone",
"location": "global"
}
]
}
Untuk contoh yang lebih kompleks, lihat Azure SQL logical server.
Sumber daya baru atau yang sudah ada
Anda dapat menggunakan penyebaran kondisional untuk membuat sumber daya baru atau menggunakan sumber daya yang sudah ada. Contoh berikut menunjukkan cara menyebarkan akun penyimpanan baru atau menggunakan akun penyimpanan yang sudah ada.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"newOrExisting": {
"type": "string",
"defaultValue": "new",
"allowedValues": [
"new",
"existing"
]
}
},
"resources": [
{
"condition": "[equals(parameters('newOrExisting'), 'new')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
},
{
"condition": "[equals(parameters('newOrExisting'), 'existing')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]"
}
],
"outputs": {
"storageAccountId": {
"type": "string",
"value": "[if(equals(parameters('newOrExisting'), 'new'), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]"
}
}
}
Ketika parameter newOrExisting
diatur ke baru, kondisi bernilai benar. Akun penyimpanan disebarkan. Jika tidak, akun penyimpanan yang ada digunakan.
Untuk contoh templat lengkap yang menggunakan condition
elemen, lihat VM dengan Virtual Network, Penyimpanan, dan IP Publik baru atau yang sudah ada.
Fungsi runtime
Jika Anda menggunakan fungsi referensi atau daftar dengan sumber daya yang disebarkan secara kondisional, fungsi tersebut dievaluasi meskipun sumber daya tidak disebarkan. Anda mendapatkan kesalahan jika fungsi merujuk ke sumber daya yang tidak ada.
Gunakan fungsi if untuk memastikan fungsi hanya dievaluasi untuk kondisi saat sumber daya sedang disebarkan. Lihat fungsi if untuk templat sampel yang menggunakan if
dan reference
dengan sumber daya yang disebarkan secara kondisional.
Anda set sumber daya sebagai dependen pada sumber daya kondisional persis seperti yang Anda lakukan pada sumber daya lainnya. Saat sumber daya kondisional tidak disebarkan, Azure Resource Manager secara otomatis menghapusnya dari dependensi yang diperlukan.
Mode lengkap
Jika Anda menyebarkan templat dengan mode lengkap dan resource tidak diterapkan karena condition
bernilai false, hasilnya bergantung pada versi REST API mana yang Anda gunakan untuk menyebarkan template. Jika Anda menggunakan versi yang lebih lama dari 2019-05-10, sumber daya tidak dihapus. Dengan 2019-05-10 atau yang lebih baru, sumber daya dihapus. Versi terbaru Azure PowerShell dan Azure CLI menghapus sumber daya saat kondisinya false.
Langkah berikutnya
- Untuk modul Microsoft Learn yang mencakup penyebaran kondisional, lihat Mengelola penyebaran cloud yang kompleks dengan menggunakan fitur template ARM tingkat lanjut.
- Untuk rekomendasi tentang membuat templat, lihat praktik terbaik templat ARM.
- Untuk membuat beberapa instans sumber daya, lihat Perulangan sumber daya di templat ARM.