Bicep modüllerini kullanma

Bicep, karmaşık bir çözümü modüllere kesmeye olanak sağlar. Bicep modülü birlikte dağıtılacak bir veya daha fazla kaynak kümesidir. Modüller ham kaynak bildiriminin karmaşık ayrıntılarını soyutlar ve bu da okunabilirliği artırabilir. Bu modülleri yeniden kullanabilir ve diğer kişilerle paylaşabilirsiniz. Bicep modülleri, dağıtım için iç içe şablonları olan tek bir ARM şablonuna dönüştürebilirsiniz.

Öğretici için bkz. Bicep şablonlarını kullanarak Azure kaynaklarını dağıtma.

Modülleri tanımlama

Her Bicep dosyası modül olarak kullanılabilir. Modül yalnızca parametreleri ve çıkışları diğer Bicep dosyalarında sözleşme olarak ortaya çıkarır. Hem parametreler hem de çıkışlar isteğe bağlıdır.

Aşağıdaki Bicep dosyası bir depolama hesabı oluşturmak için doğrudan dağıtılabilir veya modül olarak kullanılabilir. Sonraki bölümde modülleri nasıl tüketirsiniz?

@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@2019-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Çıktı, değerleri üst Bicep dosyalarına geçmek için kullanılır.

Modülleri tüketme

Modül kullanmak için module anahtar sözcüğünü kullanın. Aşağıdaki Bicep dosyası başvurulan modül dosyasında tanımlanan kaynağı dağıtır:

@minLength(3)
@maxLength(11)
param namePrefix string
param location string = resourceGroup().location

module stgModule './storageAccount.bicep' = {
  name: 'storageDeploy'
  params: {
    storagePrefix: namePrefix
    location: location
  }
}

output storageEndpoint object = stgModule.outputs.storageEndpoint
  • module: Anahtar sözcük.

  • sembolik ad (stgModule): Modülün tanımlayıcısı.

  • modül dosyası: Modül dosyalarına göreli yollar kullanılarak başvurulları gerekir. Tutarlı derlemenin platformlar arası olduğundan emin olmak için Bicep'te tüm yollar eğik çizgi (/) dizin ayırıcısı kullanılarak belirtilmelidir. Tek Windows ( \ ) karakteri desteklenmiyor. Yollar boşluk içerebilir.

  • Bir modül kullanılırken name özelliği (storageDeploy) gereklidir. Bicep şablon IL'yi oluşturursa, bu alan modül için oluşturulan iç içe dağıtım kaynağının adı olarak kullanılır:

    ...
    ...
    "resources": [
      {
        "type": "Microsoft.Resources/deployments",
        "apiVersion": "2020-10-01",
        "name": "storageDeploy",
        "properties": {
          ...
        }
      }
    ]
    ...
    
  • params özelliği, modül dosyasına geçilen parametreleri içerir. Bu parametreler, Bicep dosyasında tanımlanan parametrelerle eştir.

Kaynaklar gibi modüller de diğer modüllere veya kaynak dağıtımlara bağlı olmadığı sürece paralel olarak dağıtılır. Bağımlılıklar hakkında daha fazla bilgi edinmek için bkz. Kaynak bağımlılıklarını ayarlama.

Bir modülden çıkış değeri almak için özellik değerini şu söz dizimleriyle stgModule.outputs.storageEndpoint stgModule alın: burada, modülün tanımlayıcısıdır.

Bir modülü koşullu olarak dağıtabilirsiniz. Bir kaynağı koşullu olarak dağıtırken kullanabileceğiniz söz dizimleri ile aynı şekilde kullanın.

param deployZone bool

module dnsZone 'dnszones.bicep' = if (deployZone) {
  name: 'myZoneModule'
}

Döngüleri kullanarak bir modülü birden çok kez dağıtabilirsiniz. Daha fazla bilgi için bkz. Bicep'te modül yineleme.

Modül kapsamlarını yapılandırma

Modülü bildirerek modülün dağıtıla kapsamını ayarlamak için bir kapsam özelliği sabilirsiniz:

module stgModule './storageAccount.bicep' = {
  name: 'storageDeploy'
  scope: resourceGroup('someOtherRg') // pass in a scope to a different resourceGroup
  params: {
    storagePrefix: namePrefix
    location: location
  }
}

Modülün hedef kapsamı ve üst öğenin hedef kapsamı aynı olduğunda kapsam özelliği atlanabilir. Kapsam özelliği sağlanamıyorsa, modül üst öğenin hedef kapsamında dağıtılır.

Aşağıdaki Bicep dosyası, kaynak grubu oluşturma ve kaynak grubuna modül dağıtmayı gösterir:

// 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 myResourceGroup 'Microsoft.Resources/resourceGroups@2020-01-01' = {
  name: resourceGroupName
  location: location
  scope: subscription()
}

module stgModule './storageAccount.bicep' = {
  name: 'storageDeploy'
  scope: myResourceGroup
  params: {
    storagePrefix: namePrefix
    location: location
  }
}

output storageEndpoint object = stgModule.outputs.storageEndpoint

Kapsam özelliği geçerli bir kapsam nesnesine ayar olmalıdır. Bicep dosyanız bir kaynak grubu, abonelik veya yönetim grubu dağıtıyorsa, bir modülün kapsamını bu kaynağın sembolik adı olarak ayarlayın. Bu yaklaşım, bir kaynak grubunun oluşturularak modülün kapsamı için kullanılan önceki örnekte gösterilmiştir.

Veya geçerli bir kapsam almak için kapsam işlevlerini kullanabilirsiniz. Bu işlevler şunlardır:

Sonraki adımlar