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 repository Azure 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