Kaynakları birden çok kapsama dağıtma
Bazen kaynakları tek bir dağıtımdan hiyerarşinizin birden çok düzeyine dağıtmanız gerekir. Bunu yapmak isteyebileceğiniz bazı durumlar şunlardır:
- Kaynakları iki farklı kaynak grubuna dağıtmanız gerekir. Örneğin, paylaşılan bir kaynak grubunda bir ağ güvenlik grubu oluşturmak ve ayrıca uygulamanız için bir kaynak grubundaki sanal makine için bir ağ arabirimi dağıtmak isteyebilirsiniz.
- Abonelik kapsamlı bir kaynak olan bir kaynak grubu oluşturmak için şablon kullanıyorsunuz ve ardından kaynak grubu kapsamlı bir dağıtım kullanarak bu kaynak grubuna bir depolama hesabı ve diğer Azure kaynaklarını dağıtmak istiyorsunuz.
- Bir yönetim grubu hiyerarşisi dağıtıyorsunuz ve ayrıca kiracı kapsamındaki kaynaklar olan bazı abonelikleri dağıtmak istiyorsunuz.
Bicep ile anahtar sözcüğünü kullanarak scope
bir dizi kapsam arasında çalışan bir dağıtım oluşturabilirsiniz.
Dekont
Bu ünitedeki komutlar kavramları göstermek için gösterilir. Komutları henüz çalıştırmayın. Burada öğrendiklerini yakında öğreneceksin.
Modülün kapsamını belirtme
Bicep modüllerini kullanarak dosyada belirtilenden targetScope
farklı bir kapsamda bir kaynak kümesi dağıtabilirsiniz. Aşağıda bir ile dağıtılan targetScope
subscription
ancak bazı kaynakları bir kaynak grubuna dağıtmak için modül kullanan bir örnek Bicep dosyası verilmiştir:
targetScope = 'subscription'
module networkModule 'modules/network.bicep' = {
scope: resourceGroup('ToyNetworking')
name: 'networkModule'
}
Özelliğin scope
hedeflenecek kapsamı tanımlamaya yardımcı olması için bir Bicep işlevi kullandığına dikkat edin. Yukarıdaki örnekte işlevi kullanılır resourceGroup()
ve hedeflenmesi gereken kaynak grubunun adı belirtilir. , ve işlevlerini de kullanabilirsinizsubscription()
managementGroup()
.tenant()
Bicep dosyalarında anahtar sözcüğünü ve scope
modüllerdeki anahtar sözcüğünü kullanarak targetScope
dağıtımlarınız için birçok farklı kapsam bileşimi oluşturabilirsiniz.
Dekont
Bunun bir istisnası, ile bicep dosyalarının resourceGroup
targetScope
veya subscription
içeren bir modül scope
içerememeleridirmanagementGroup
.
Bahşiş
Kaynak grubu oluşturmak için abonelik kapsamlı bicep dosyası kullanıyorsanız, modül için kaynak grubunun sembolik adını scope
kullanabilirsiniz. Sonraki alıştırmada bunu nasıl yapacağınızı göreceksiniz.
Birden çok kaynak grubu arasında dağıtma
Kapsamların yaygın bir kullanımı, kaynakları birden çok kaynak grubuna dağıtmaktır. Azure kaynaklarının scope
çoğunda özelliğini ayarlayamasanız da modüller kullanarak Bicep'e bir kaynak kümesinin farklı bir kaynak grubuna dağıtılması gerektiğini belirtebilirsiniz.
Örneğin, bir sanal ağı ve ilişkili kaynaklarını ToyNetworking adlı paylaşılan bir kaynak grubuna dağıtan tek bir Bicep dosyası kümesi oluşturmak ve ardından farklı bir kaynak grubuna bir ağ arabirimi dağıtmak isteyebilirsiniz. Bicep dosyası şöyle görünür:
module networkModule 'modules/network.bicep' = {
scope: resourceGroup('ToyNetworking')
name: 'networkModule'
}
resource networkInterface 'Microsoft.Network/networkInterfaces@2024-01-01' = {
name: 'production-nic'
location: resourceGroup().location
properties: {
ipConfigurations: [
{
name: 'toy-subnet-ip-configuration'
properties: {
subnet: {
id: networkModule.outputs.subnetResourceId
}
}
}
]
}
}
ToyNetworking kaynak grubuna dağıtılacak kaynakların bir modülde tanımlandığına ve çıkışın subnetResourceId
ağ arabiriminin kaynak tanımında kullanıldığına dikkat edin.
Bu dosyayı dağıttığınızda ProjectTeddybear adlı başka bir kaynak grubunu şu şekilde hedefleyebilirsiniz:
az deployment group create --resource-group ProjectTeddybear ...
New-AzResourceGroupDeployment -ResourceGroupName ProjectTeddybear ...
Dağıtım ProjectTeddybear kaynak grubunu hedeflese de, sanal ağ kaynakları ToyNetworking kaynak grubuna dağıtılır. Ağ arabirimi ProjectTeddybear kaynak grubuna dağıtılır.
Kapsamına abonelik kimliğini ekleyerek bir kaynak grubunu başka bir abonelikte resourceGroup
bile dağıtabilirsiniz:
module networkModule 'modules/network.bicep' = {
scope: resourceGroup('f0750bbe-ea75-4ae5-b24d-a92ca601da2c', 'ToyNetworking')
name: 'networkModule'
}
Benzer şekilde, subscription()
kapsam işlevini kullanarak kaynakları abonelik kapsamındaki birden çok aboneliğe dağıtabilir ve kapsam işlevini kullanarak managementGroup()
kaynakları birden çok yönetim grubuna dağıtabilirsiniz. Ancak, bunları birden çok kiracıya dağıtamazsınız.
Tek bir kaynağın kapsamını belirtme
anahtar sözcüğünü scope
yalnızca modüllerde değil, birkaç farklı kaynak türünde kullanabilirsiniz. Uzantı kaynakları, scope
hangi kaynağa uygulanacağını belirtmek için anahtar sözcüğünü kullanır. Ayrıca, kiracı kapsamlı kaynaklar anahtar sözcüğünü scope
kullanarak bunları herhangi bir şablondan dağıtabilirsiniz.
Örneğin, aşağıdaki örnekte gösterildiği gibi bir yönetim grubu hiyerarşisi oluşturmak için bicep dosyası kullanabilirsiniz:
targetScope = 'managementGroup'
resource parentManagementGroup 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: 'NonProduction'
properties: {
displayName: 'Non-production'
}
}
resource childManagementGroup 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: 'SecretRND'
properties: {
displayName: 'Secret R&D Projects'
details: {
parent: {
id: parentManagementGroup.id
}
}
}
}
Bu örnekte şablon dosyasında kullanıldığına targetScope = 'managementGroup'
, ancak ardından kapsam içindeki yönetim gruplarını dağıttığına tenant()
dikkat edin.
Dekont
Yukarıdaki örnekte, yönetim grubu hiyerarşisi oluşturmak için Bicep'i nasıl kullanabileceğiniz gösterilmektedir. NonProduction yönetim grubu kök yönetim grubunun alt öğesi, SecretRND yönetim grubu ise Üretim Dışı yönetim grubunun alt öğesi olacaktır.
Yönetim grubu ve abonelik hiyerarşisi oluşturma
Artık çeşitli kapsamlarda birçok farklı kaynağı dağıtmayı ve kaynak bileşimlerini dağıtmak için Bicep modüllerini ve scope
anahtar sözcüğünü kullanmayı biliyorsunuz. Yukarıdaki örnekte yönetim grubu hiyerarşisini genişletmek için tüm bu yeni bilgileri uygulayalım. Şimdi hiyerarşi, yeni bir Azure aboneliği oluşturan kiracı kapsamlı bir kaynak olan abonelik diğer adını da içerecektir:
resource subscription 'Microsoft.Subscription/aliases@2024-08-01-preview'
scope: tenant()
name: subscriptionAliasName
properties: {
// ...
}
}
Dekont
Abonelik diğer adı oluşturduğunuzda, faturalama kapsamı gibi diğer bazı özellikleri de belirtirsiniz. Netlik için bunları atladık.
Daha sonra aboneliği bir yönetim grubuyla ilişkilendirebilirsiniz. Bu, adlı Microsoft.Management/managementGroups/subscriptions
bir kaynak türünü dağıtmanızı gerektirir. Bu kaynağın çalışma şekli nedeniyle bunu bir modülde bildirebilirsiniz. Örneğin, modules/mg-subscription-association.bicep adlı bir dosya aşağıda verilmiştir:
targetScope = 'tenant'
@description('The name of the management group that should contain the subscription.')
param managementGroupName string
@description('The subscription ID to place into the management group.')
param subscriptionId string
resource managementGroup 'Microsoft.Management/managementGroups@2023-04-01' existing = {
name: managementGroupName
}
resource subscriptionAssociation 'Microsoft.Management/managementGroups/subscriptions@2023-04-01' = {
parent: managementGroup
name: subscriptionId
}
Yönetim grubuna anahtar sözcüğü aracılığıyla existing
başvurulduğunu fark edin.
Ana Bicep dosyası daha sonra modülünü ekleyerek ilişkilendirmeyi oluşturabilir. İşte bicep dosyasının tamamı:
targetScope = 'managementGroup'
@description('The name of the subscription alias to deploy.')
param subscriptionAliasName string
resource parentManagementGroup 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: 'NonProduction'
properties: {
displayName: 'Non-production'
}
}
resource childManagementGroup 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: 'SecretRND'
properties: {
displayName: 'Secret R&D Projects'
details: {
parent: {
id: parentManagementGroup.id
}
}
}
}
resource subscription 'Microsoft.Subscription/aliases@2024-08-01-preview'
scope: tenant()
name: subscriptionAliasName
properties: {
// ...
}
}
module subscriptionAssociation 'modules/mg-subscription-association.bicep' = {
name: 'subscriptionAssociation'
scope: tenant()
params: {
managementGroupName: childManagementGroup.name
subscriptionId: subscription.properties.subscriptionId
}
}
Gördüğünüz gibi, tüm Azure altyapınızın karmaşık dağıtımlarını oluşturmak için tüm kapsamları ve Bicep dil özelliklerini birlikte kullanabilirsiniz.