Bicep dağıtımı what-if işlemi
Bicep dosyasını dağıtmadan önce, gerçekleşecek değişikliklerin önizlemesini görebilirsiniz. Azure Resource Manager, Bicep dosyasını dağıtırsanız kaynakların nasıl değişip değişmeyeceklerini görmenizi sağlayan what-if (what-if) işlemi sağlar. what-if komutu var olan kaynaklarda herhangi bir değişiklik yapmaz. Bunun yerine, belirtilen Bicep dosyası dağıtılırsa değişiklikleri tahmin ediyor.
What-if(what-if) Azure PowerShell, Azure CLI veya REST API kullanabilirsiniz. Durum kaynak grubu, abonelik, yönetim grubu ve kiracı düzeyinde dağıtımlar için de desteklemektedir.
Microsoft Learn
What-if işlemi hakkında daha fazla bilgi edinmek ve uygulamalı rehberlik için bkz. azure'da what-if kullanarak Azure dağıtım değişikliklerinin önizlemesini Microsoft Learn.
Yükleme Azure PowerShell yükleme
PowerShell'de what-if kullanmak için Az modülünün 4.2 veya sonraki bir sürümüne sahipsiniz.
Modülü yüklemek için şunları kullanın:
Install-Module -Name Az -Force
Modülleri yükleme hakkında daha fazla bilgi için bkz. Yükleme Azure PowerShell.
Azure CLI modülünü yükleme
Azure CLI'de what-if'i kullanmak için Azure CLI 2.14.0 veya sonraki bir niz olması gerekir. Gerekirse Azure CLI'nin en son sürümünü yükleyin.
Sonuçları görme
PowerShell veya Azure CLI'de durum-durum'ları kullanırsanız, çıkış farklı değişiklik türlerini görmenize yardımcı olacak renk kodlu sonuçlar içerir.

Metin çıkışı şu şekildedir:
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.
Not
What-if işlemi başvuru işlevini çözümleyemezse. Bir özelliği başvuru işlevini içeren bir şablon ifadesine ayar her ayarda, what-if özelliği değişir. Bu davranış, what-if özelliğinin geçerli değerini (boole değeri için veya gibi) çözümlenmemiş şablon true false ifadesiyle karşılaştırarak gerçekleşir. Bu değerlerin eşleşmeyecek olduğu açıktır. Bicep dosyasını dağıtıyorsanız, özellik yalnızca şablon ifadesi farklı bir değere çözümlense değişir.
What-if komutları
Azure PowerShell
Bicep dosyasını dağıtmadan önce değişiklikleri önizlemek için New-AzResourceGroupDeployment veya New-AzSubscriptionDeployment kullanın. dağıtım -Whatif komutuna switch parametresini ekleyin.
New-AzResourceGroupDeployment -Whatifkaynak grubu dağıtımları içinNew-AzSubscriptionDeployment -WhatifabonelikNew-AzDeployment -Whatifdüzeyi dağıtımlar için ve
Değişiklikleri önizlemek ve dağıtıma devam etmek için -Confirm istendiğinde switch parametresini kullanabilirsiniz.
New-AzResourceGroupDeployment -Confirmkaynak grubu dağıtımları içinNew-AzSubscriptionDeployment -ConfirmabonelikNew-AzDeployment -Confirmdüzeyi dağıtımlar için ve
Yukarıdaki komutlar, el ile inceleyebilirsiniz bir metin özeti geri döner. Değişiklikleri program aracılığıyla inceleyemeyen bir nesne almak için Get-AzResourceGroupDeploymentWhatIfResult veya Get-AzSubscriptionDeploymentWhatIfResultkullanın.
$results = Get-AzResourceGroupDeploymentWhatIfResultkaynak grubu dağıtımları için$results = Get-AzSubscriptionDeploymentWhatIfResultveya$results = Get-AzDeploymentWhatIfResultabonelik düzeyi dağıtımlar için
Azure CLI
Bicep dosyası dağıtmadan önce değişiklikleri önizlemek için şunları kullanın:
- kaynak grubu dağıtımları için az deployment group what-if
- abonelik düzeyi dağıtımlar için az deployment sub what-if
- yönetim grubu dağıtımları için az deployment mg what-if
- kiracı dağıtımları için az deployment tenant what-if
Değişiklikleri önizlemek ve dağıtıma devam etmek için istendiğinde anahtarını (veya kısa --confirm-with-what-if -c formunu) kullanabilirsiniz. Bu anahtarı şu şekilde ekleyin:
- az deployment group create
- az deployment sub create.
- az deployment mg create
- az deployment tenant create
Örneğin, kaynak az deployment group create --confirm-with-what-if grubu -c dağıtımları için veya kullanın.
Yukarıdaki komutlar, el ile inceleyebilirsiniz bir metin özeti geri döner. Program aracılığıyla değişiklikleri inceleyen bir JSON nesnesi almak için anahtarını --no-pretty-print kullanın. Örneğin, kaynak az deployment group what-if --no-pretty-print grubu dağıtımları için kullanın.
Sonuçları renkler olmadan iade etmek için Azure CLI yapılandırma dosyanızı açın. Bunu no_color olarak ayarlayın.
Azure REST API
Daha REST API için şunları kullanın:
- Dağıtımlar - What If grubu dağıtımları için dağıtımlar
- Dağıtımlar - What If dağıtımları için Abonelik Kapsamında
- Dağıtımlar - What If yönetim grubu dağıtımları için Yönetim Grubu Kapsamında
- Dağıtımlar - What If dağıtımları için Kiracı Kapsamındadır.
Değişiklik türleri
What-if işlemi altı farklı değişiklik türü listeler:
- Oluşturma: Kaynak şu anda mevcut değildir ancak Bicep dosyasında tanımlanmıştır. Kaynak oluşturulacaktır.
- Sil: Bu değişiklik türü yalnızca JSON şablonu dağıtımı için tamamlama modu kullanırken geçerlidir. Kaynak mevcuttur ancak Bicep dosyasında tanımlanmamıştır. Tamamlama modunda kaynak oluşturulacaktır. Bu değişiklik türüne yalnızca tamamlama modu silmeyi destekleyen kaynaklar dahil edilir.
- Yoksay: Kaynak mevcuttur ancak Bicep dosyasında tanımlanmamıştır. Kaynak dağıtılmayacak veya değiştirilmeyecektir.
- NoChange: Kaynak mevcuttur ve Bicep dosyasında tanımlanır. Kaynak yeniden dağıtılacaktır ancak kaynağın özellikleri değişmeyecektir. Bu değişiklik türü, ResultFormat varsayılan değer olan
FullResourcePayloadsolarak ayarlanırsa döndürülür. - Değiştir: Kaynak mevcuttur ve Bicep dosyasında tanımlanır. Kaynak yeniden dağıtılacaktır ve kaynağın özellikleri değişecektir. Bu değişiklik türü, ResultFormat varsayılan değer olan
FullResourcePayloadsolarak ayarlanırsa döndürülür. - Dağıtma: Kaynak mevcuttur ve Bicep dosyasında tanımlanır. Kaynak yeniden dağıtılacaktır. Kaynağın özellikleri değişebilir veya değişmeyebilir. İşlem, özelliklerin değiştirilip değiştirilmeyeceği konusunda karar vermek için yeterli bilgiye sahip olmadığında bu değişiklik türünü döndürür. Bu koşulu yalnızca ResultFormat olarak ayarlanırken
ResourceIdOnlygörüyorsunuz.
Sonuç biçimi
Tahmin edilen değişikliklerle ilgili olarak döndürülen ayrıntı düzeyini siz kontrol altına alırsiniz. İki seçeneğiniz vardır:
- FullResourcePayloads - değiştirecek kaynakların listesini ve değiştirecek özelliklerle ilgili ayrıntıları döndürür
- ResourceIdOnly - değiştirecek kaynakların listesini döndürür
Varsayılan değer FullResourcePayloads değeridir.
PowerShell dağıtım komutları için parametresini -WhatIfResultFormat kullanın. Programlı nesne komutlarında parametresini ResultFormat kullanın.
Azure CLI için parametresini --result-format kullanın.
Aşağıdaki sonuçlar iki farklı çıkış biçimi gösterir:
Tam kaynak yükü
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.Yalnızca Kaynak Kimliği
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.
What-if işlemi çalıştırma
Ortamı ayarlama
What-if'in nasıl çalıştığını görmek için bazı testler çalıştır bakalım. İlk olarak, sanal ağ oluşturan bir Bicep dosyası dağıtın. Değişikliklerin durum tarafından nasıl raporlandığı test etmek için bu sanal ağı kullanabilirsiniz. Bicep dosyasının bir kopyasını indirin.
resource vnet 'Microsoft.Network/virtualNetworks@2021-02-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'
}
}
]
}
}
Bicep dosyasını dağıtmak için şunları kullanın:
New-AzResourceGroup `
-Name ExampleGroup `
-Location centralus
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile "what-if-before.bicep"
Test değişikliği
Dağıtım tamamlandıktan sonra what-if işlemini test etmeye hazır olursanız. Bu kez sanal ağı değiştirirken bir Bicep dosyası dağıtın. Özgün etiketlerden biri eksik, alt ağ kaldırılmış ve adres ön eki değiştirilmiş. Bicep dosyasının bir kopyasını indirin.
resource vnet 'Microsoft.Network/virtualNetworks@2021-02-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'
}
}
]
}
}
Değişiklikleri görüntülemek için şunları kullanın:
New-AzResourceGroupDeployment `
-Whatif `
-ResourceGroupName ExampleGroup `
-TemplateFile "what-if-after.bicep"
what-if komutunun çıkışı aşağıdakine benzer olacaktır:

Metin çıkışı şu şekildedir:
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.
Çıkışın üst kısmında, değişikliklerin türünü belirtmek için renklerin tanımlandığına dikkatin.
Çıkışın alt kısmında Owner was deleted (Sahip silindi) etiketi yer almaktadır. Adres ön eki 10.0.0.0/16'dan 10.0.0.0/15'e değiştirildi. subnet001 adlı alt ağ silindi. Bu değişikliklerin dağıtılamay olduğunu unutmayın. Bicep dosyasını dağıtırsanız gerçekleşecek değişikliklerin önizlemesini görebilirsiniz.
Silinmiş olarak listelenen özelliklerden bazıları değişmez. Özellikler Bicep dosyasında yer alan ancak dağıtım sırasında varsayılan değerler olarak otomatik olarak ayarlandığı zaman hatalı bir şekilde silinebilir. Bu sonuç durum yanıtta "gürültü" olarak kabul edilir. Dağıtılan son kaynak, özellikler için ayarlanmış değerlere sahip olacak. What-if işlemi olgunlaştıkça, bu özellikler sonuçtan filtrelenmiş olur.
Program aracılığıyla what-if sonuçlarını değerlendirme
Şimdi komutunu bir değişkene ayarerek what-if sonuçlarını program aracılığıyla değerlendireceğiz.
$results = Get-AzResourceGroupDeploymentWhatIfResult `
-ResourceGroupName ExampleGroup `
--template-file "what-if-after.bicep"
Her değişikliğin özetini görebilir.
foreach ($change in $results.Changes)
{
$change.Delta
}
Silme işlemini onaylama
Bicep dosyasını dağıtmadan önce değişiklikleri önizlemek için dağıtım komutuyla confirm switch parametresini kullanın. Değişiklikler beklendiği gibi olursa, dağıtımın tamamlandıktan sonra yanıt verin.
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-Confirm `
-TemplateFile "what-if-after.bicep"

Metin çıkışı şu şekildedir:
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"):
Beklenen değişiklikleri görebilir ve dağıtımın çalıştırması istediğiniz onaylayabilir.
Kaynakları temizleme
Örnek kaynaklara artık ihtiyacınız kalmadan Azure CLI veya Azure PowerShell kullanarak kaynak grubunu silin.
az group delete --name ExampleGroup
SDK
Azure SDK'ları aracılığıyla what-if işlemi kullanabilirsiniz.
Python için what-if kullanın.
Java için DeploymentWhatIf Sınıfını kullanın.
.NET için DeploymentWhatIf Sınıfını kullanın.
Sonraki adımlar
- İşlem hattında what-if işlemi kullanmak için bkz. İşlem hattında What-If ile ARM şablonlarını test etmek.
- What-if işlemiyle ilgili yanlış sonuçlar fark ediyorsanız lütfen sorunları 'de rapor https://aka.ms/whatifissues edin.
- What if Microsoft Learn kapsayan bir modül için bkz. What-ifve ARM şablon testi araç setini kullanarak Azure kaynaklarının değişikliklerini önizleme ve doğrulama.