Bıcep dosyalarının yapısını ve söz dizimini anlayın
Bu makalede bir Bıcep dosyasının yapısı ve sözdizimi açıklanır. Dosyanın farklı bölümlerini ve bu bölümlerde kullanılabilen özellikleri gösterir.
Bir bicep dosyası oluşturma sürecinde size kılavuzluk eden adım adım bir öğretici için bkz. hızlı başlangıç: Visual Studio Code bicep dosyaları oluşturma.
Bıcep biçimi
Bıcep bildirime dayalı bir dildir, bu da öğelerin herhangi bir sırada görünebileceği anlamına gelir. Kesinlik temelli dillerin aksine, öğelerin sırası dağıtımın nasıl işlendiğini etkilemez.
Bir Bıcep dosyası aşağıdaki öğelere sahiptir.
targetScope = '<scope>'
@<decorator>(<argument>)
param <parameter-name> <parameter-data-type> = <default-value>
var <variable-name> = <variable-value>
resource <resource-symbolic-name> '<resource-type>@<api-version>' = {
<resource-properties>
}
module <module-symbolic-name> '<path-to-file>' = {
name: '<linked-deployment-name>'
params: {
<parameter-names-and-values>
}
}
output <output-name> <output-data-type> = <output-value>
Aşağıdaki örnek, bu öğelerin bir uygulamasını gösterir.
@minLength(3)
@maxLength(11)
param storagePrefix string
param storageSKU string = 'Standard_LRS'
param location string = resourceGroup().location
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
}
}
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
output storageEndpoint object = stg.properties.primaryEndpoints
Hedef kapsam
Varsayılan olarak, hedef kapsam olarak ayarlanır resourceGroup . Kaynak grubu düzeyinde dağıtım yapıyorsanız, Bıcep dosyanızda hedef kapsamı ayarlamanız gerekmez.
İzin verilen değerler şunlardır:
- resourceGroup - kaynak grubu dağıtımlarıiçin kullanılan varsayılan değer.
- abonelik - abonelik dağıtımlarıiçin kullanılır.
- ManagementGroup - Yönetim grubu dağıtımlarıiçin kullanılır.
- kiracı - kiracı dağıtımlarıiçin kullanılır.
Bir modülde, Bıcep dosyasının geri kalanı için kapsamından farklı bir kapsam belirtebilirsiniz. Daha fazla bilgi için bkz. Modül kapsamını yapılandırma
Parametreler
Farklı dağıtımlar için farklılık göstermesi gereken değerler için parametreleri kullanın. Dağıtım sırasında hiçbir değer sağlanmazsa kullanılan parametresi için varsayılan bir değer tanımlayabilirsiniz.
Örneğin, bir kaynak için farklı boyutlar belirtmek üzere bir SKU parametresi ekleyebilirsiniz. Test veya üretime dağıtım yapıp yaptığınıza bağlı olarak farklı değerleri geçirebilirsiniz.
param storageSKU string = 'Standard_LRS'
Parametresi Bıcep dosyanızda kullanılabilir.
sku: {
name: storageSKU
}
Daha fazla bilgi için bkz. Bıcep Içindeki parametreler.
Parametre Dekoratörleri
Her bir parametre için bir veya daha fazla dekoratlayıcısı ekleyebilirsiniz. Bu dekoratörler, parametresini tanımlar ve geçirilen değerlerin kısıtlamalarını tanımlar. Aşağıdaki örnek bir dekoratörü gösterir ancak kullanılabilir çok sayıda diğerleri vardır.
@allowed([
'Standard_LRS'
'Standard_GRS'
'Standard_ZRS'
'Premium_LRS'
])
param storageSKU string = 'Standard_LRS'
Tüm kullanılabilir dekoratların açıklamaları dahil daha fazla bilgi için bkz. dekoratörler.
Değişkenler
Bir değişkende karmaşık ifadeleri kapsülleyerek bicep dosyanızı daha okunabilir hale getirebilirsiniz. Örneğin, birkaç değeri birleştirerek oluşturulmuş bir kaynak adı için bir değişken ekleyebilirsiniz.
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
Karmaşık ifadeye ihtiyacınız olduğunda bu değişkeni uygulayın.
resource stg 'Microsoft.Storage/storageAccounts@2019-04-01' = {
name: uniqueStorageName
Daha fazla bilgi için bkz. Bıcep Içindeki değişkenler.
Kaynaklar
resourceDağıtılacak kaynağı tanımlamak için anahtar sözcüğünü kullanın. Kaynak bildirimidir, kaynak için bir sembolik ad içerir. Kaynaktan bir değer almak için bu simgesel adı Bıcep dosyasının diğer bölümlerinde kullanacaksınız.
Kaynak bildirimi, kaynak türünü ve API sürümünü içerir. Kaynak bildiriminin gövdesi içinde, kaynak türüne özgü özellikleri ekleyin.
resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
Daha fazla bilgi için bkz. Bıcep 'de kaynak bildirimi.
Bazı kaynaklarda bir üst/alt öğe ilişkisi vardır. Üst kaynağın içinde veya dışında bir alt kaynak tanımlayabilirsiniz.
Aşağıdaki örnek, bir üst kaynak içindeki bir alt kaynağın nasıl tanımlanacağını gösterir. Depolama hesabı içinde tanımlı bir alt kaynağa (dosya hizmeti) sahip bir depolama hesabı içerir. Dosya hizmetinde Ayrıca içinde tanımlı bir alt kaynak (paylaşma) bulunur.
resource storage 'Microsoft.Storage/storageAccounts@2021-02-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
resource service 'fileServices' = {
name: 'default'
resource share 'shares' = {
name: 'exampleshare'
}
}
}
Sonraki örnekte, üst kaynak dışında bir alt kaynağın nasıl tanımlanacağı gösterilmektedir. Üst/alt ilişki tanımlamak için üst özelliği kullanırsınız. Aynı üç kaynak tanımlanmıştır.
resource storage 'Microsoft.Storage/storageAccounts@2021-02-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2021-02-01' = {
name: 'default'
parent: storage
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2021-02-01' = {
name: 'exampleshare'
parent: service
}
Daha fazla bilgi için bkz. Bıcep 'de alt kaynaklar için ad ve tür ayarlama.
Modül
Modüller, diğer bicep dosyalarındaki bir bicep dosyasındaki kodu yeniden kullanmanıza olanak sağlar. Modül bildiriminde, yeniden kullanmak için dosyaya bağlantı oluşturursunuz. Bıcep dosyasını dağıtırken, modüldeki kaynaklar da dağıtılır.
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
Simgesel ad, modüldeki başka bir yerde modüle başvuru yapmanızı sağlar. Örneğin, simgesel adı ve çıkış değerinin adını kullanarak bir modülden çıkış değeri alabilirsiniz.
Daha fazla bilgi için bkz. Bıcep modüllerini kullanma.
Kaynak ve modül Dekoratörleri
Bir kaynak veya modül tanımına dekoratör ekleyebilirsiniz. Yalnızca desteklenen dekoratör batchSize(int) . Yalnızca bir ifade kullanan bir kaynağa veya modül tanımına uygulayabilirsiniz for .
Varsayılan olarak, kaynaklar paralel olarak dağıtılır. Dekoratörü eklediğinizde batchSize , örnekleri hizmet dağıtırsınız.
@batchSize(3)
resource storageAccountResources 'Microsoft.Storage/storageAccounts@2019-06-01' = [for storageName in storageAccounts: {
...
}]
Daha fazla bilgi için bkz. toplu olarak dağıtma.
Çıkışlar
Dağıtımdan değer döndürmek için çıktıları kullanın. Genellikle, başka bir işlem için bu değeri yeniden kullanmanız gerektiğinde, dağıtılan bir kaynaktan bir değer döndürüyordu.
output storageEndpoint object = stg.properties.primaryEndpoints
Daha fazla bilgi için bkz. Bıcep Içindeki çıktılar.
Döngüler
Birden çok kopyasını tanımlamak için Bıcep dosyanıza yinelemeli döngüler ekleyebilirsiniz:
- kaynak
- modül
- değişken
- özellik
- çıkış
forBir döngü tanımlamak için ifadesini kullanın.
param moduleCount int = 2
module stgModule './example.bicep' = [for i in range(0, moduleCount): {
name: '${i}deployModule'
params: {
}
}]
Bir dizi, nesne veya tamsayı dizini üzerinde yineleme yapabilirsiniz.
Daha fazla bilgi için bkz. Bıcep 'de yinelemeli döngüler.
Koşullu dağıtım
Bir kaynak veya modülü, koşullu olarak dağıtılan Bıcep dosyanıza ekleyebilirsiniz. Dağıtım sırasında koşul değerlendirilir ve sonuç kaynağın mı yoksa modülün mi dağıtıldığını belirler. ifKoşullu bir dağıtım tanımlamak için ifadesini kullanın.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnszones@2018-05-01' = if (deployZone) {
name: 'myZone'
location: 'global'
}
Daha fazla bilgi için bkz. Bıcep 'de koşullu dağıtım.
Boşluk
Bıcep dosyaları yazarken boşluklar ve sekmeler yoksayılır.
Bıcep, yeni satır duyarlıdır. Örnek:
resource sa 'Microsoft.Storage/storageAccounts@2019-06-01' = if (newOrExisting == 'new') {
...
}
Şu şekilde yazılamıyor:
resource sa 'Microsoft.Storage/storageAccounts@2019-06-01' =
if (newOrExisting == 'new') {
...
}
Birden çok satırda nesneleri ve dizileri tanımlayın.
Yorumlar
//Tek satır açıklamaları veya /* ... */ çok satırlı açıklamalar için kullanın
Aşağıdaki örnek, tek satırlık bir açıklama gösterir.
// This is your primary NIC.
resource nic1 'Microsoft.Network/networkInterfaces@2020-06-01' = {
...
}
Aşağıdaki örnek, çok satırlı bir açıklama gösterir.
/*
This Bicep file assumes the key vault already exists and
is in same subscription and resource group as the deployment.
*/
param existingKeyVaultName string
Çok satırlı dizeler
Bir dizeyi birden çok satıra kesebilirsiniz. '''Çok satırlı dizeyi başlatmak ve sonlandırmak için üç tek tırnak karakteri kullanın.
Çok satırlı dize içindeki karakterler olduğu gibi işlenir. Kaçış karakterleri gereksizdir. '''Çok satırlı dizeye dahil etmeniz gerekir. Dize ilişkilendirme Şu anda desteklenmiyor.
Dizenizi doğrudan açtıktan sonra başlatabilir ''' veya yeni bir satır ekleyebilirsiniz. Her iki durumda da, sonuçta elde edilen dize yeni bir satır içermez. Bicep dosyanızdaki satır sonlarına bağlı olarak, yeni satırlar veya olarak yorumlanır \r\n \n .
Aşağıdaki örnek, çok satırlı bir dizeyi gösterir.
var stringVar = '''
this is multi-line
string with formatting
preserved.
'''
Yukarıdaki örnek aşağıdaki JSON ile eşdeğerdir.
"variables": {
"stringVar": "this is multi-line\r\n string with formatting\r\n preserved.\r\n"
}
Bilinen sınırlamalar
- Her kaynak türü için tek bir apiProfile öğesini set apiVersion ile eşlemek için kullanılan apiProfile kavramı desteklenmez.
- Kullanıcı tanımlı işlevler için destek yok.
- Bazı bicep özellikleri, ara dilde (Azure Resource Manager JSON şablonları) karşılık gelen bir değişikliği gerektirir. Tüm gerekli güncelleştirmeler genel Azure 'a dağıtıldığında bu özellikleri kullanılabilir olarak duyuruyoruz. Azure Stack gibi farklı bir ortam kullanıyorsanız, özelliğin kullanılabilirliğine bir gecikme olabilir. Bıcep özelliği, yalnızca ara dil bu ortamda de güncelleştirildiği zaman kullanılabilir.
Sonraki adımlar
Bıcep 'ye giriş için bkz. bicep nedir?. Bıcep veri türleri için bkz. veri türleri.