Operasi bagaimana-jika penyebaran Bicep
Sebelum menyebarkan file Bicep, Anda dapat melakukan pratinjau perubahan yang akan terjadi. Azure Resource Manager menyediakan operasi bagaimana-jika agar Anda mengetahui bagaimana sumber daya akan berubah jika file Bicep disebarkan. Operasi bagaimana-jika tidak membuat perubahan apa pun pada sumber daya yang ada. Sebaliknya, operasi ini memprediksi perubahan jika file Bicep yang ditentukan disebarkan.
Anda dapat menggunakan operasi bagaimana-jika dengan operasi Azure PowerShell, Azure CLI, atau REST API. Bagaimana-jika didukung untuk grup sumber daya, langganan, grup manajemen, dan penyebaran tingkat penyewa.
Selama operasi What-If, evaluasi dan perluasan templateLink
tidak didukung. Akibatnya, sumber daya apa pun yang disebarkan menggunakan tautan templat dalam penyebaran berlapis, termasuk referensi spesifikasi templat, tidak akan terlihat dalam hasil operasi Bagaimana-Jika.
Sumber daya pelatihan
Jika Anda lebih ingin mempelajari operasi bagaimana-jika melalui panduan langkah demi langkah, lihat Mempratinjau perubahan penyebaran Azure dengan menggunakan bagaimana-jika.
Izin yang diperlukan
Untuk menyebarkan file Bicep atau templat ARM, Anda memerlukan akses tulis pada sumber daya yang Anda sebarkan dan mengakses ke semua operasi di Microsoft.Resources/deployments resource type. Misalnya, untuk menyebarkan mesin virtual, Anda memerlukan izin Microsoft.Compute/virtualMachines/write
dan Microsoft.Resources/deployments/*
. Operasi bagaimana-jika memiliki persyaratan izin yang sama.
Untuk daftar peran dan izin, lihat Peran bawaan Azure.
Batas bagaimana-jika
Bagaimana-jika memperluas templat berlapis hingga batas ini tercapai:
- 500 templat berlapis.
- 800 grup sumber daya dalam penyebaran lintas grup sumber daya.
- 5 menit yang diambil untuk memperluas templat berlapis.
Ketika salah satu batas tercapai, jenis perubahan sumber daya yang tersisa diatur ke Abaikan.
Install Azure PowerShell Module
Untuk menggunakan bagaimana-jika di PowerShell, Anda harus memiliki versi 4.2 atau yang lebih baru dari modul Az.
Untuk memasang modul, gunakan:
Install-Module -Name Az -Force
Untuk informasi selengkapnya tentang memasang modul, lihat Memasang Azure PowerShell.
Memasang Azure CLI
Untuk menggunakan bagaimana-jika di Azure CLI, Anda harus memiliki Azure CLI 2.14.0 atau yang lebih baru. Jika diperlukan, Pasang versi terbaru Azure CLI.
Melihat Hasil
Saat Anda menggunakan bagaimana-jika di PowerShell atau Azure CLI, output menyertakan hasil berkode warna yang membantu Anda melihat berbagai jenis perubahan.
Output teksnya adalah:
Resource and property changes are indicated with these symbols:
- Delete
+ Create
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
- tags.Owner: "Team A"
~ properties.addressSpace.addressPrefixes: [
- 0: "10.0.0.0/16"
+ 0: "10.0.0.0/15"
]
~ properties.subnets: [
- 0:
name: "subnet001"
properties.addressPrefix: "10.0.0.0/24"
]
Resource changes: 1 to modify.
Catatan
Operasi bagaimana-jika tidak bisa mengatasi fungsi referensi. Setiap kali Anda mengatur properti ke ekspresi templat yang menyertakan fungsi referensi, bagaimana-jika melaporkan properti akan berubah. Perilaku ini terjadi karena bagaimana-jika membandingkan nilai terbaru dari sebuah properti (seperti true
atau false
untuk nilai boolean) dengan templat ekspresi yang tidak terselesaikan. Jelasnya, nilai-nilai ini tidak akan cocok. Saat menyebarkan file Bicep, properti hanya akan berubah ketika ekspresi templat menetapkan nilai yang berbeda.
Perintah bagaimana-jika
Azure PowerShell
Untuk melakukan pratinjau perubahan sebelum menyebarkan file Bicep, gunakan New-AzResourceGroupDeployment atau New-AzSubscriptionDeployment. Tambahkan parameter pengalihan -Whatif
ke perintah penyebaran.
New-AzResourceGroupDeployment -Whatif
untuk penyebaran grup sumber dayaNew-AzSubscriptionDeployment -Whatif
danNew-AzDeployment -Whatif
untuk penyebaran tingkat langganan
Anda dapat menggunakan parameter pengalihan -Confirm
untuk mempratinjau perubahan dan diminta untuk melanjutkan penyebaran.
New-AzResourceGroupDeployment -Confirm
untuk penyebaran grup sumber dayaNew-AzSubscriptionDeployment -Confirm
danNew-AzDeployment -Confirm
untuk penyebaran tingkat langganan
Perintah sebelumnya mengembalikan ringkasan teks yang dapat Anda periksa secara manual. Untuk mendapatkan objek yang dapat Anda periksa secara terprogram untuk perubahan, gunakan Get-AzResourceGroupDeploymentWhatIfResult atau Get-AzSubscriptionDeploymentWhatIfResult.
$results = Get-AzResourceGroupDeploymentWhatIfResult
untuk penyebaran grup sumber daya$results = Get-AzSubscriptionDeploymentWhatIfResult
atau$results = Get-AzDeploymentWhatIfResult
untuk penyebaran tingkat langganan
Azure CLI
Untuk melakukan pratinjau perubahan sebelum menyebarkan file Bicep, gunakan:
- az deployment group what-if untuk penyebaran grup sumber daya
- az deployment sub what-if untuk penyebaran tingkat langganan
- az deployment mg what-if untuk penyebaran grup manajemen
- az deployment tenant what-if untuk penyebaran penyewa
Anda dapat menggunakan pengalihan --confirm-with-what-if
(atau bentuk singkatnya -c
) mempratinjau perubahan dan diminta untuk melanjutkan penyebaran. Tambahkan pengalihan ini ke:
- az deployment group create
- az deployment sub create.
- az deployment mg create
- az deployment tenant create
Misalnya, gunakan az deployment group create --confirm-with-what-if
atau -c
untuk penyebaran grup sumber daya.
Perintah sebelumnya mengembalikan ringkasan teks yang dapat Anda periksa secara manual. Untuk mendapatkan objek JSON yang dapat Anda periksa perubahan secara terprogram, gunakan tombol --no-pretty-print
. Misalnya, gunakan az deployment group what-if --no-pretty-print
untuk penyebaran grup sumber daya.
Jika Anda ingin mengembalikan hasil tanpa warna, buka file konfigurasi Azure CLI Anda. Atur no_color ke ya.
REST API Azure
Untuk REST API, gunakan:
- Penyebaran - Bagaimana Jika untuk penyebaran grup sumber daya
- Penyebaran - Bagaimana Jika Pada Cakupan Langganan untuk penyebaran langganan
- Penyebaran - Bagaimana Jika Pada Cakupan Grup Manajemen untuk penyebaran grup manajemen
- Penyebaran - Bagaimana Jika Pada Cakupan Penyewa untuk penyebaran penyewa.
Ubah tipe
Operasi bagaimana-jika mencantumkan tujuh jenis perubahan yang berbeda:
- Buat: Sumber daya saat ini tidak ada tetapi didefinisikan dalam file Bicep. Sumber daya akan dibuat.
- Hapus: Jenis perubahan ini hanya berlaku saat menggunakan mode lengkap untuk penyebaran template JSON. Sumber daya ada, tetapi tidak didefinisikan dalam file Bicep. Dengan mode lengkap, sumber daya akan dihapus. Hanya sumber daya yang mendukung penghapusan mode lengkap yang disertakan dalam jenis perubahan ini.
- Abaikan: Sumber daya ada, tetapi tidak didefinisikan dalam file Bicep. Sumber daya tidak akan digunakan atau dimodifikasi. Saat Anda mencapai batas untuk memperluas templat berlapis, Anda akan menemukan jenis perubahan ini. Lihat Batas bagaimana-jika.
- NoChange: Sumber daya ada, dan didefinisikan dalam file Bicep. Sumber daya akan disebarkan kembali, tetapi properti sumber daya tidak akan berubah. Jenis perubahan ini dikembalikan ketika ResultFormat diatur ke
FullResourcePayloads
, yang merupakan nilai default. - NoEffect: Properti siap-saja dan akan diabaikan oleh layanan. Misalnya,
sku.tier
properti selalu diatur agar cocoksku.name
diMicrosoft.ServiceBus
namespace. - Ubah: Sumber daya ada, dan didefinisikan dalam file Bicep. Sumber daya akan diterapkan ulang, dan properti sumber daya akan berubah. Jenis perubahan ini dikembalikan ketika ResultFormat diatur ke
FullResourcePayloads
, yang merupakan nilai default. - Sebarkan: Sumber daya ada, dan didefinisikan dalam file Bicep. Sumber daya akan disebarkan ulang. Properti sumber daya mungkin berubah mungkin juga tidak berubah. Operasi mengembalikan tipe perubahan ini ketika tidak memiliki cukup informasi untuk menentukan apakah ada properti yang akan berubah. Anda hanya melihat kondisi ini saat ResultFormat diatur ke
ResourceIdOnly
.
Format Hasil
Anda mengontrol tingkat detail yang dikembalikan tentang perubahan yang diprediksi. Anda memiliki dua pilihan:
- FullResourcePayloads - mengembalikan daftar sumber daya yang akan berubah dan detail tentang properti yang akan berubah
- ResourceIdOnly - mengembalikan daftar sumber daya yang akan berubah
Nilai defaultnya adalah FullResourcePayloads.
Untuk perintah penyebaran PowerShell, gunakan parameter -WhatIfResultFormat
. Dalam perintah objek terprogram, gunakan parameter ResultFormat
.
Untuk Azure CLI, gunakan parameter --result-format
.
Hasil berikut menunjukkan dua format output yang berbeda:
Payload sumber daya penuh
Resource and property changes are indicated with these symbols: - Delete + Create ~ Modify The deployment will update the following scope: Scope: /subscriptions/./resourceGroups/ExampleGroup ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01] - tags.Owner: "Team A" ~ properties.addressSpace.addressPrefixes: [ - 0: "10.0.0.0/16" + 0: "10.0.0.0/15" ] ~ properties.subnets: [ - 0: name: "subnet001" properties.addressPrefix: "10.0.0.0/24" ] Resource changes: 1 to modify.
ID sumber daya saja
Resource and property changes are indicated with this symbol: ! Deploy The deployment will update the following scope: Scope: /subscriptions/./resourceGroups/ExampleGroup ! Microsoft.Network/virtualNetworks/vnet-001 Resource changes: 1 to deploy.
Menjalankan operasi bagaimana-jika
Menyiapkan lingkungan
Untuk melihat cara bagaimana-jika bekerja, mari kita jalankan beberapa pengujian. Pertama, sebarkan file Bicep yang membuat jaringan virtual. Anda akan menggunakan jaringan virtual ini untuk menguji bagaimana perubahan dilaporkan oleh bagaimana-jika. Unduh salinan file Bicep.
resource vnet 'Microsoft.Network/virtualNetworks@2023-11-01' = {
name: 'vnet-001'
location: resourceGroup().location
tags: {
CostCenter: '12345'
Owner: 'Team A'
}
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
enableVmProtection: false
enableDdosProtection: false
subnets: [
{
name: 'subnet001'
properties: {
addressPrefix: '10.0.0.0/24'
}
}
{
name: 'subnet002'
properties: {
addressPrefix: '10.0.1.0/24'
}
}
]
}
}
Untuk menyebarkan file Bicep, gunakan:
New-AzResourceGroup `
-Name ExampleGroup `
-Location centralus
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile "what-if-before.bicep"
Menguji modifikasi
Setelah penyebaran selesai, Anda siap untuk menguji operasi bagaimana-jika. Kali ini Anda menyebarkan file Bicep yang mengubah jaringan virtual. File ini kehilangan salah satu tag aslinya, subnet telah dihapus, dan prefiks alamat telah berubah. Unduh salinan file Bicep.
resource vnet 'Microsoft.Network/virtualNetworks@2023-11-01' = {
name: 'vnet-001'
location: resourceGroup().location
tags: {
CostCenter: '12345'
}
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/15'
]
}
enableVmProtection: false
enableDdosProtection: false
subnets: [
{
name: 'subnet002'
properties: {
addressPrefix: '10.0.1.0/24'
}
}
]
}
}
Untuk melihat perubahan, gunakan:
New-AzResourceGroupDeployment `
-Whatif `
-ResourceGroupName ExampleGroup `
-TemplateFile "what-if-after.bicep"
Output bagaimana-jika tampak mirip dengan:
Output teksnya adalah:
Resource and property changes are indicated with these symbols:
- Delete
+ Create
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
- tags.Owner: "Team A"
+ properties.enableVmProtection: false
~ properties.addressSpace.addressPrefixes: [
- 0: "10.0.0.0/16"
+ 0: "10.0.0.0/15"
]
~ properties.subnets: [
- 0:
name: "subnet001"
properties.addressPrefix: "10.0.0.0/24"
]
Resource changes: 1 to modify.
Pemberitahuan di bagian atas output yang didefinisikan oleh warna menunjukkan jenis perubahan.
Bagian bawah output menunjukkan Pemilik tag telah dihapus. Prefiks alamat berubah dari 10.0.0.0/16 menjadi 10.0.0.0/15. Subnet bernama subnet001 telah dihapus. Ingat perubahan ini tidak disebarkan. Anda melihat pratinjau perubahan yang akan terjadi jika menyebarkan file Bicep.
Beberapa properti yang tercantum sebagai dihapus tidak akan benar-benar berubah. Properti dapat disalahlaporkan sebagai dihapus ketika tidak ada dalam file Bicep, tetapi otomatis ditetapkan selama penyebaran sebagai nilai default. Hasil ini dianggap "tidak penting" dalam respons bagaimana-jika. Sumber daya terakhir yang disebarkan akan memiliki nilai yang ditetapkan untuk properti. Ketika operasi bagaimana-jika matang, properti ini akan disaring dari hasil.
Mengevaluasi hasil bagaimana-jika secara terprogram
Sekarang, mari kita evaluasi secara terprogram hasil bagaimana-jika dengan mengatur perintah ke variabel.
$results = Get-AzResourceGroupDeploymentWhatIfResult `
-ResourceGroupName ExampleGroup `
--template-file "what-if-after.bicep"
Anda dapat melihat ringkasan setiap perubahan.
foreach ($change in $results.Changes)
{
$change.Delta
}
Mengonfirmasi penghapusan
Untuk melakukan pratinjau perubahan sebelum menyebarkan file Bicep, gunakan parameter konfirmasi perubahan dengan perintah penyebaran. Jika perubahan sesuai harapan Anda, tanggapi bahwa Anda ingin penyebaran selesai.
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-Confirm `
-TemplateFile "what-if-after.bicep"
Output teksnya adalah:
Resource and property changes are indicated with these symbols:
- Delete
+ Create
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
- tags.Owner: "Team A"
+ properties.enableVmProtection: false
~ properties.addressSpace.addressPrefixes: [
- 0: "10.0.0.0/16"
+ 0: "10.0.0.0/15"
]
~ properties.subnets: [
- 0:
name: "subnet001"
properties.addressPrefix: "10.0.0.0/24"
]
Resource changes: 1 to modify.
Are you sure you want to execute the deployment?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Anda melihat perubahan yang diharapkan dan dapat mengonfirmasi bahwa Anda ingin penyebaran berjalan.
Membersihkan sumber daya
Saat Anda tidak memerlukan lagi sumber daya contoh, gunakan Azure CLI atau Azure PowerShell untuk menghapus grup sumber daya.
az group delete --name ExampleGroup
SDK
Anda dapat menggunakan operasi bagaimana-jika melalui Azure SDKs.
Untuk Python, gunakan bagaimana-jika.
Untuk Java, gunakan Kelas DeploymentWhatIf.
Untuk .NET, gunakan Kelas DeploymentWhatIf.
Langkah berikutnya
- Untuk menggunakan operasi bagaimana-jika dalam alur, lihat Menguji templat ARM dengan What-If dalam alur.
- Jika Anda melihat hasil yang salah dari operasi bagaimana-jika, laporkan masalah di https://aka.ms/whatifissues.
- Untuk modul Microsoft Learn yang mencakup penggunaan bagaimana-jika, lihat Mempratinjau perubahan dan memvalidasi sumber daya Azure dengan menggunakan bagaimana-jika dan toolkit pengujian template ARM.