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.
- Kaynak grupları arası dağıtımda 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. yükleme Azure PowerShell.
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ışı:
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ümleyemiyor. Bir özelliği başvuru işlevini içeren bir şablon ifadesine ayarladığınız her seferde, durum raporları özelliği değişir. What-if özelliğinin geçerli değerini (boole değeri için veya false
gibitrue
) çözümlenmemiş şablon ifadesiyle karşılaştırdığından bu davranış ortaya çıkar. Bu değerlerin eşleşmediğ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:
- az deployment group what-if for resource group deployments
- az deployment sub what-if for subscription level deployments
- 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 biçimini-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. Program aracılığıyla değişiklikleri 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_colorevet 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ındaYsa.
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. Bu değişiklik türüne yalnızca tam mod silmeyi destekleyen kaynaklar dahil edilir.
- 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: Özellik yalnızca hazırdı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. Değişikliklerin durum tarafından nasıl raporlandığı test etmek için bu sanal ağı 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ışı:
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ünde renklerin değişiklik türünü belirtmek için tanımlandığına dikkat edin.
Çıktının alt kısmında Sahip silinmiş etiketini gösterir. 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. Durum 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
}
Silme işlemini onaylama
What-if 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ğinize 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 tamamlanmak üzere ayarlandığından, sanal ağ silinir.
Metin çıkışı:
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ı'ni kullanın.
Sonraki adımlar
- ARM Deployment Insights uzantısı, Azure DevOps işlem hattınızda durum işlemini 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.
- What-if işleminde yanlış sonuçlarla karşılaşırsanız, 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.