ARM şablonu dağıtımı what-if işlemi
Azure Resource Manager şablonunu (ARM şablonu) dağıtmadan önce, gerçekleşecek değişikliklerin önizlemesini görebilirsiniz. Azure Resource Manager, şablonu dağıtırsanız kaynakların nasıl değişeceğini görmenize olanak sağlayan durum işlemini sağlar. what-if komutu var olan kaynaklarda herhangi bir değişiklik yapmaz. Bunun yerine belirtilen şablonun dağıtılması halinde gerçekleştirilecek değişikliklerle ilgili tahminde bulunur.
Durum işlemini Azure PowerShell, Azure CLI veya REST API işlemleriyle kullanabilirsiniz. Durum, kaynak grubu, abonelik, yönetim grubu ve kiracı düzeyi dağıtımları için desteklenir.
Eğitim kaynakları
Durum hakkında daha fazla bilgi edinmek ve uygulamalı yönergeler için bkz . What-if kullanarak Azure dağıtım değişikliklerini önizleme.
Gerekli izinler
Bicep dosyasını veya ARM şablonunu dağıtmak için dağıttığınız kaynaklara yazma erişimine ve Microsoft.Resources/deployments kaynak türündeki tüm işlemler için erişime sahip olmanız gerekir. Örneğin, bir sanal makine dağıtmak için ve Microsoft.Resources/deployments/*
izinlerine ihtiyacınız vardırMicrosoft.Compute/virtualMachines/write
. What-if işlemi aynı izin gereksinimlerine sahiptir.
Rol ve izinlerin listesi için bkz. Azure yerleşik rolleri.
Durum sınırları
Durum, bu sınırlara ulaşılana kadar iç içe şablonları genişletir:
- 500 iç içe şablon.
- Çapraz kaynak grubu dağıtımında 800 kaynak grubu.
- İç içe şablonların genişletilmesi 5 dakika sürer.
Sınırlardan birine ulaşıldığında, kalan kaynakların değişiklik türü Yoksay olarak ayarlanır.
Azure PowerShell modülünü yükleme
PowerShell'de durum özelliğini kullanmak için Az modülünün 4.2 veya sonraki bir sürümüne sahip olmanız gerekir.
Modülü yüklemek için şunu kullanın:
Install-Module -Name Az -Force
Modülleri yükleme hakkında daha fazla bilgi için bkz . Azure PowerShell'i yükleme.
Azure CLI modülünü yükleme
Azure CLI'da durum özelliğini kullanmak için Azure CLI 2.14.0 veya sonraki bir sürümüne sahip olmanız gerekir. Gerekirse Azure CLI'nin en son sürümünü yükleyin.
Sonuçları görme
PowerShell veya Azure CLI'da durum bilgisini kullandığınızda çıkış, farklı değişiklik türlerini görmenize yardımcı olan renk kodlu sonuçlar içerir.
Metin çıkışı şöyledir:
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ümleyemez. Bir özelliği başvuru işlevini içeren bir şablon ifadesi olarak her ayarladığınızda, durum raporları özelliği değişir. Bu davranış, what-if özelliğinin geçerli değerini (boole değeri gibi true
false
) çözümlenmemiş şablon ifadesiyle karşılaştırdığı için gerçekleşir. Bu değerlerin eşleşmeyeceği açıktır. Şablonu dağıttığınızda, özellik yalnızca şablon ifadesi farklı bir değere çözümlendiğinde değişir.
Durum komutları
Azure PowerShell
Şablonu dağıtmadan önce değişiklikleri önizlemek için New-AzResourceGroupDeployment veya New-AzSubscriptionDeployment kullanın. -Whatif
switch parametresini dağıtım komutuna ekleyin.
New-AzResourceGroupDeployment -Whatif
kaynak grubu dağıtımları içinNew-AzSubscriptionDeployment -Whatif
veNew-AzDeployment -Whatif
abonelik düzeyi dağıtımları için
Değişiklikleri önizlemek ve dağıtıma devam etmek isteyip istemediğinizi öğrenmek için switch parametresini kullanabilirsiniz -Confirm
.
New-AzResourceGroupDeployment -Confirm
kaynak grubu dağıtımları içinNew-AzSubscriptionDeployment -Confirm
veNew-AzDeployment -Confirm
abonelik düzeyi dağıtımları için
Yukarıdaki komutlar, el ile inceleyebileceğiniz bir metin özeti döndürür. Değişiklikleri program aracılığıyla inceleyebileceğiniz bir nesne almak için Get-AzResourceGroupDeploymentWhatIfResult veya Get-AzSubscriptionDeploymentWhatIfResult kullanın.
$results = Get-AzResourceGroupDeploymentWhatIfResult
kaynak grubu dağıtımları için$results = Get-AzSubscriptionDeploymentWhatIfResult
veya$results = Get-AzDeploymentWhatIfResult
abonelik düzeyi dağıtımları için
Azure CLI
Şablon dağıtmadan önce değişiklikleri önizlemek için şunu 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 isteyip istemediğinizi öğrenmek için anahtarını (veya kısa formunu-c
) kullanabilirsiniz--confirm-with-what-if
. Bu anahtarı şuna ekleyin:
- az deployment group create
- az deployment sub create.
- az deployment mg create
- az deployment tenant create
Örneğin, kaynak grubu dağıtımları için veya -c
kullanınaz deployment group create --confirm-with-what-if
.
Yukarıdaki komutlar, el ile inceleyebileceğiniz bir metin özeti döndürür. Değişiklikleri program aracılığıyla inceleyebileceğiniz bir JSON nesnesi almak için anahtarını kullanın --no-pretty-print
. Örneğin, kaynak grubu dağıtımları için kullanın az deployment group what-if --no-pretty-print
.
Sonuçları renkler olmadan döndürmek istiyorsanız Azure CLI yapılandırma dosyanızı açın. no_color evet olarak ayarlayın.
Azure REST API
REST API için şunu kullanın:
- Dağıtımlar - Kaynak grubu dağıtımları için Durum
- Dağıtımlar - Abonelik dağıtımları için Abonelik Kapsamında If If
- Dağıtımlar - Yönetim grubu dağıtımları için Yönetim Grubu KapsamındaYsa Ne Olur?
- Dağıtımlar - Kiracı dağıtımları için Kiracı Kapsamında If.
Değişiklik türleri
Durum işlemi yedi farklı değişiklik türünü listeler:
- Oluştur: Kaynak şu anda yok ancak şablonda tanımlanıyor. Kaynak oluşturulacaktır.
- Sil: Bu değişiklik türü yalnızca dağıtım için tam mod kullanılırken geçerlidir. Kaynak mevcuttur ancak şablonda tanımlanmamıştır. Tamamlama modunda kaynak oluşturulacaktır. Yalnızca tamamlama modu silme işlemini destekleyen kaynaklar bu değişiklik türüne dahildir.
- Yoksay: Kaynak var, ancak şablonda tanımlanmamış. Kaynak dağıtılmayacak veya değiştirilmeyecektir. İç içe şablonları genişletme sınırlarına ulaştığınızda, bu değişiklik türüyle karşılaşırsınız. Bkz . Durum sınırları.
- NoChange: Kaynak var ve şablonda tanımlanıyor. Kaynak yeniden dağıtılacaktır ancak kaynağın özellikleri değişmeyecektir. ResultFormat varsayılan değer olan olarak ayarlandığında
FullResourcePayloads
bu değişiklik türü döndürülür. - NoEffect: Özelliği yalnızca hazır ve hizmet tarafından yoksayılır. Örneğin,
sku.tier
özelliği her zaman ad alanındaMicrosoft.ServiceBus
eşleşeceksku.name
şekilde ayarlanır. - Değiştir: Kaynak var ve şablonda tanımlanıyor. Kaynak yeniden dağıtılacaktır ve kaynağın özellikleri değişecektir. ResultFormat varsayılan değer olan olarak ayarlandığında
FullResourcePayloads
bu değişiklik türü döndürülür. - Dağıt: Kaynak var ve şablonda tanımlanıyor. 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 ayarlandığında
ResourceIdOnly
görürsünüz.
Sonuç biçimi
Tahmin edilen değişiklikler hakkında döndürülen ayrıntı düzeyini denetlersiniz. İki seçeneğiniz vardır:
- FullResourcePayloads - Değiştirilecek kaynakların listesini ve değiştirilecek özelliklerle ilgili ayrıntıları döndürür
- ResourceIdOnly - değiştirilecek kaynakların listesini döndürür
Varsayılan değer FullResourcePayloads'tır.
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ükleri
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.
Durum işlemini çalıştırma
Ortamı ayarlama
What-if'nin nasıl çalıştığını görmek için bazı testler çalıştıralım. İlk olarak, sanal ağ oluşturan bir şablon dağıtın. Bu sanal ağı, değişikliklerin durum tarafından nasıl bildirildiği test etmek için kullanacaksınız.
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"
Test değişikliği
Dağıtım tamamlandıktan sonra durum işlemini test etmeye hazır olursunuz. Bu kez sanal ağı değiştiren bir şablon dağıtacaksınız. Özgün etiketlerden biri eksik, bir alt ağ kaldırılmış ve adres ön eki değişmiş.
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"
what-if komutunun çıkışı aşağıdakine benzer olacaktır:
Metin çıkışı şöyledir:
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.
Çıkışın en üstündeki renklerin değişiklik türünü belirtmek için tanımlandığına dikkat edin.
Çıktının alt kısmında Sahip'in silindiği etiketi gösterilir. 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ılmadığını unutmayın. Şablonu dağıtırsanız gerçekleşecek değişikliklerin önizlemesini görürsünüz.
Silinmiş olarak listelenen özelliklerden bazıları aslında değişmez. Özellikler şablonda olmadığında yanlışlıkla silinmiş olarak bildirilebilir, ancak dağıtım sırasında varsayılan değerler olarak otomatik olarak ayarlanır. Bu sonuç durum yanıtında "kirlilik" olarak kabul edilir. Dağıtılan son kaynak, özellikler için ayarlanan değerlere sahip olacaktır. What-if işlemi olgunlaştıkça, bu özellikler sonuçtan filtrelenir.
Durum sonuçlarını program aracılığıyla değerlendirme
Şimdi komutu bir değişken olarak ayarlayarak durum sonuçlarını program aracılığıyla değerlendirelim.
$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"
Her değişikliğin özetini görebilirsiniz.
foreach ($change in $results.Changes)
{
$change.Delta
}
Silmeyi onayla
Durum işlemi dağıtım modunun kullanılmasını destekler. Tamamlanma moduna ayarlandığında, şablonda olmayan kaynaklar silinir. Aşağıdaki örnek, tam modda tanımlanmış kaynakları olmayan bir şablon dağıtır.
Şablonu dağıtmadan önce gerçekleştirilecek değişiklikleri önizlemek için dağıtım komutuyla birlikte confirm anahtarı parametresini kullanın. Değişiklikler beklediğiniz gibiyse, dağıtımın tamamlanmasını istediğiniz yanıtı verin.
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"
Şablonda hiçbir kaynak tanımlanmadığından ve dağıtım modu tamamlanacak şekilde ayarlandığından, sanal ağ silinir.
Metin çıkışı şöyledir:
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"):
Beklenen değişiklikleri görürsünüz ve dağıtımın çalışmasını istediğinizi onaylayabilirsiniz.
SDK
Durum işlemini Azure SDK'ları aracılığıyla kullanabilirsiniz.
Python için what-if komutunu kullanın.
Java için DeploymentWhatIf Sınıfı'ni kullanın.
.NET için DeploymentWhatIf Sınıfını kullanın.
Sonraki adımlar
- ARM Dağıtımı Analizler uzantısı, Durum işlemini Azure DevOps işlem hattınızda tümleştirmenin kolay bir yolunu sağlar.
- İşlem hattında durum işlemini kullanmak için bkz . İşlem hattında What-If ile ARM şablonlarını test etme.
- Durum işleminde yanlış sonuçlar fark ederseniz, lütfen sorunlarını adresinde https://aka.ms/whatifissuesbildirin.
- Olup olmadığını kullanmayı kapsayan bir Learn modülü için bkz . Durum ve ARM şablonu test araç setini kullanarak değişiklikleri önizleme ve Azure kaynaklarını doğrulama.