Aracılığıyla paylaş


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-namekullanı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ı descriptionbir 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.