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.

Tam kaynak yükü ve değişiklik türleriyle Resource Manager şablonu dağıtımı durum işleminin ekran görüntüsü.

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çin

  • New-AzSubscriptionDeployment -Whatif ve New-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çin
  • New-AzSubscriptionDeployment -Confirm ve New-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:

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:

Ö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:

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 FullResourcePayloadsbu 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ında Microsoft.ServiceBus eşleşecek sku.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 FullResourcePayloadsbu 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 ResourceIdOnlygö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 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:

Değişiklikleri gösteren Resource Manager şablon dağıtımı durum işlemi çıktısının ekran görüntüsü.

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.

Dağıtım modunda Resource Manager şablonu dağıtımı durum işlemi çıkışı tamamlandı ekran görüntüsü.

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.

Sonraki adımlar