Bicep dağıtımı durum 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ş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 Bicep dosyası dağıtılırsa değişiklikleri tahmin eder.

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.

What-If işlemleri sırasında değerlendirmesi ve genişletilmesi templateLink desteklenmez. Sonuç olarak, iç içe dağıtımlarda şablon bağlantıları kullanılarak dağıtılan ve şablon belirtim başvuruları da dahil olmak üzere tüm kaynaklar What-If işlemi sonuçlarında görünmez.

Eğitim kaynakları

Adım adım yönergeler aracılığıyla what-if işlemi hakkında bilgi edinmek isterseniz 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.

Bicep dağıtımı durum işlemi fullresourcepayload ve değişiklik türleri

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. Bicep dosyasını dağıttığınızda, özellik yalnızca şablon ifadesi farklı bir değere çözümlendiğinde değişir.

Durum komutları

Azure PowerShell

Bicep dosyasını 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

Bicep dosyasını 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 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 tam mod kullanılırken geçerlidir. Kaynak var, ancak Bicep dosyasında tanımlanmamış. 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 Bicep dosyasında 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 Bicep dosyasında 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 Bicep dosyasında 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 Bicep dosyasında 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 ağ oluşturan bir Bicep dosyası dağıtın. Bu sanal ağı, değişikliklerin durum tarafından nasıl bildirildiği test etmek için kullanacaksınız. Bicep dosyasının bir kopyasını indirin.

resource vnet 'Microsoft.Network/virtualNetworks@2023-11-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 şunu 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 durum işlemini test etmeye hazır olursunuz. Bu kez sanal ağı değiştiren bir Bicep dosyası dağıtacaksınız. Özgün etiketlerden biri eksik, bir alt ağ kaldırılmış ve adres ön eki değişmiş. Bicep dosyasının bir kopyasını indirin.

resource vnet 'Microsoft.Network/virtualNetworks@2023-11-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 şunu 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ı durum işlemi çıktı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.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 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. Bicep dosyasını 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 Bicep dosyasında 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 `
  --template-file "what-if-after.bicep"

Her değişikliğin özetini görebilirsiniz.

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

Silmeyi onayla

Bicep dosyasını dağıtmadan önce değişiklikleri önizlemek için deployment komutuyla confirm switch parametresini kullanın. Değişiklikler beklediğiniz gibiyse, dağıtımın tamamlanmasını istediğiniz yanıtı verin.

New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -Confirm `
  -TemplateFile "what-if-after.bicep"

Bicep dağıtımı durum işlemi çıkış dağıtım modu tamamlandı

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.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örürsünüz ve dağıtımın çalışmasını istediğinizi onaylayabilirsiniz.

Kaynakları temizleme

Örnek kaynaklara artık ihtiyacınız kalmadığında kaynak grubunu silmek için Azure CLI veya Azure PowerShell kullanın.

az group delete --name ExampleGroup

SDK

Durum işlemini Azure SDK'ları aracılığıyla kullanabilirsiniz.

Sonraki adımlar