Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sebelum menyebarkan templat Azure Resource Manager (templat ARM), Anda dapat mempratinjau perubahan yang akan terjadi. Azure Resource Manager menyediakan operasi skenario hipotetis agar Anda dapat melihat bagaimana sumber daya akan berubah jika Anda menyebarkan templat. Operasi hipotetis tidak membuat perubahan apa pun pada sumber daya yang ada. Sebaliknya, ia memprediksi perubahan jika template yang ditentukan diterapkan.
Anda dapat menggunakan operasi what-if dengan Azure PowerShell, Azure CLI, atau operasi REST API. Fungsi what-if didukung untuk grup sumber daya, langganan, grup manajemen, dan penyebaran di tingkat penyewa.
Sumber daya pelatihan
Untuk mempelajari lebih lanjut tentang analisis skenario dan panduan praktis, lihat Pratinjau perubahan penyebaran Azure dengan menggunakan analisis skenario.
Prasyarat
Memerlukan izin
Untuk menyebarkan file Bicep atau templat Azure Resource Manager (ARM), Anda memerlukan akses tulis pada sumber daya yang Anda sebarkan dan akses ke semua operasi pada Microsoft.Resources/deployments jenis sumber daya. Misalnya, untuk menyebarkan mesin virtual, Anda memerlukan izin Microsoft.Compute/virtualMachines/write dan Microsoft.Resources/deployments/*. Operasi andaikan memiliki persyaratan izin yang sama.
Azure CLI versi 2.76.0 atau yang lebih baru dan Azure PowerShell versi 13.4.0 atau yang lebih baru memperkenalkan sakelar ValidationLevel untuk menentukan bagaimana ARM memvalidasi templat Bicep secara menyeluruh selama proses ini. Untuk informasi selengkapnya, lihat Perintah bagaimana-jika
Untuk daftar peran dan izin, lihat Peran bawaan Azure.
Batas bagaimana-jika
"Fitur Bagaimana-jika akan memperluas templat berlapis hingga batas tersebut tercapai."
- 500 templat berlapis.
- 800 grup sumber daya dalam penyebaran lintas grup sumber daya.
- Diperlukan waktu 5 menit untuk memperluas templat berlapis.
Ketika salah satu batas tercapai, jenis perubahan sumber daya yang tersisa diatur ke Abaikan.
Instal Modul Azure PowerShell
Untuk menggunakan fungsi simulasi di PowerShell, Anda harus memiliki modul Az versi 4.2 atau yang lebih baru.
Untuk memasang modul, gunakan:
Install-Module -Name Az -Force
Untuk informasi selengkapnya tentang menginstal modul, lihat Menginstal Azure PowerShell.
Memasang modul Azure CLI
Untuk menggunakan what-if di Azure CLI, Anda harus memiliki Azure CLI 2.14.0 atau yang lebih baru. Jika diperlukan, instal versi terbaru Azure CLI.
Melihat Hasil
Saat Anda menggunakan what-if di PowerShell atau Azure CLI, output menyertakan hasil yang diberi kode warna yang membantu Anda melihat berbagai jenis perubahan.
Hasil 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.
Nota
Operasi seandainya tidak dapat menyelesaikan fungsi referensi. Setiap kali Anda mengatur properti ke ekspresi templat yang menyertakan fungsi referensi, laporan skenario 'what-if' menunjukkan bahwa properti akan berubah. Perilaku ini terjadi karena analisis hipotetis membandingkan nilai saat ini dari properti (seperti true atau false untuk nilai boolean) dengan ekspresi template yang belum terselesaikan. Jelasnya, nilai-nilai ini tidak akan cocok. Saat Anda menerapkan templat, properti hanya akan berubah ketika ekspresi templat diurai menjadi nilai yang berbeda.
Skenario 'Bagaimana Jika'
Azure PowerShell
Untuk mempratinjau perubahan sebelum menyebarkan templat, gunakan New-AzResourceGroupDeployment atau New-AzSubscriptionDeployment. Tambahkan parameter pengalihan -Whatif ke perintah penyebaran.
New-AzResourceGroupDeployment -Whatifuntuk penyebaran grup sumber dayaNew-AzSubscriptionDeployment -WhatifdanNew-AzDeployment -Whatifuntuk penyebaran tingkat langganan
Anda dapat menggunakan parameter pengalihan -Confirm untuk mempratinjau perubahan dan diminta untuk melanjutkan penyebaran.
-
New-AzResourceGroupDeployment -Confirmuntuk penyebaran grup sumber daya -
New-AzSubscriptionDeployment -ConfirmdanNew-AzDeployment -Confirmuntuk 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-AzResourceGroupDeploymentWhatIfResultuntuk penyebaran grup sumber daya -
$results = Get-AzSubscriptionDeploymentWhatIfResultatau$results = Get-AzDeploymentWhatIfResultuntuk penyebaran tingkat langganan
Azure CLI (antarmuka baris perintah Azure)
Untuk mempratinjau perubahan sebelum menyebarkan templat, 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 saklar --confirm-with-what-if (atau bentuk singkatnya -c) untuk mempratinjau perubahan dan akan diminta untuk melanjutkan dengan penyebaran. Tambahkan switch ini ke:
- buat grup penyebaran az
- Perintah "az deployment sub create" digunakan untuk membuat penyebaran sub di Azure.
- az deployment mg create
- buat penyewa penyebaran az
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.
Azure REST API
Untuk REST API, gunakan:
- Penyebaran - Skenario Bagaimana Jika untuk penyebaran grup sumber daya
- Penyebaran - Bagaimana Jika Pada Cakupan Langganan untuk penyebaran langganan
- Penyebaran - Bagaimana Jika Lingkup Grup Manajemen untuk penyebaran grup manajemen
- Penyebaran - Bagaimana Jika di Tingkat Penyewa untuk penyebaran penyewa.
Ubah jenis
Operasi bagaimana-jika mencantumkan tujuh jenis perubahan yang berbeda:
- Buat: Sumber daya saat ini tidak ada tetapi didefinisikan dalam templat. Sumber daya akan dibuat.
- Hapus: Jenis perubahan ini hanya berlaku saat menggunakan mode lengkap untuk penyebaran. Sumber daya ada, tetapi tidak ditentukan dalam templat. 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 ditentukan dalam templat. Sumber daya tidak akan digunakan atau dimodifikasi. Ketika Anda mencapai batas untuk memperluas templat berlapis, Anda akan menemukan jenis perubahan ini. Lihat Batas skenario.
-
NoChange: Sumber daya ada, dan didefinisikan dalam templat. Sumber daya akan disebarkan ulang, 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, properti
sku.tierselalu diatur untuk disesuaikan dengansku.namedalam ruang namaMicrosoft.ServiceBus. -
Modifikasi: Sumber daya ada, dan didefinisikan dalam templat. Sumber daya akan disebarkan 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 templat. 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 ketika 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 kerja
Untuk melihat cara bagaimana-jika bekerja, mari kita jalankan beberapa pengujian. Pertama, sebarkan templat yang membuat jaringan virtual. Anda akan menggunakan jaringan virtual ini untuk menguji bagaimana perubahan dilaporkan oleh bagaimana-jika.
New-AzResourceGroup `
-Name ExampleGroup `
-Location centralus
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
Menguji modifikasi
Setelah penyebaran selesai, Anda siap menguji operasi 'what-if'. Kali ini Anda menyebarkan templat yang mengubah jaringan virtual. Ini kehilangan satu tag asli, subnet telah dihapus, dan awalan alamat telah berubah.
New-AzResourceGroupDeployment `
-Whatif `
-ResourceGroupName ExampleGroup `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"
Output bagaimana-jika tampak mirip dengan:
Hasil 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.
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 bahwa perubahan ini belum diluncurkan. Anda akan melihat pratinjau perubahan yang akan terjadi jika Anda menyebarkan templat.
Beberapa properti yang tercantum sebagai dihapus tidak akan benar-benar berubah. Properti dapat salah dilaporkan sebagai dihapus saat tidak ada dalam templat, tetapi secara otomatis diatur selama penyebaran sebagai nilai default. Hasil ini dianggap "gangguan" dalam respons bagaimana-jika. Sumber daya yang telah diterapkan akan memiliki nilai yang ditetapkan untuk setiap properti. Ketika operasi simulasi berkembang, properti ini akan dikeluarkan 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 `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"
Anda dapat melihat ringkasan setiap perubahan.
foreach ($change in $results.Changes)
{
$change.Delta
}
Mengonfirmasi penghapusan
Operasi se-skenario mendukung penggunaan mode penyebaran. Saat diatur ke mode lengkap, sumber daya yang tidak ada dalam templat akan dihapus. Contoh berikut menyebarkan templat yang tidak memiliki sumber daya yang ditentukan dalam mode lengkap.
Untuk mempratinjau perubahan sebelum menyebarkan templat, gunakan parameter konfirmasi pengalihan dengan perintah penyebaran. Jika perubahan sesuai harapan Anda, tanggapi bahwa Anda ingin penyebaran selesai.
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-Mode Complete `
-Confirm `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/azuredeploy.json"
Karena tidak ada sumber daya yang ditentukan dalam templat dan mode penyebaran diatur ke lengkap, jaringan virtual akan dihapus.
Hasil teksnya adalah:
Resource and property changes are indicated with this symbol:
- Delete
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
- Microsoft.Network/virtualNetworks/vnet-001
id:
"/subscriptions/./resourceGroups/ExampleGroup/providers/Microsoft.Network/virtualNet
works/vnet-001"
location: "centralus"
name: "vnet-001"
tags.CostCenter: "12345"
tags.Owner: "Team A"
type: "Microsoft.Network/virtualNetworks"
Resource changes: 1 to delete.
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.
SDK
Anda dapat menggunakan operasi simulasi melalui Azure SDK.
Untuk Python, gunakan bagaimana-jika.
Untuk Java, gunakan Kelas DeploymentWhatIf.
Untuk .NET, gunakan Kelas DeploymentWhatIf.
Langkah selanjutnya
- Ekstensi Wawasan Penyebaran ARM menyediakan cara mudah untuk mengintegrasikan operasi what-if di pipeline Azure DevOps Anda.
- Untuk menggunakan operasi what-if dalam pipelined, lihat Menguji templat ARM dengan What-If dalam pipelined.
- Jika Anda melihat hasil yang salah dari operasi simulasi, silakan laporkan masalah di https://aka.ms/whatifissues.
- Untuk modul pembelajaran yang mencakup penggunaan fitur 'what-if', lihat Pratinjau perubahan dan validasi sumber daya Azure dengan menggunakan fitur 'what-if' dan toolkit pengujian templat ARM.