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.

Bicep dağıtımı what-if işlemi fullresourcepayload ve değişiklik türleri

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 -Whatif kaynak grubu dağıtımları için
  • New-AzSubscriptionDeployment -Whatif abonelik New-AzDeployment -Whatif dü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 -Confirm kaynak grubu dağıtımları için
  • New-AzSubscriptionDeployment -Confirm abonelik New-AzDeployment -Confirm dü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-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

Bicep dosyası dağıtmadan önce değişiklikleri önizlemek için şunları kullanın:

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:

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

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 FullResourcePayloads olarak 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 FullResourcePayloads olarak 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 ResourceIdOnly gö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:

Bicep dağıtımı what-if işlemi çıktısı

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"

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

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.

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.