what-if komutunu kullanarak dağıtımın yapacağı işlemlerle ilgili tahminde bulunma
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 FullResourcePayloads bu 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 FullResourcePayloads bu 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 ResourceIdOnly gö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:
Bu örnekte neler olduğuna ilişkin bir açıklama aşağıda verilmişti:
- Şablon, zaten dağıtılmış olan adlı
storage-1
bir 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-1
henü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.