ARM şablonu dağıtımı what-if işlemi

Azure Resource Manager şablonu (ARM şablonu) dağıtılmadan önce, gerçekleşen değişikliklerin önizlemesini yapabilirsiniz. Azure Resource Manager, şablonu dağıtırsanız kaynakların ne şekilde değişdiklerinizi görmenizi sağlamak için ne yapılır 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.

Azure PowerShell, Azure clı veya REST API işlemleri ile durum işlemini kullanabilirsiniz. Kaynak grubu, abonelik, yönetim grubu ve kiracı düzeyinde dağıtımlar için ne desteklenir?

Microsoft Learn

Ne yapılır hakkında daha fazla bilgi edinmek ve uygulamalı yönergeler için bkz. Microsoft Learn' yi kullanarak Azure dağıtım değişikliklerini önizleme .

Azure PowerShell modülünü Install

PowerShell 'de ne olduğunu kullanmak için az Module sürüm 4,2 veya sonraki bir sürümünü kullanmanız gerekir.

Modülünü yüklemek için şunu kullanın:

Install-Module -Name Az -Force

Modül yükleme hakkında daha fazla bilgi için bkz. yükleme Azure PowerShell.

Azure CLı modülünü yükler

Azure CLı 'de ne olduğunu kullanmak için Azure CLı 2.14.0 veya sonraki bir sürüme sahip olmanız gerekir. Gerekirse Azure CLI'nin en son sürümünü yükleyin.

Sonuçlara bakın

PowerShell veya Azure CLı 'de ne olursa kullanın, çıktı, farklı değişiklik türlerini görmenizi sağlayan renk kodlu sonuçlar içerir.

Kaynak Yöneticisi şablonu dağıtımı ne yapılır işlemi fullresourcepayload ve değişiklik türleri

Metin çıktısı:

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

Ne yapılır işlemi başvuru işleviniçözümleyemezse. Başvuru işlevini içeren bir şablon ifadesine her bir özellik ayarladığınızda, özelliğin değiştirileceği durum raporları görüntülenir. Bu davranış, özelliğin geçerli değerini (örneğin true veya false bir Boolean değeri için) çözümlenmemiş şablon ifadesiyle karşılaştırdığı için oluşur. Kuşkusuz, bu değerler eşleşmeyecektir. Şablonu dağıttığınızda, özellik yalnızca şablon ifadesi farklı bir değere çözümlenirse değişir.

Durum komutları

Azure PowerShell

Bir şablonu dağıtımdan önce değişiklikleri önizlemek için New-AzResourceGroupDeployment veya New-azsubscriptiondeploymentkomutunu kullanın. -WhatifDağıtım komutuna anahtar parametresini ekleyin.

  • New-AzResourceGroupDeployment -Whatif kaynak grubu dağıtımları için
  • New-AzSubscriptionDeployment -Whatif``New-AzDeployment -Whatifabonelik düzeyinde dağıtımlar için

-ConfirmDeğişiklikleri önizlemek ve dağıtıma devam etmek isteyip istemediğiniz sorulduğunda anahtar parametresini kullanabilirsiniz.

  • New-AzResourceGroupDeployment -Confirm kaynak grubu dağıtımları için
  • New-AzSubscriptionDeployment -Confirm``New-AzDeployment -Confirmabonelik düzeyinde dağıtımlar için

Yukarıdaki komutlar el ile inceleyebilmeniz için bir metin Özeti döndürür. Program aracılığıyla değişiklikler için inceleyebileceğiniz bir nesne almak için Get-Azresourcegroupdeploymentwhatıresult veya Get-azsubscriptiondeploymentwhatıresult' ı kullanın.

  • $results = Get-AzResourceGroupDeploymentWhatIfResult kaynak grubu dağıtımları için
  • $results = Get-AzSubscriptionDeploymentWhatIfResult``$results = Get-AzDeploymentWhatIfResultabonelik düzeyi dağıtımlar için veya

Azure CLI

Bir şablonu dağıtımdan önce değişiklikleri önizlemek için şunu kullanın:

--confirm-with-what-if -c Değişiklikleri önizlemek ve dağıtıma devam etmek isteyip istemediğiniz sorulduğunda anahtarı (veya kısa biçimini) kullanabilirsiniz. Bu anahtarı şu şekilde ekleyin:

Örneğin, az deployment group create --confirm-with-what-if -c kaynak grubu dağıtımları için veya kullanın.

Yukarıdaki komutlar el ile inceleyebilmeniz için bir metin Özeti döndürür. Değişiklikler için programlı olarak inceleyebileceğiniz bir JSON nesnesi almak için --no-pretty-print anahtarını kullanın. Örneğin, az deployment group what-if --no-pretty-print kaynak grubu dağıtımları için kullanın.

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:

Değişiklik türleri

Ne yapılır işlemi altı farklı değişiklik türünü listeler:

  • Oluştur: kaynak şu anda mevcut değil, ancak şablonda tanımlandı. Kaynak oluşturulacaktır.

  • Sil: Bu değişiklik türü yalnızca dağıtım için tamamlanmış mod kullanılırken geçerlidir. Kaynak mevcuttur ancak şablonda tanımlanmamıştır. Tamamlama modunda kaynak oluşturulacaktır. Yalnızca tamamlanmış mod silme işlemini destekleyen kaynaklar bu değişiklik türüne dahil edilir.

  • Yoksay: kaynak var, ancak şablonda tanımlı değil. Kaynak dağıtılmayacak veya değiştirilmeyecektir.

  • NOCHANGE: kaynak vardır ve şablonda tanımlanmıştır. Kaynak yeniden dağıtılacaktır ancak kaynağın özellikleri değişmeyecektir. Bu değişiklik türü, varsayılan değer olan RESULTFORMAT ayarlandığında döndürülür FullResourcePayloads .

  • Değiştir: kaynak vardır ve şablonda tanımlanmıştır. Kaynak yeniden dağıtılacaktır ve kaynağın özellikleri değişecektir. Bu değişiklik türü, varsayılan değer olan RESULTFORMAT ayarlandığında döndürülür FullResourcePayloads .

  • Dağıtım: kaynak vardır ve şablonda tanımlanmıştı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 durumu yalnızca RESULTFORMAT olarak ayarlandığında görürsünüz ResourceIdOnly .

Sonuç biçimi

Tahmin edilen değişiklikler hakkında döndürülen ayrıntı düzeyini kontrol edersiniz. İki seçeneğiniz vardır:

  • Fullresourceyükleri -değiştirilecek kaynakların bir listesini ve değiştirilecek özelliklerle ilgili ayrıntıları döndürür
  • Resourceıdonly -değiştirilecek kaynak listesini döndürür

Varsayılan değer Fullresourceyükleri' dir.

PowerShell dağıtım komutları için -WhatIfResultFormat parametresini kullanın. Programlı nesne komutlarında ResultFormat parametresini kullanın.

Azure CLı için --result-format parametresini kullanın.

Aşağıdaki sonuçlar iki farklı çıkış biçimini göstermektedir:

  • 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ır

Ortamı ayarlama

Nasıl çalıştığını görmek için bazı testler çalıştıralım. İlk olarak, bir 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ğı kullanabilirsiniz.

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 what-if işlemini test etmeye hazır olursanız. Bu kez sanal ağın değişikliklerini yapmak için bir şablon dağıtın. Özgün etiketlerden biri eksik, alt ağ kaldırılmış ve adres ön eki değiştirilmiş.

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:

Resource Manager dağıtım what-if işlemi çıkışı

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.

Çı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. Şablonu dağıtırsanız gerçekleşecek değişikliklerin önizlemesini görebilirsiniz.

Silinmiş olarak listelenen özelliklerden bazıları değişmez. Özellikler şablonda 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 `
  -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örebilir.

foreach ($change in $results.Changes)
{
  $change.Delta
}

Silme işlemini onaylama

What-if işlemi, dağıtım modunun kullanmayı destekler. Tamamlama moduna ayarlandıktan sonra şablonda yer alan kaynaklar silinir. Aşağıdaki örnek, tam modda tanımlanmış kaynağı olan 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 beklendiği gibi olursa, dağıtımın tamamlandıktan sonra 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ımlanmamış ve dağıtım modu tamamlanacak şekilde ayarlandığı için sanal ağ silinir.

Resource Manager dağıtım what-if işlemi çıkış dağıtım modu tamamlandı

Metin çıkışı şu şekildedir:

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örebilir ve dağıtımın çalıştırması istediğiniz onaylayabilir.

SDK

Azure SDK'ları aracılığıyla what-if işlemi kullanabilirsiniz.

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.
  • Ne 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.