Bicep'teki çıkışlar
Bu makalede, bicep dosyasında çıkış değerlerinin nasıl tanımlanacağı açıklanmaktadır. Dağıtılan kaynaklardan değer döndürmeniz gerektiğinde çıkışları kullanırsınız. Bicep dosyasındaki 64 çıkışla sınırlısınız. Daha fazla bilgi için bkz . Şablon sınırları.
Çıktıları tanımlama
Çıkış değeri tanımlama söz dizimi şöyledir:
output <name> <data-type or type-expression> = <value>
Bir çıktı parametre, değişken, modül veya kaynakla aynı ada sahip olabilir. Her çıkış değeri veri türlerinden birine veya kullanıcı tanımlı veri türü ifadesine çözümlenmelidir.
Aşağıdaki örnekte, dağıtılan bir kaynaktan bir özelliğin nasıl döndürüleceği gösterilmektedir. Örnekte, publicIP
Bicep dosyasında dağıtılan genel IP adresinin sembolik adıdır. Çıkış değeri, genel IP adresi için tam etki alanı adını alır.
output hostname string = publicIP.properties.dnsSettings.fqdn
Sonraki örnekte farklı türlerdeki çıkışların nasıl döndürüleceği gösterilmektedir.
output stringOutput string = deployment().name
output integerOutput int = length(environment().authentication.audiences)
output booleanOutput bool = contains(deployment().name, 'demo')
output arrayOutput array = environment().authentication.audiences
output objectOutput object = subscription()
Adında kısa çizgi bulunan bir özelliğin çıktısını almanız gerekiyorsa, noktalı virgül yerine adın çevresinde köşeli ayraç kullanın. Örneğin, yerine .property-name
kullanın['property-name']
.
var user = {
'user-name': 'Test Person'
}
output stringOutput string = user['user-name']
Aşağıdaki örnekte tür ifadesinin nasıl kullanılacağı gösterilmektedir:
param foo 'a' | 'b' = 'a'
output out 'a' | 'b' = foo
Daha fazla bilgi için bkz . Kullanıcı tanımlı veri türleri.
Dekoratörleri kullanma
Dekoratörler biçiminde @expression
yazılır ve çıkış bildirimlerinin üzerine yerleştirilir. Aşağıdaki tabloda çıkışlar için kullanılabilir dekoratörler gösterilmektedir.
Dekoratör | Uygula | Bağımsız değişken | Açıklama |
---|---|---|---|
Açıklama | tümü | Dize | Çıkış için açıklamalar sağlayın. |
Discriminator | nesne | Dize | Doğru alt sınıfın tanımlandığından ve yönetildiğinden emin olmak için bu dekoratörü kullanın. Daha fazla bilgi için bkz . Özel etiketli birleşim veri türü. |
maxLength | dizi, dize | int | Dize ve dizi çıkışları için uzunluk üst sınırı. Değer kapsayıcıdır. |
maxValue | int | int | Tamsayı çıkışı için en büyük değer. Bu değer dahildir. |
meta veriler | tümü | nesne | Çıkışa uygulanacak özel özellikler. Açıklama dekoratörüne eşdeğer bir açıklama özelliği içerebilir. |
minLength | dizi, dize | int | Dize ve dizi çıkışları için en düşük uzunluk. Değer kapsayıcıdır. |
minValue | int | int | Tamsayı çıkışı için en düşük değer. Bu değer dahildir. |
sealed | nesne | yok | BcP089'ı bir uyarıdan use-define veri türünün özellik adının yazım hatası olması durumunda hataya yükseltin. Daha fazla bilgi için bkz . Hata düzeyini yükseltme. |
Dekoratörler sys ad alanındadır. Dekoratörü aynı ada sahip başka bir öğeden ayırt etmeniz gerekiyorsa, dekoratörün önüne ile yazın sys
. Örneğin, Bicep dosyanız adlı description
bir parametre içeriyorsa, açıklama dekoratörü kullanılırken sys ad alanını eklemeniz gerekir.
@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string
Açıklama
Açıklama eklemek için çıkış bildirimlerine bir açıklama ekleyin. Örneğin:
@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
Açıklama metni için Markdown biçimli metin kullanılabilir.
Discriminator
Bkz. Özel etiketli birleşim veri türü.
Tamsayı kısıtlamaları
Tamsayı çıkışları için en düşük ve en yüksek değerleri ayarlayabilirsiniz. Bir veya iki kısıtlama ayarlayabilirsiniz.
var thisMonth = 3
@minValue(1)
@maxValue(12)
output month int = thisMonth
Uzunluk kısıtlamaları
Dize ve dizi çıkışları için en düşük ve en yüksek uzunlukları belirtebilirsiniz. Bir veya iki kısıtlama ayarlayabilirsiniz. Dizeler için uzunluk, karakter sayısını gösterir. Diziler için uzunluk, dizideki öğe sayısını gösterir.
Aşağıdaki örnekte iki çıkış bildirmektedir. Çıkışlardan biri, 3-24 karakter uzunluğunda olması gereken bir depolama hesabı adıdır. Diğer çıkış, 1-5 öğeden olması gereken bir dizidir.
var accountName = uniqueString(resourceGroup().id)
var appNames = [
'SyncSphere'
'DataWhiz'
'FlowMatrix'
]
@minLength(3)
@maxLength(24)
output storageAccountName string = accountName
@minLength(1)
@maxLength(5)
output applicationNames array = appNames
Meta veri
Çıktıya uygulamak istediğiniz özel özellikleriniz varsa, bir meta veri dekoratörü ekleyin. Meta veriler içinde, özel adlara ve değerlere sahip bir nesne tanımlayın. Meta veriler için tanımladığınız nesne herhangi bir adın ve türün özelliklerini içerebilir.
Bu dekoratörü, açıklamaya eklemek için anlamlı olmayan çıkış hakkındaki bilgileri izlemek için kullanabilirsiniz.
var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
output settings object = obj
Bir dekoratöre başka bir @metadata()
dekoratörle çakşan bir özellik sağladığınızda, bu dekoratör her zaman dekoratördeki @metadata()
her şeyden öncelikli olur. Bu nedenle, değerin @metadata()
içindeki çakışan özellik yedeklidir ve değiştirilecektir. Daha fazla bilgi için bkz . Çakışan meta veri yok.
Mühürlü
Bkz . Hata düzeyini yükseltme.
Koşullu çıkış
Döndürülecek değer dağıtımdaki bir koşula bağlı olduğunda işlecini ?
kullanın.
output <name> <data-type> = <condition> ? <true-value> : <false-value>
Genellikle, bir kaynağı koşullu olarak dağıttığınızda koşullu çıkış kullanırsınız. Aşağıdaki örnekte, yeni bir ip adresinin dağıtılıp dağıtılmadığına bağlı olarak genel IP adresi için kaynak kimliğinin koşullu olarak nasıl döndürüleceği gösterilmektedir.
Bicep'te koşullu çıkış belirtmek için işlecini ?
kullanın. Aşağıdaki örnek, bir koşula bağlı olarak bir uç nokta URL'si veya boş bir dize döndürür.
param deployStorage bool = true
param storageName string
param location string = resourceGroup().location
resource myStorageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = if (deployStorage) {
name: storageName
location: location
kind: 'StorageV2'
sku:{
name:'Standard_LRS'
tier: 'Standard'
}
properties: {
accessTier: 'Hot'
}
}
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
Dinamik çıkış sayısı
Bazı senaryolarda, şablonu oluştururken döndürmeniz gereken değer örneklerinin sayısını bilmezsiniz. İfadesini for
kullanarak değişken sayıda değer döndürebilirsiniz.
output <name> <data-type> = [for <item> in <collection>: {
...
}]
Aşağıdaki örnek bir dizi üzerinde yinelenir.
param nsgLocation string = resourceGroup().location
param orgNames array = [
'Contoso'
'Fabrikam'
'Coho'
]
resource nsg 'Microsoft.Network/networkSecurityGroups@2023-11-01' = [for name in orgNames: {
name: 'nsg-${name}'
location: nsgLocation
}]
output deployedNSGs array = [for (name, i) in orgNames: {
orgName: name
nsgName: nsg[i].name
resourceId: nsg[i].id
}]
Döngüler hakkında daha fazla bilgi için bkz . Bicep'te yinelemeli döngüler.
Modüllerden çıkışlar
Modülden çıkış değeri almak için aşağıdaki söz dizimini kullanın:
<module-name>.outputs.<property-name>
Aşağıdaki örnekte, bir modülden bir değer alarak yük dengeleyicide IP adresinin nasıl ayarlanacağı gösterilmektedir.
module publicIP 'modules/public-ip-address.bicep' = {
name: 'public-ip-address-module'
}
resource loadBalancer 'Microsoft.Network/loadBalancers@2023-11-01' = {
name: loadBalancerName
location: location
properties: {
frontendIPConfigurations: [
{
name: 'name'
properties: {
publicIPAddress: {
id: publicIP.outputs.resourceId
}
}
}
]
// ...
}
}
Çıkış değerlerini alma
Dağıtım başarılı olduğunda, çıkış değerleri dağıtımın sonuçlarında otomatik olarak döndürülür.
Dağıtım geçmişinden çıkış değerleri almak için Azure CLI veya Azure PowerShell betiğini kullanabilirsiniz.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Çıkışlarda nesne sıralama
JSON'da nesne, sıfır veya daha fazla anahtar/değer çifti içeren sıralanmamış bir koleksiyondur. Sıralama, uygulamalara bağlı olarak farklı olabilir. Örneğin, Bicep items() işlevi nesneleri alfabetik düzende sıralar. Diğer yerlerde özgün sıralama korunabilir. Bu determinizm olmadığından, dağıtım parametreleri ve çıkışlarıyla etkileşim kuran kod yazarken nesne anahtarlarının sıralanmasıyla ilgili varsayımlarda bulunmaktan kaçının.
Sonraki adımlar
- Çıkışların kullanılabilir özellikleri hakkında bilgi edinmek için bkz . Bicep'in yapısını ve söz dizimini anlama.