Dağıtım yığınları (Önizleme)

Azure dağıtım yığını, bir grup Azure kaynağının atomik birim olarak yönetilmesini sağlayan bir Azure kaynağı türüdür. Bir Bicep dosyası veya ARM JSON şablonu bir dağıtım yığınına gönderildiğinde, yığın tarafından yönetilen kaynakları tanımlar. Şablona daha önce eklenmiş olan bir kaynak kaldırılırsa, dağıtım yığınının belirtilen actionOnUnmanage davranışına göre ayrılır veya silinir. Diğer Azure kaynaklarına benzer şekilde, Azure rol tabanlı erişim denetimi (Azure RBAC) kullanılarak dağıtım yığınına erişim kısıtlanabilir.

Dağıtım yığını oluşturmak ve güncelleştirmek için Azure CLI, Azure PowerShell veya Azure portalını Bicep dosyalarıyla birlikte kullanabilirsiniz. Bu Bicep dosyaları ARM JSON şablonlarına dönüştürülür ve daha sonra yığın tarafından dağıtım nesnesi olarak dağıtılır. Dağıtım yığını, tanıdık dağıtım kaynaklarının ötesinde ek özellikler sunar ve bu özelliklerin üst kümesi olarak hizmet eder.

Microsoft.Resources/deploymentStacks dağıtım yığınları için kaynak türüdür. Tanımladığı kaynaklarda kapsamlar arasında 1-çok güncelleştirmeler gerçekleştirebilen ve bu kaynaklarda istenmeyen değişiklikleri engelleyebilecek bir ana şablondan oluşur.

Dağıtımınızı planlarken ve hangi kaynak gruplarının aynı yığının parçası olması gerektiğini belirlerken, bu kaynakların oluşturma, güncelleştirme ve silme gibi yönetim yaşam döngüsünü göz önünde bulundurmanız önemlidir. Örneğin, farklı kaynak grubu kapsamlarında çeşitli uygulama ekipleri için bazı test VM'leri sağlamanız gerektiğini varsayalım. Bu durumda, bu test ortamlarını oluşturmak ve sonraki dağıtım yığını güncelleştirmeleri aracılığıyla test VM yapılandırmalarını güncelleştirmek için bir dağıtım yığını kullanılabilir. Projeyi tamamladıktan sonra, test VM'leri gibi oluşturulan kaynakları kaldırmak veya silmek gerekebilir. Dağıtım yığını kullanılarak, uygun silme bayrağı belirtilerek yönetilen kaynaklar kolayca kaldırılabilir. Bu kolaylaştırılmış yaklaşım, çeşitli kaynak grubu kapsamlarında her test VM'sini ayrı ayrı değiştirmek veya kaldırmak yerine yığın kaynağında tek bir güncelleştirme içerdiğinden, ortam temizleme sırasında zaman kazandırır.

Dağıtım yığınları için Azure PowerShell sürüm 10.1.0 veya üzeri ya da Azure CLI sürüm 2.50.0 veya üzeri gerekir.

İlk dağıtım yığınınızı oluşturmak için Hızlı Başlangıç: dağıtım yığını oluşturma konusunu inceleyin.

Dağıtım yığınları neden kullanılır?

Dağıtım yığınları aşağıdaki avantajları sağlar:

  • Farklı kapsamlardaki kaynakların uyumlu bir varlık olarak basitleştirilmiş sağlanması ve yönetilmesi.
  • Reddetme ayarları aracılığıyla yönetilen kaynaklarda istenmeyen değişiklikleri önleme.
  • Dağıtım yığını güncelleştirmeleri sırasında silme bayrakları kullanarak verimli ortam temizleme.
  • Dağıtım yığınlarınız için Bicep, ARM şablonları veya Şablon belirtimleri gibi standart şablonları kullanma.

Bilinen sınırlamalar

  • Örtük olarak oluşturulan kaynaklar yığın tarafından yönetilmez. Bu nedenle, reddetme atamaları veya temizleme mümkün değildir.
  • Reddetme atamaları etiketleri desteklemez.
  • Reddetme atamaları yönetim grubu kapsamında desteklenmez.
  • Dağıtım yığınları Anahtar kasası gizli dizilerini silemez. Şablondan anahtar kasası gizli dizilerini kaldırıyorsanız ayırma moduyla dağıtım yığını güncelleştirme/silme komutunu da yürüttüğünizden emin olun.

Bilinen sorunlar

  • Kaynak gruplarının silinmesi şu anda reddetme atamalarını atlar. Kaynak grubu kapsamında bir dağıtım yığını oluştururken, Bicep dosyası kaynak grubunun tanımını içermez. Atamayı reddet ayarına rağmen kaynak grubunu ve içerdiği yığını silmek mümkündür. Ancak, grup içindeki herhangi bir kaynakta bir kilit etkinse silme işlemi başarısız olur.
  • Durum önizlemede kullanılamaz.
  • Yönetim grubu kapsamlı yığının başka bir yönetim grubuna dağıtılması kısıtlanmıştır. Yalnızca yığının yönetim grubuna veya bir alt aboneliğe dağıtılabilir.

Dağıtım yığınları oluşturma

Bir dağıtım yığını kaynağı kaynak grubu, abonelik veya yönetim grubu kapsamında oluşturulabilir. Dağıtım yığınına geçirilen şablon, şablon dağıtımı için belirtilen hedef kapsamda oluşturulacak veya güncelleştirilecek kaynakları tanımlar.

  • Kaynak grubu kapsamındaki bir yığın, geçirilen şablonu dağıtım yığınının bulunduğu kaynak grubu kapsamına dağıtabilir.
  • Abonelik kapsamındaki bir yığın, geçirilen şablonu bir kaynak grubu kapsamına (belirtilmişse) veya dağıtım yığınının bulunduğu abonelik kapsamına dağıtabilir.
  • Yönetim grubu kapsamındaki bir yığın, geçirilen şablonu belirtilen abonelik kapsamına dağıtabilir.

Dağıtım yığınının bulunduğu yere, reddetme ayarları özelliğiyle oluşturulan reddetme atamasının da olduğuna dikkat etmek önemlidir. Örneğin, şablonu kaynak grubu kapsamına dağıtan ve reddetme ayarları moduyla DenyDeleteabonelik kapsamında bir dağıtım yığını oluşturarak, yönetilen kaynakları belirtilen kaynak grubuna kolayca sağlayabilir ve bu kaynaklara yönelik silme girişimlerini engelleyebilirsiniz. Bu yaklaşımı kullanarak, dağıtım yığınını kaynak grubu düzeyinden farklı olarak abonelik düzeyinde ayırarak da güvenliği artırırsınız. Bu ayrım, sağlanan kaynaklarla çalışan geliştirici ekiplerinin yalnızca kaynak gruplarına görünürlük ve yazma erişimine sahip olmasını sağlarken, dağıtım yığını daha yüksek bir düzeyde yalıtılmış durumda kalır. Bu, dağıtım yığınını düzenleyebilen ve reddetme ataması üzerinde değişiklik yapabilen kullanıcı sayısını en aza indirir. Daha fazla bilgi için bkz . Yönetilen kaynağı silinmeye karşı koruma.

Create-stack komutları, dağıtım yığınlarını güncelleştirmek için de kullanılabilir.

Kaynak grubu kapsamında bir dağıtım yığını oluşturmak için:

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

Abonelik kapsamında bir dağıtım yığını oluşturmak için:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

parametresi, DeploymentResourceGroupName yönetilen kaynakları depolamak için kullanılan kaynak grubunu belirtir. Parametresi belirtilmezse, yönetilen kaynaklar abonelik kapsamında depolanır.

Yönetim grubu kapsamında bir dağıtım yığını oluşturmak için:

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

parametresi, deploymentSubscriptionId yönetilen kaynakları depolamak için kullanılan aboneliği belirtir. Parametre belirtilmezse, yönetilen kaynaklar yönetim grubu kapsamında depolanır.

Dağıtım yığınlarını listeleme

Dağıtım yığını kaynaklarını kaynak grubu kapsamında listelemek için:

Get-AzResourceGroupDeploymentStack `
  -ResourceGroupName "<resource-group-name>"

Dağıtım yığını kaynaklarını abonelik kapsamında listelemek için:

Get-AzSubscriptionDeploymentStack

Dağıtım yığını kaynaklarını yönetim grubu kapsamında listelemek için:

Get-AzManagementGroupDeploymentStack `
  -ManagementGroupId "<management-group-id>"

Dağıtım yığınlarını güncelleştirme

Yönetilen kaynak eklemeyi veya silmeyi içerebilen bir dağıtım yığınını güncelleştirmek için, temel alınan Bicep dosyalarında değişiklik yapmanız gerekir. Değişiklikler yapıldıktan sonra dağıtım yığınını güncelleştirmek için iki seçeneğiniz vardır: update komutunu çalıştırın veya create komutunu yeniden çalıştırın.

Yönetilen kaynakların listesi, kod olarak altyapı (IaC) tasarım deseni aracılığıyla tam olarak denetlenebilir.

Ayarla komutunu kullanma

Kaynak grubu kapsamındaki bir dağıtım yığınını güncelleştirmek için:

Set-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

Abonelik kapsamındaki bir dağıtım yığınını güncelleştirmek için:

Set-AzSubscriptionDeploymentStack `
   -Name "<deployment-stack-name>" `
   -Location "<location>" `
   -TemplateFile "<bicep-file-name>" `
   -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

parametresi, DeploymentResourceGroupName dağıtım yığını kaynaklarını depolamak için kullanılan kaynak grubunu belirtir. Kaynak grubu adı belirtmezseniz dağıtım yığını hizmeti sizin için yeni bir kaynak grubu oluşturur.

Yönetim grubu kapsamında bir dağıtım yığınını güncelleştirmek için:

Set-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

Yeni komutunu kullanma

Aşağıdakine benzer bir uyarı alırsınız:

The deployment stack 'myStack' you're trying to create already exists in the current subscription/management group/resource group. Do you want to overwrite it? Detaching: resources, resourceGroups (Y/N)

Daha fazla bilgi için bkz . Dağıtım yığınları oluşturma.

Ayırmayı ve silmeyi denetleme

Ayrılmış kaynak (veya yönetilmeyen kaynak), dağıtım yığını tarafından izlenmeyen veya yönetilmeyen ancak Azure'da hala var olan bir kaynağı ifade eder.

Azure'a yönetilmeyen kaynakları silmesini bildirmek için yığını aşağıdaki silme bayraklarından biriyle yığın oluştur komutuyla güncelleştirin. Daha fazla bilgi için bkz . Dağıtım yığını oluşturma.

  • DeleteAll: yönetilen kaynaklar ve kaynak grupları için ayırmak yerine silmeyi kullanın.
  • DeleteResources: yalnızca yönetilen kaynaklar için ayırmak yerine silmeyi kullanın.
  • DeleteResourceGroups: yalnızca yönetilen kaynak grupları için ayırmak yerine silmeyi kullanın. Tek başına kullanmak DeleteResourceGroups geçersiz. DeleteResourceGroups ile DeleteResourcesbirlikte kullanılmalıdır.

Örneğin:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none" `
  -DeleteResourceGroups `
  -DeleteResources

Uyarı

veya DeleteResourceGroups özelliklerine sahip DeleteAll kaynak grupları silinirken, yönetilen kaynak grupları ve bunların içindeki tüm kaynaklar da silinir.

Dağıtım yığınlarını silme

Silme komutlarını silme bayrakları olmadan çalıştırırsanız yönetilmeyen kaynaklar ayrılır ancak silinmez. Yönetilmeyen kaynakları silmek için aşağıdaki anahtarları kullanın:

  • DeleteAll: Hem kaynakları hem de kaynak gruplarını silin.
  • DeleteResources: Yalnızca kaynakları silin.
  • DeleteResourceGroups: Yalnızca kaynak gruplarını silin.

Tümünü sil anahtarını belirtseniz bile, dağıtım yığınının bulunduğu kaynak grubunda yönetilmeyen kaynaklar varsa, hem yönetilmeyen kaynak hem de kaynak grubunun kendisi silinmez.

Kaynak grubu kapsamındaki dağıtım yığını kaynaklarını silmek için:

Remove-AzResourceGroupDeploymentStack `
  -name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Abonelik kapsamındaki dağıtım yığını kaynaklarını silmek için:

Remove-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Yönetim grubu kapsamında dağıtım yığını kaynaklarını silmek için:

Remove-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Yönetilen kaynakları dağıtım yığınında görüntüleme

Genel önizleme sırasında dağıtım yığını hizmetinin henüz bir Azure portalı grafik kullanıcı arabirimi (GUI) yoktur. Dağıtım yığını içindeki yönetilen kaynakları görüntülemek için aşağıdaki Azure Powershell/Azure CLI komutlarını kullanın:

Yönetilen kaynakları kaynak grubu kapsamında görüntülemek için:

(Get-AzResourceGroupDeploymentStack -Name "<deployment-stack-name>" -ResourceGroupName "<resource-group-name>").Resources

Yönetilen kaynakları abonelik kapsamında görüntülemek için:

(Get-AzSubscriptionDeploymentStack -Name "<deployment-stack-name>").Resources

Yönetilen kaynakları yönetim grubu kapsamında görüntülemek için:

(Get-AzManagementGroupDeploymentStack -Name "<deployment-stack-name>" -ManagementGroupId "<management-group-id>").Resources

Dağıtım yığınına kaynak ekleme

Yönetilen kaynak eklemek için kaynak tanımını temel alınan Bicep dosyalarına ekleyin ve ardından update komutunu çalıştırın veya create komutunu yeniden çalıştırın. Daha fazla bilgi için bkz . Dağıtım yığınlarını güncelleştirme.

Yönetilen kaynakları dağıtım yığınından silme

Yönetilen bir kaynağı silmek için, temel alınan Bicep dosyalarından kaynak tanımını kaldırın ve ardından update komutunu çalıştırın veya create komutunu yeniden çalıştırın. Daha fazla bilgi için bkz . Dağıtım yığınlarını güncelleştirme.

Yönetilen kaynakları silinmeye karşı koruma

Dağıtım yığını oluştururken, yönetilen kaynaklara yetkisiz güvenlik sorumluları tarafından silinmesini engelleyen belirli bir izin türü atamak mümkündür. Bu ayarlar reddetme ayarları olarak adlandırılır. Yığını üst kapsamda depolamak istiyorsunuz.

Azure PowerShell, reddetme atamasını özelleştirmek için şu parametreleri içerir:

  • DenySettingsMode: Yönetilen kaynaklarda, bunları silmeye veya güncelleştirmeye çalışan yetkisiz güvenlik sorumlularına karşı koruma sağlamak için yasaklanan işlemleri tanımlar. Bu kısıtlama, açıkça erişim verilmediği sürece herkes için geçerlidir. Değerler şunlardır: None, DenyDeleteve DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: Reddetme ayarları yönetilen kaynaklar altındaki iç içe kaynaklara uygulanır.
  • DenySettingsExcludedAction: Reddetme ayarlarından dışlanan rol tabanlı yönetim işlemlerinin listesi. En fazla 200 eyleme izin verilir.
  • DenySettingsExcludedPrincipal: Kilit dışında tutulan Microsoft Entra asıl kimliklerinin listesi. En fazla beş sorumluya izin verilir.

Kaynak grubu kapsamında reddetme ayarlarını uygulamak için:

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Abonelik kapsamında reddetme ayarlarını uygulamak için:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Dağıtım yığınının DeploymentResourceGroupName oluşturulduğu kaynak grubu adını belirtmek için parametresini kullanın. Kapsam belirtilmezse dağıtım yığınının kapsamını kullanır.

Yönetim grubu kapsamında reddetme ayarlarını uygulamak için:

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedActions "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Dağıtım yığınının DeploymentSubscriptionId oluşturulduğu abonelik kimliğini belirtmek için parametresini kullanın. Kapsam belirtilmezse dağıtım yığınının kapsamını kullanır.

Yönetilen kaynakları dağıtım yığınından ayırma

Varsayılan olarak, dağıtım yığınları artık yığının yönetim kapsamında yer almadığında yönetilmeyen kaynakları ayırır ve silmez. Daha fazla bilgi için bkz . Dağıtım yığınlarını güncelleştirme.

Şablonları dağıtım yığınlarından dışarı aktarma

Kaynakları bir dağıtım yığınından JSON çıkışına aktarabilirsiniz. Çıktıyı bir dosyaya aktarabilirsiniz.

Dağıtım yığınını kaynak grubu kapsamında dışarı aktarmak için:

Save-AzResourceGroupDeploymentStack `
   -Name '<deployment-stack-name>' `
   -ResourceGroupName '<resource-group-name>' `

Abonelik kapsamındaki bir dağıtım yığınını dışarı aktarmak için:

Save-AzSubscriptionDeploymentStack `
  -name '<deployment-stack-name>'

Yönetim grubu kapsamında bir dağıtım yığınını dışarı aktarmak için:

Save-AzManagmentGroupDeploymentStack `
  -Name '<deployment-stack-name>' `
  -ManagementGroupId '<management-group-id>'

Sonraki adımlar

Hızlı bir başlangıç yapmak için bkz . Hızlı Başlangıç: dağıtım yığını oluşturma.