what-if komutunu kullanarak dağıtımın yapacağı işlemlerle ilgili tahminde bulunma

Tamamlandı

Bir ortamda kaynakları dağıtan veya değiştiren herkesin aklında şu sorular vardır:

  • Bir şeyleri bozar mıyım?
  • Herhangi bir şeyi silecek miyim?
  • Bu dağıtım var olan kaynakları nasıl etkileyecek?
  • Dağıtım düğmesine basmadan önce dağıtımda gerçekleşmesini beklediğim şeyin aslında ne olacağını doğrulayabilir miyim?

Dağıtmak ve en iyisini umarak iyi bir yaklaşım değildir. İyi yaklaşım, what-if komutunu kullanmaktır. Bu işlem, yeni bir dağıtımı denerseniz bunun sonuçlarını tahmin etmek için size yardımcı olur.

Azure Resource Manager ile sunulan what-if komutu sayesinde şablon dağıttığınızda gerçekleştirilecek değişiklikleri görebilirsiniz. what-if komutu var olan kaynaklarda herhangi bir değişiklik yapmaz. Bunun yerine belirtilen şablonun kaynak grubu ve abonelik düzeyinde dağıtılması durumunda gerçekleştirilecek değişikliklerle ilgili tahminlerde bulunur.

Not

Durum işlemi bazen hiçbir değişiklik gerçekleşmediğinde kaynağın değişeceğini gösterir. Bu sorunları azaltmak için çalışıyoruz, ancak yardımınıza ihtiyacımız var. Lütfen bu sorunları bildirin.

Durum işleminin kullanılması geçerli durum modelini istenen durum modeliyle karşılaştırır. Durum işlemi, şablonunuz tarafından yapılan değişikliklerin, bu değişiklikleri gerçek kaynaklara veya bu kaynakların durumuna uygulamadan beklentilerinizle eşleşip eşleşmediğini onaylar.

Durum sonuçlarının biçimini denetleme

New-AzResourceGroupDeployment Azure PowerShell cmdlet'i bir kaynak grubuna yeni bir dağıtım oluşturur. Parametresini -Whatif bu komuta eklediğinizde, komut dağıtımı gerçekleştirmekten yalnızca gerçekleştirirseniz ne olacağının önizlemesini raporlamaya geçer.

Komutu, az deployment group what-if bir dağıtım gerçekleştirirseniz neler olacağının önizlemesini sağlar.

Aşağıdaki sonuç biçimlerinden birini kullanarak durum işleminin metin çıkış miktarını denetleyebilirsiniz:

  • FullResourcePayloads. Bu parametreyi dahil ederek, değiştirilecek olan kaynakların listesini içeren bir ayrıntılı çıkış elde edersiniz. Bu çıkış, şablona göre değiştirilecek olan tüm özellikler hakkındaki ayrıntıları da gösterir.
  • ResourceIdOnly. Bu mod, değiştirilecek kaynakların listesini döndürür ve tüm ayrıntıları kapsamaz.

Örneğin, mevcut bir ortama tek bir depolama hesabı dağıtan şablondaki depolama türünü değiştirdiğinizi varsayalım.

Aşağıdaki PowerShell kodunu çalıştırabilir ve Resource Manager'dan size tüm kaynak yüklerini vermesini isteyebilirsiniz:

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat FullResourcePayloads
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format FullResourcePayloads

Yukarıdaki komut aşağıdaki sonuçları üretir:

Resource and property changes are indicated with this symbol:
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyStorage

  ~ Microsoft.Storage/storageAccounts/bz64gjjpidbuvi [2019-06-01]
    ~ sku.name: "Standard_LRS" => "Standard_GRS"

Resource changes: 1 to modify.

Ardından komutu yeniden çalıştırabilirsiniz ancak yalnızca kaynak kimliklerini isteyebilirsiniz:

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat ResourceIdOnly
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format ResourceIdOnly

Yukarıdaki komut aşağıdaki sonuçları üretir:

Resource and property changes are indicated with this symbol:
  ! Deploy

The deployment will update the following scope:

Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyStorage

  ! Microsoft.Storage/storageAccounts/bz64gjjpidbuvi

Resource changes: 1 to deploy.

Durum algılayan değişiklik türleri

what-if işlemini kullandığınızda altı tür değişiklik listelenir:

Tür Açıklama Etki
Oluşturma Kaynak şu anda mevcut değildir ancak şablonda tanımlanmıştır. Kaynak oluşturulacaktır.
Sil Bu değişiklik türü yalnızca dağıtım için tamamlama modu kullanıldığında geçerlidir. Kaynak mevcuttur ancak şablonda tanımlanmamıştır. Artımlı modu kullanarak dağıtım yaparsanız kaynak silinmez. Tam modu kullanarak dağıtım yaparsanız kaynak silinir. Bu değişiklik türü yalnızca tam mod aracılığıyla silmeyi destekleyen kaynaklar için döndürülür.
Yoksay Kaynak mevcuttur ancak şablonda tanımlanmamıştır. Varsayılan dağıtım modu olan artımlı modu kullandığınızda, kaynak dağıtılmaz veya değiştirilmez. Tam modu kullanarak dağıtım yaparsanız kaynak silinir.
NoChange Kaynak mevcuttur ve şablonda tanımlanmıştır. Kaynak yeniden dağıtılacaktır ancak kaynağın özellikleri değişmeyecektir. Sonuç biçimi varsayılan sonuç biçimi olan olarak ayarlandığında FullResourcePayloadsbu değişiklik türü döndürülür.
Değiştir Kaynak mevcuttur ve şablonda tanımlanmıştır. Kaynak yeniden dağıtılacaktır ve kaynağın özellikleri değişecektir. Sonuç biçimi varsayılan sonuç biçimi olan olarak ayarlandığında FullResourcePayloadsbu değişiklik türü döndürülür.
Dağıt Kaynak mevcuttur 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 koşulu yalnızca sonuç biçimi olarak ayarlandığında ResourceIdOnlygörürsünüz.

Tüm değişiklik türlerini bilmeniz gerekmiyorsa, ilgilenmediğiniz türleri atlamak için bağımsız değişkenini -WhatIfExcludeChangeType kullanabilirsiniz.

Tüm değişiklik türlerini bilmeniz gerekmiyorsa, ilgilenmediğiniz türleri atlamak için bağımsız değişkenini --what-if-exclude-change-types kullanabilirsiniz.

Betikte durum sonuçlarını kullanma

Durum işleminin çıkışını bir betik içinde veya otomatik dağıtım işleminin bir parçası olarak kullanmak isteyebilirsiniz.

Cmdlet'ini Get-AzResourceGroupDeploymentWhatIfResult kullanarak sonuçları alabilirsiniz. Ardından betiğiniz sonuçları ayrıştırabilir ve ihtiyacınız olabilecek herhangi bir özel mantığı gerçekleştirebilir.

CLI komutunun bağımsız değişkenini --no-pretty-print ekleyerek ham JSON sonuçlarını alabilirsiniz. Ardından betiğiniz sonuçları ayrıştırabilir ve ihtiyacınız olabilecek herhangi bir özel mantığı gerçekleştirebilir.

Dağıtım modları ve kaynakların silinmesi

Şablonu dağıtırken kaynakların silinmesini onaylamak istediğiniz zamanlar vardır. Bu amaçla, what-if işlemi kullandığınız dağıtım modunu hesaplar. Dağıtım modunun tamamını kullanırsanız Resource Manager, dağıtımınızda tanımlanmadıkları için silinecek kaynakları bildirir.

Şimdi var olan bir kaynağı güncelleştiren ve tam modda dağıtılan bir şablon örneğine bakalım:

Diagram showing change types for three resources, some of which already exist.

Bu örnekte neler olduğuna ilişkin bir açıklama aşağıda verilmişti:

  • Şablon, zaten dağıtılmış olan adlı storage-1bir depolama hesabını güncelleştiriyor. SKU, LRS'den GRS'ye, owner etiket ise değeri A Takımı olarak değiştirmektedir. Durum çıktısı, bu kaynak için değişiklik türünü değiştir'i gösterir.
  • Şablon, adlı yeni bir Azure Cosmos DB hesabı oluşturuyor ve bu hesap cosmos-db-1henüz kaynak grubunda yok. Durum çıktısı, bu kaynak için bir Değişiklik türü oluştur'u gösterir.
  • Şablon, kaynak grubunda zaten var olan Azure SQL mantıksal sunucusunu içermez. Dağıtım tam modu kullandığından, durum çıktısı bu kaynak için silme değişiklik türünü gösterir. Dağıtımda tam mod yerine artımlı mod kullanılıyorsa, değişiklik türü Yoksay olur.

Dağıtımlarınızı onaylayın

Bir şablonu dağıtmadan önce değişiklikleri önizlemek için dağıtım komutuyla parametresini kullanın -Confirm . Değişiklikler beklediğiniz gibi olduğunda dağıtımın tamamlanmasını istediğinizi kabul edin.

İpucu

Dağıtım komutlarınızı özellikle tam modda dağıtıyorsanız anahtarla -Confirm çalıştırmak iyi bir fikirdir. Anahtarı kullanırsanız -Confirm , önerilen değişiklikleri beğenmezseniz işlemi durdurma şansınız olur.

Şablon dağıtmadan önce değişiklikleri önizlemek için dağıtım komutuyla bağımsız değişkenini kullanın --confirm-with-what-if . Değişiklikler beklediğiniz gibi olduğunda dağıtımın tamamlanmasını istediğinizi kabul edin.

İpucu

Dağıtım komutlarınızı özellikle tam modda dağıtıyorsanız bağımsız değişkenle --confirm-with-what-if çalıştırmak iyi bir fikirdir. Anahtarı kullanırsanız --confirm-with-what-if , önerilen değişiklikleri beğenmezseniz işlemi durdurma şansınız olur.