Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bicep ile dağıtımları modüller halinde düzenleyebilirsiniz. Bir modül, başka bir Bicep dosyasının dağıttığı bir Bicep dosyasıdır. Modül, JSON için bir Azure Resource Manager şablonu (ARM şablonu) da olabilir. Modüllerle, dağıtımınızın karmaşık ayrıntılarını kapsülleyerek Bicep dosyalarınızın okunabilirliğini geliştirirsiniz. Ayrıca farklı dağıtımlar için modülleri kolayca yeniden kullanabilirsiniz.
Modülleri kuruluşunuzdaki diğer kişilerle paylaşmak için şablon tanımı oluşturun veya özel kayıt defteri. Kayıt defterindeki şablon belirtimleri ve modülleri yalnızca doğru izinlere sahip kullanıcılar tarafından kullanılabilir.
Tip
Modül kayıt defteri ve şablon özellikleri arasındaki seçim çoğunlukla tercih konusudur. İkisi arasında seçim yaparken göz önünde bulundurmanız gereken birkaç şey vardır:
- Modül kayıt defteri yalnızca Bicep tarafından desteklenir. Bicep kullanmıyorsanız şablon belirtimlerini kullanın.
- Bicep modülü kayıt defterindeki içeriği yalnızca başka bir Bicep dosyasından dağıtabilirsiniz. Şablon belirtimlerini doğrudan API, Azure PowerShell, Azure CLI ve Azure portalından dağıtabilirsiniz. Portal dağıtım deneyimini özelleştirmek için bile kullanabilirsiniz
UiFormDefinition. - Bicep,
loadTextContentveloadFileAsBase64işlevlerini kullanarak diğer proje yapıtlarını (Bicep olmayan ve PowerShell betikleri, CLI betikleri ve diğer ikili dosyalar gibi ARM şablonu olmayan dosyalar dahil) eklemek için bazı sınırlı özelliklere sahiptir. Şablon özellikleri bu yapıtları paketleyemez.
Bicep modülleri, iç içe şablonlarıyla birlikte tek bir ARM şablonunadönüştürülür. Bicep'in yapılandırma dosyalarını nasıl çözümlediğini ve Bicep'in kullanıcı tanımlı bir yapılandırma dosyasını varsayılan yapılandırma dosyasıyla birleştirmesi hakkında daha fazla bilgi için bkz. Yapılandırma dosyası çözümleme işlemi ve Yapılandırma dosyası birleştirme işlemi.
Modülleri tanımlama
Modül tanımlamaya yönelik temel söz dizimi:
@<decorator>(<argument>)
module <symbolic-name> '<path-to-file>' = {
name: '<linked-deployment-name>'
params: {
<parameter-names-and-values>
}
}
Basit bir gerçek dünya örneği şöyle görünür:
module stgModule '../storageAccount.bicep' = {
name: 'storageDeploy'
params: {
storagePrefix: 'examplestg1'
}
}
Modül olarak JSON için ARM şablonu da kullanabilirsiniz:
module stgModule '../storageAccount.json' = {
name: 'storageDeploy'
params: {
storagePrefix: 'examplestg1'
}
}
Bicep dosyasının başka bir bölümündeki modüle başvurmak için sembolik adı kullanın. Örneğin, bir modülden çıktı almak için sembolik adı kullanabilirsiniz. Sembolik ad a-z, A-Z, 0-9 ve alt çizgi (_) içerebilir. Ad bir sayı ile başlayamaz. Bir modülün adı parametre, değişken veya kaynakla aynı olamaz.
Yol yerel bir dosya veya kayıt defterindeki bir dosya olabilir. Yerel dosya bir Bicep dosyası veya JSON için ARM şablonu olabilir. Daha fazla bilgi için Bir modül yoluna bkz.
name özelliği isteğe bağlıdır. Oluşturulan şablonda iç içe geçmiş dağıtım kaynağının adı haline gelir. Ad sağlanmamışsa, iç içe dağıtım kaynağının adı olarak bir GUID oluşturulur.
Statik ada sahip bir modül aynı kapsama eş zamanlı olarak dağıtılırsa, bir dağıtımın diğer dağıtımın çıktısını engelleme olasılığı vardır. Örneğin, iki Bicep dosyası aynı statik ada (examplemodule) sahip aynı modülü kullanıyorsa ve aynı kaynak grubuna hedefleniyorsa, bir dağıtım yanlış çıkış gösterebilir. Aynı kapsama eş zamanlı dağıtımlar hakkında endişeleriniz varsa modülünüze benzersiz bir ad verin. Benzersiz modül adlarını sağlamanın bir başka yolu, name özelliğini çıkarmaktır; bu sayede benzersiz bir modül adı otomatik olarak oluşturulur.
Aşağıdaki örnek, dağıtım adını modül adıyla birleştirir. Dağıtım için benzersiz bir ad sağlarsanız modül adı da benzersizdir.
module stgModule 'storageAccount.bicep' = {
name: '${deployment().name}-storageDeploy'
scope: resourceGroup('demoRG')
}
Modül adı verilmemesi de geçerlidir. Modül adı olarak bir GUID oluşturulur.
module stgModule 'storageAccount.bicep' = {
scope: resourceGroup('demoRG')
}
Ana dosyanın kapsamından farklı bir kapsam belirtmeniz gerekiyorsa kapsam ö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. Bu, bir kaynağı koşullu olarak dağıtmaya benzer.
// 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 ifadesini ekleyin. Örneklerin seri olarak mı yoksa paralel olarak mı dağıtılacağını belirtmek için batchSize dekoratörü kullanın. Daha fazla bilgi için Bicep'te Yinelemeli Döngüler bölümüne bakın.
// 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 de diğer modüllere veya kaynaklara bağımlı olmadığı sürece paralel olarak dağıtılır. Genellikle, bağımlılıkları örtük olarak belirlendikleri için ayarlamanız gerekmez. Açık bir bağımlılık ayarlamanız gerekiyorsa modül tanımına dependsOn ekleyin. Bağımlılıklar hakkında daha fazla bilgi edinmek için bkz. Bicepkaynak 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üle giden yol
Modülün dosyası yerel bir dosya veya dış dosya olabilir. Harici dosya, bir şablon özelliğinde veya bir Bicep modül kaydında bulunabilir.
Yerel dosya
Modül yerel bir dosyaysa, bu dosyanın göreli yolunu belirtin. Platformlar arasında tutarlı bir derleme sağlamak için Bicep'teki tüm yolların eğik çizgi (/) dizin ayırıcısı ile belirtilmesi gerekir. Windows ters eğik çizgi (\) karakteri desteklenmiyor. Yollar boşluk içerebilir.
Örneğin, dizinde bir düzeydeki bir dosyayı ana dosyanızdan dağıtmak için şunu kullanın:
module stgModule '../storageAccount.bicep' = {
name: 'storageDeploy'
params: {
storagePrefix: 'examplestg1'
}
}
Kayıt defterindeki dosya
Genel ve özel modül kayıt defterleri vardır.
Genel modül kayıt defteri
Note
Azure Dışı Doğrulanmış Modüller, genel modül kayıt defterinden kullanımdan kaldırılır.
Azure Doğrulanmış Modülleri, Azure'da kaynakları dağıtmak için kullanabileceğiniz önceden oluşturulmuş, önceden test edilmiş ve önceden doğrulanmış modüllerdir. Microsoft çalışanları bu modülleri oluşturup bu modüllerin sahibidir. Bunlar, yaygın Azure kaynakları ve yapılandırmaları için dağıtım sürecini basitleştirmek ve hızlandırmak için tasarlanmıştır. Modüller, Azure Well-Architected Framework gibi en iyi yöntemlerle de uyumludur.
Kullanılabilir modüllerin listesini görmek için Bicep Modülleri göz atın. Aşağıdaki ekran görüntüsünde vurgulanan sayıları seçerek doğrudan filtrelenmiş görünüme gidin:
Modül listesinde en son sürüm gösterilir. Kullanılabilir sürümlerin listesini görmek için sürüm numarasını seçin.
Genel bir modüle bağlanmak için modül yolunu aşağıdaki söz dizimiyle belirtin:
module <symbolic-name> 'br/public:<file-path>:<tag>' = {}
- br/public: Bu, genel modüllerin diğer adıdır. Bu diğer adı Bicep yapılandırma dosyasında özelleştirebilirsiniz.
-
dosya yolu: Bu,
/karakteriyle ayırabileceğiniz kesimler içerebilir. - etiketi: Bu, modül için bir sürüm belirtmek için kullanılır.
Örneğin:
module storage 'br/public:avm/res/storage/storage-account:0.18.0' = {
name: 'myStorage'
params: {
name: 'store${resourceGroup().name}'
}
}
Note
Ortak modüller için takma ad br/public'dır. Bunu şu şekilde de yazabilirsiniz:
module <symbolic-name> 'br:mcr.microsoft.com/bicep/<file-path>:<tag>' = {}
Özel modül kayıt defteri
Bir modülü kayıt merkezi 'eyayımladıysanız, bu modüle bağlanabilirsiniz. Azure kapsayıcı kayıt defterinin adını ve modülün yolunu belirtin. Modül yolunu aşağıdaki söz dizimiyle belirtin:
module <symbolic-name> 'br:<registry-name>.azurecr.io/<file-path>:<tag>' = {
- br: Bu, Bicep kayıt defteri için bir şema adıdır.
-
dosya yolu: Bu, Azure Container Registry'de
repositoryolarak adlandırılır. Dosya yolu,/karakteriyle ayrılmış kesimler içerebilir. - etiketi: Modülün sürümünü belirtmek için kullanılır.
Örneğin:
module stgModule 'br:exampleregistry.azurecr.io/bicep/modules/storage:v1' = {
name: 'storageDeploy'
params: {
storagePrefix: 'examplestg1'
}
}
Kayıt defterindeki bir modüle başvurdığınızda, Visual Studio Code'daki Bicep uzantısı dış modülü yerel önbelleğe kopyalamak için otomatik olarak bicep restore çağırır. Dış modülü geri yüklemek birkaç dakika sürer. Modül için IntelliSense hemen çalışmazsa geri yükleme işleminin tamamlanmasını bekleyin.
Kayıt defterindeki bir modülün tam yolu uzun olabilir. Modülü kullanmak istediğinizde her seferinde tam yolu sağlamak yerine, bicepconfig.json dosyasında takma adlar yapılandırın. Takma adlar modüle başvurmayı kolaylaştırır. Örneğin, diğer adla yolu şu şekilde kısaltabilirsiniz:
module stgModule 'br/ContosoModules:storage:v1' = {
name: 'storageDeploy'
params: {
storagePrefix: 'examplestg1'
}
}
Ortak modül kayıt defterinin önceden tanımlanmış bir diğer adı vardır:
module storage 'br/public:avm/res/storage/storage-account:0.18.0' = {
name: 'myStorage'
params: {
name: 'store${resourceGroup().name}'
}
}
bicepconfig.json dosyasındaki genel takma adı geçersiz kılabilirsiniz.
Şablon belirtimindeki dosya
birşablonu belirtimi oluşturduktan sonra modüldeki bu şablon belirtimine bağlanabilirsiniz. Şablon belirtimini aşağıdaki biçimde belirtin:
module <symbolic-name> 'ts:<sub-id>/<rg-name>/<template-spec-name>:<version>' = {
Bicep dosyanızı basitleştirmek için şablon belirtimlerinizi içeren kaynak grubu için bir diğer ad oluşturun. Diğer ad kullandığınızda söz dizimi şöyle olur:
module <symbolic-name> 'ts/<alias>:<template-spec-name>:<version>' = {
Aşağıdaki modülde depolama hesabı oluşturmak için bir şablon belirtimi dağıtılır. Şablon belirtimi için abonelik ve kaynak grubu, ContosoSpecsadlı takma ad altında tanımlanmıştır.
module stgModule 'ts/ContosoSpecs:storageSpec:2.0' = {
name: 'storageDeploy'
params: {
storagePrefix: 'examplestg1'
}
}
Dekoratörleri kullanma
Dekoratörler @expression formatında yazılır ve modül bildirimlerinin üstüne yerleştirilir. Aşağıdaki tabloda modüller için kullanılabilir dekoratörler gösterilmektedir:
| Decorator | Argument | Description |
|---|---|---|
| batchSize | none | Örnekleri sıralı olarak dağıtılacak şekilde ayarlayın. |
| description | string | Modül için açıklamalar sağlayın. |
Dekoratörler sys ad alanı içindedir. Dekoratörü aynı ada sahip başka bir öğeden ayırt etmek için, dekoratörün önüne sys ekleyin. Örneğin, Bicep dosyanız descriptionadlı bir parametre içeriyorsa, sys dekoratörü kullanırken description ad alanını eklemeniz gerekir.
BatchSize
@batchSize() yalnızca for ifadesi kullanan bir kaynak veya modül tanımına uygulayabilirsiniz.
Varsayılan olarak modüller paralel olarak dağıtılır.
@batchSize(int) dekoratörünü eklediğinizde, örnekleri seri olarak dağıtırsınız.
@batchSize(3)
module storage 'br/public:avm/res/storage/storage-account:0.11.1' = [for storageName in storageAccounts: {
name: 'myStorage'
params: {
name: 'store${resourceGroup().name}'
}
}]
Daha fazla bilgi için Toplu Olarak Dağıtma başlığına bakın.
Description
Açıklama eklemek için modül bildirimlerine bir açıklama ekleyin. Örneğin:
@description('Create storage accounts referencing an AVM.')
module storage 'br/public:avm/res/storage/storage-account:0.18.0' = {
name: 'myStorage'
params: {
name: 'store${resourceGroup().name}'
}
}
Açıklama metni için Markdown biçimli metin kullanabilirsiniz.
Parameters
Modül tanımınızda sağladığınız parametreler, Bicep dosyasındaki parametrelerle eşleşmektedir.
Aşağıdaki Bicep örneğinde üç parametre vardır: storagePrefix, storageSKUve location.
storageSKU parametresi varsayılan bir değere sahiptir, bu nedenle dağıtım sırasında bu parametre için bir değer sağlamanız 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@2025-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
output storageEndpoint object = stg.properties.primaryEndpoints
Önceki örneği modül olarak kullanmak için bu parametreler için değerler sağlayın.
targetScope = 'subscription'
@minLength(3)
@maxLength(11)
param namePrefix string
resource demoRG 'Microsoft.Resources/resourceGroups@2025-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ı ayarlama
Bir modülü bildirdiğinizde, modülü içeren Bicep dosyasının kapsamından farklı bir modül kapsamı ayarlayın. modülünün scope kapsamını ayarlamak için özelliğini kullanın.
scope özelliği sağlanmadığında, modül ana öğenin hedef kapsamına dağıtılır.
Aşağıdaki Bicep dosyası, bu kaynak grubunda bir kaynak grubu ve bir depolama hesabı oluşturur. Dosya bir aboneliğe dağıtılır, ancak modülün kapsamı yeni kaynak grubuna göre belirlenmiştir.
// 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@2025-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 mevcut olmalıdır.
targetScope = 'subscription'
resource firstRG 'Microsoft.Resources/resourceGroups@2025-04-01' existing = {
name: 'demogroup1'
}
resource secondRG 'Microsoft.Resources/resourceGroups@2025-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 kapsam nesnesine ayarlayın. Bicep dosyanız bir kaynak grubu, abonelik veya yönetim grubu dağıtıyorsa, modülün kapsamını bu kaynağın sembolik adına ayarlayabilirsiniz. Veya geçerli bir kapsam elde etmek için kapsam işlevlerini kullanabilirsiniz.
Bu işlevler şunlardır:
Aşağıdaki örnekte kapsamı ayarlamak için işlevi kullanılmaktadır managementGroup .
param managementGroupName string
module mgDeploy 'main.bicep' = {
name: 'deployToMG'
scope: managementGroup(managementGroupName)
}
Output
Bir modülden değerler alabilir ve bunları ana Bicep dosyasında kullanabilirsiniz. Bir modülden çıkış değeri almak için modül nesnesinde özelliğini kullanın outputs .
İ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@2025-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
output storageEndpoint object = stg.properties.primaryEndpoints
özelliği 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@2025-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
Bicep sürüm 0.35.1 ve üzeri ile dekoratör, @secure() modül çıkışlarına uygulanarak bunların hassas olarak işaretlenmesi ve değerlerinin günlüklerde veya dağıtım geçmişinde gösterilmemesi sağlanabilir. Bu, bir modülün oluşturulan anahtar veya bağlantı dizesi gibi hassas verileri üst Bicep dosyasına maruz kalma riski olmadan döndürmesi gerektiğinde kullanışlıdır. Daha fazla bilgi için bkz . Güvenli çıkışlar.
Modül kimliği
Bicep sürüm 0.36.1'den başlayarak modüle kullanıcı tarafından atanan bir yönetilen kimlik atayabilirsiniz. Bu, örneğin bir Key Vault'a erişmek için modülün içinde kimliği kullanılabilir hale getirir. Ancak bu özellik gelecekte kullanıma yöneliktir ve henüz arka uç hizmetleri tarafından desteklenmemektedir.
param identityId string
module mod './module.bicep' = {
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${identityId}': {}
}
}
name: 'mod'
params: {
keyVaultUri: 'keyVaultUri'
identityId: identityId
}
}
İlgili içerik
- Bir modüle hassas bir değer geçirmek için
getSecretişlevini kullanın.