Bıcep modülleri
Bıcep, dağıtımları modüller halinde düzenlemenizi sağlar. Modül, başka bir bicep dosyasından dağıtılan yalnızca bir Bıcep dosyasıdır. Modüllerle, dağıtımınızın karmaşık ayrıntılarını kapsülleyerek Bıcep dosyalarınızın okunabilirliğini geliştirebilirsiniz. Farklı dağıtımlar için modülleri de kolayca yeniden kullanabilirsiniz.
Modülleri kuruluşunuzdaki diğer kişilerle paylaşmak için bir şablon belirtimi veya özel kayıt defterioluşturun. Kayıt defterindeki şablon özellikleri ve modülleri yalnızca doğru izinlere sahip kullanıcılar tarafından kullanılabilir.
İpucu
Şablon özellikleri ve özel kayıt defterleri arasındaki seçim çoğunlukla tercihlerin bir önemi vardır. Başka proje yapıtları olmadan şablonlar veya bicep dosyaları dağıtıyorsanız, şablon özellikleri daha kolay bir seçenektir. Şablonlar veya Bıcep dosyaları ile proje yapıtları dağıtıyorsanız, özel kayıt defterini geliştirme çalışmaınızla tümleştirebilir ve sonra tümünü kayıt defterinden daha kolay bir şekilde dağıtabilirsiniz.
Bıcep modülleri, iç içe şablonlariçeren tek bir Azure Resource Manager şablonuna dönüştürülür.
Microsoft Learn
Modüller hakkında daha fazla bilgi edinmek ve uygulamalı yönergeler için bkz. Microsoft Learn modüller kullanarak birleştirilebilir bicep dosyaları oluşturma .
Tanım sözdizimi
Modül tanımlamak için temel sözdizimi şöyledir:
module <symbolic-name> '<path-to-file>' = {
name: '<linked-deployment-name>'
params: {
<parameter-names-and-values>
}
}
Bu nedenle, basit ve gerçek hayatta bir örnek şöyle görünür:
module stgModule '../storageAccount.bicep' = {
name: 'storageDeploy'
params: {
storagePrefix: 'examplestg1'
}
}
Simgesel adı kullanarak Bıcep dosyasının başka bir bölümündeki modüle başvurabilirsiniz. Örneğin, bir modülün çıktısını almak için simgesel adı kullanabilirsiniz. Sembolik ad a-z, A-Z, 0-9 ve alt çizgi ( _ ) içerebilir. Ad bir sayıyla başlayamaz. Modül bir parametre, değişken veya kaynakla aynı ada sahip olamaz.
Yol, bir yerel dosya ya da bir kayıt defterindeki dosya olabilir. Daha fazla bilgi için bkz. modülün yolu.
Name özelliği gereklidir. Oluşturulan şablonda iç içe geçmiş dağıtım kaynağının adı olur.
Ana dosyanın kapsamından farklı bir kapsam belirtmeniz gerekiyorsa, Scope özelliğini ekleyin. Daha fazla bilgi için bkz. Modül kapsamını ayarlama.
// deploy to different scope
module <symbolic-name> '<path-to-file>' = {
name: '<linked-deployment-name>'
scope: <scope-object>
params: {
<parameter-names-and-values>
}
}
Bir modülü koşullu olarak dağıtmak için bir if ifade ekleyin. Kullanım, bir kaynağı koşullu olarak dağıtmayabenzer.
// conditional deployment
module <symbolic-name> '<path-to-file>' = if (<condition-to-deploy>) {
name: '<linked-deployment-name>'
params: {
<parameter-names-and-values>
}
}
Bir modülün birden fazla örneğini dağıtmak için, for ifadesini ekleyin. batchSizeÖrneklerin işlem temelli veya paralel olarak dağıtılıp dağıtılmayacağını belirtmek için dekoratörü kullanabilirsiniz. Daha fazla bilgi için bkz. Bıcep 'de yinelemeli döngüler.
// iterative deployment
@batchSize(int) // optional decorator for serial deployment
module <symbolic-name> '<path-to-file>' = [for <item> in <collection>: {
name: '<linked-deployment-name>'
params: {
<parameter-names-and-values>
}
}]
Kaynaklar gibi, modüller diğer modüllere veya kaynaklara bağlı olmadıkları takdirde paralel olarak dağıtılır. Genellikle, bağımlılıkları örtük olarak belirlendikleri şekilde ayarlamanız gerekmez. Açık bir bağımlılık ayarlamanız gerekiyorsa, dependsOn Modül tanımına ekleyebilirsiniz. Bağımlılıklar hakkında daha fazla bilgi için bkz. kaynak bağımlılıkları.
module <symbolic-name> '<path-to-file>' = {
name: '<linked-deployment-name>'
params: {
<parameter-names-and-values>
}
dependsOn: [
<symbolic-names-to-deploy-before-this-item>
]
}
Modülün yolu
Modülün dosyası yerel bir dosya ya da bir dış dosya olabilir. Dış dosya, şablon belirtiminde veya bir Bıcep modülü kayıt defterinde olabilir. Bu seçeneklerin hepsi aşağıda gösterilmiştir.
Yerel dosya
Modül yerel bir dosya ise, bu dosyaya göreli bir yol sağlayın. Platformlar genelinde tutarlı derleme sağlamak için Bıcep içindeki tüm yollar, eğik çizgi (/) dizin ayırıcısı kullanılarak belirtilmelidir. Windows ters eğik çizgi ( \ ) karakteri desteklenmez. Yollar boşluk içerebilir.
Örneğin, ana dosyanızdaki dizinde bir düzey yukarı bir dosya dağıtmak için şunu kullanın:
module stgModule '../storageAccount.bicep' = {
name: 'storageDeploy'
params: {
storagePrefix: 'examplestg1'
}
}
Kayıt defterindeki dosya
Bir kayıt defterine bir modül yayımladıysanız, bu modüle bağlanabilirsiniz. Azure Container kayıt defteri için ad ve modülün yolunu belirtin. Aşağıdaki sözdizimine sahip modül yolunu belirtin:
module <symbolic-name> 'br:<registry-name>.azurecr.io/<file-path>:<tag>' = {
- br , bir Bıcep kayıt defteri için şema adıdır.
- dosya yolu
repositoryAzure Container Registry ' de çağrılır. Dosya yolu , karakteriyle ayrılmış kesimleri içerebilir/. - etiketi modül için bir sürüm belirtmek için kullanılır.
Örnek:
module stgModule 'br:exampleregistry.azurecr.io/bicep/modules/storage:v1' = {
name: 'storageDeploy'
params: {
storagePrefix: 'examplestg1'
}
}
kayıt defterindeki bir modüle başvuru yaptığınızda, Visual Studio Code içindeki bıcep uzantısı, dış modülü yerel önbelleğe kopyalamak için otomatik olarak bıcep geri yükleme yöntemini çağırır. Dış modülün geri yüklenmesi birkaç dakika sürer. Modül için IntelliSense hemen çalışmazsa geri yüklemenin tamamlanmasını bekleyin.
Kayıt defterindeki bir modülün tam yolu uzun olabilir. Modülünü her kullanmak istediğinizde tam yolu sağlamak yerine bıcepconfig. JSON dosyasındaki diğer adları yapılandırabilirsiniz. Diğer adlar modüle başvuruyu daha kolay hale getirir. Örneğin, bir diğer ad ile yolu kısaltıp şunu yapabilirsiniz:
module stgModule 'br/ContosoModules:storage:v1' = {
name: 'storageDeploy'
params: {
storagePrefix: 'examplestg1'
}
}
Şablon belirtiminde dosya
Bir şablon belirtimioluşturduktan sonra, bu şablon belirtimine bir modül içinde bağlanabilirsiniz. Şablon belirtimini aşağıdaki biçimde belirtin:
module <symbolic-name> 'ts:<sub-id>/<rg-name>/<template-spec-name>:<version>' = {
Ancak, şablon belirtimlerinizi içeren kaynak grubu için bir diğer ad oluşturarak Bıcep dosyanızı basitleştirebilirsiniz. Bir diğer ad kullanıldığında söz dizimi şu şekilde olur:
module <symbolic-name> 'ts/<alias>:<template-spec-name>:<version>' = {
Aşağıdaki modül bir depolama hesabı oluşturmak için bir şablon belirtimi dağıtır. Şablon belirtiminin abonelik ve kaynak grubu contosospec adlı diğer ad içinde tanımlanır.
module stgModule 'ts/ContosoSpecs:storageSpec:2.0' = {
name: 'storageDeploy'
params: {
storagePrefix: 'examplestg1'
}
}
Parametreler
Modül tanımınızda sağladığınız parametreler Bıcep dosyasındaki parametrelerle eşleşir.
Aşağıdaki bicep örneğinde üç parametre vardır-storagePrefix, storageSKU ve Location. StorageSKU parametresi varsayılan bir değere sahiptir, bu nedenle dağıtım sırasında bu parametre için bir değer belirtmeniz gerekmez.
@minLength(3)
@maxLength(11)
param storagePrefix string
@allowed([
'Standard_LRS'
'Standard_GRS'
'Standard_RAGRS'
'Standard_ZRS'
'Premium_LRS'
'Premium_ZRS'
'Standard_GZRS'
'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'
param location string
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
output storageEndpoint object = stg.properties.primaryEndpoints
Önceki örneği bir modül olarak kullanmak için bu parametrelerin değerlerini sağlayın.
targetScope = 'subscription'
@minLength(3)
@maxLength(11)
param namePrefix string
resource demoRG 'Microsoft.Resources/resourceGroups@2021-04-01' existing = {
name: 'demogroup1'
}
module stgModule '../create-storage-account/main.bicep' = {
name: 'storageDeploy'
scope: demoRG
params: {
storagePrefix: namePrefix
location: demoRG.location
}
}
output storageEndpoint object = stgModule.outputs.storageEndpoint
Modül kapsamını ayarla
Bir modül bildirirken, modül için kapsayan bicep dosyası kapsamından farklı bir kapsam ayarlayabilirsiniz. scopeModülün kapsamını ayarlamak için özelliğini kullanın. Scope özelliği sağlanmazsa, modül üst öğenin hedef kapsamında dağıtılır.
Aşağıdaki Bıcep dosyası, kaynak grubunda bir kaynak grubu ve bir depolama hesabı oluşturur. Dosya bir aboneliğe dağıtılır, ancak modül yeni kaynak grubunun kapsamına alınır.
// set the target scope for this file
targetScope = 'subscription'
@minLength(3)
@maxLength(11)
param namePrefix string
param location string = deployment().location
var resourceGroupName = '${namePrefix}rg'
resource newRG 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name: resourceGroupName
location: location
}
module stgModule '../create-storage-account/main.bicep' = {
name: 'storageDeploy'
scope: newRG
params: {
storagePrefix: namePrefix
location: location
}
}
output storageEndpoint object = stgModule.outputs.storageEndpoint
Sonraki örnek, depolama hesaplarını iki farklı kaynak grubuna dağıtır. Bu kaynak gruplarının her ikisi de zaten var olmalıdır.
targetScope = 'subscription'
resource firstRG 'Microsoft.Resources/resourceGroups@2021-04-01' existing = {
name: 'demogroup1'
}
resource secondRG 'Microsoft.Resources/resourceGroups@2021-04-01' existing = {
name: 'demogroup2'
}
module storage1 '../create-storage-account/main.bicep' = {
name: 'westusdeploy'
scope: firstRG
params: {
storagePrefix: 'stg1'
location: 'westus'
}
}
module storage2 '../create-storage-account/main.bicep' = {
name: 'eastusdeploy'
scope: secondRG
params: {
storagePrefix: 'stg2'
location: 'eastus'
}
}
Scope özelliğini geçerli bir Scope nesnesi olarak ayarlayın. Bıcep dosyanız bir kaynak grubu, abonelik veya yönetim grubu dağıttığında, bir modülün kapsamını o kaynak için simgesel ad olarak ayarlayabilirsiniz. Ya da, geçerli bir kapsam almak için kapsam işlevlerini kullanabilirsiniz.
Bu işlevler şunlardır:
Aşağıdaki örnek, managementGroup kapsamını ayarlamak için işlevini kullanır.
param managementGroupName string
module mgDeploy 'main.bicep' = {
name: 'deployToMG'
scope: managementGroup(managementGroupName)
}
Çıktı
Bir modülden değer alabilir ve bunları ana bicep dosyasında kullanabilirsiniz. Bir modülden çıkış değeri almak için outputs Modül nesnesindeki özelliğini kullanın.
İlk örnek bir depolama hesabı oluşturur ve birincil uç noktaları döndürür.
@minLength(3)
@maxLength(11)
param storagePrefix string
@allowed([
'Standard_LRS'
'Standard_GRS'
'Standard_RAGRS'
'Standard_ZRS'
'Premium_LRS'
'Premium_ZRS'
'Standard_GZRS'
'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'
param location string
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
output storageEndpoint object = stg.properties.primaryEndpoints
Modül olarak kullanıldığında, bu çıkış değerini alabilirsiniz.
targetScope = 'subscription'
@minLength(3)
@maxLength(11)
param namePrefix string
resource demoRG 'Microsoft.Resources/resourceGroups@2021-04-01' existing = {
name: 'demogroup1'
}
module stgModule '../create-storage-account/main.bicep' = {
name: 'storageDeploy'
scope: demoRG
params: {
storagePrefix: namePrefix
location: demoRG.location
}
}
output storageEndpoint object = stgModule.outputs.storageEndpoint
Sonraki adımlar
- Öğretici için bkz. Bıcep şablonlarını kullanarak Azure kaynaklarını dağıtma.
- Bir modüle hassas bir değer geçmek için getSecret işlevini kullanın.