Output dalam Bicep
Artikel ini menjelaskan cara menentukan nilai output dalam file Bicep. Anda menggunakan output saat Anda perlu menampilkan nilai dari sumber daya yang disebarkan. Anda dibatasi hingga 64 output dalam file Bicep. Untuk informasi selengkapnya, lihat Batas templat.
Tentukan output
Sintaksis untuk mendefinisikan nilai output adalah:
output <name> <data-type or type-expression> = <value>
Output dapat memiliki nama yang sama dengan parameter, variabel, modul, atau sumber daya. Setiap nilai output harus diatasi ke salah satu jenis data, atau ekspresi jenis data yang ditentukan pengguna.
Contoh berikut menunjukkan cara menampilkan properti dari sumber daya yang disebarkan. Dalam contoh berikut, publicIP
adalah nama simbolis untuk alamat IP publik yang disebarkan dalam file Bicep. Nilai output mendapatkan nama domain yang sepenuhnya memenuhi syarat untuk alamat IP publik.
output hostname string = publicIP.properties.dnsSettings.fqdn
Contoh berikutnya menunjukkan cara mengembalikan output dari berbagai jenis.
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()
Jika Anda perlu mengeluarkan properti yang memiliki tanda hubung dalam nama, gunakan tanda kurung di sekitar nama, bukan notasi titik. Misalnya, gunakan ['property-name']
, bukan .property-name
.
var user = {
'user-name': 'Test Person'
}
output stringOutput string = user['user-name']
Contoh berikut menunjukkan cara menggunakan ekspresi jenis:
param foo 'a' | 'b' = 'a'
output out 'a' | 'b' = foo
Untuk informasi selengkapnya, lihat Jenis data yang ditentukan pengguna.
Menggunakan dekorator
Dekorator ditulis dalam format @expression
dan ditempatkan di atas deklarasi output. Tabel berikut menunjukkan dekorator yang tersedia untuk output.
Dekorator | Terapkan ke | Argumen | Deskripsi |
---|---|---|---|
description | all | string | Berikan deskripsi untuk output. |
diskriminator | object | string | Gunakan dekorator ini untuk memastikan subkelas yang benar diidentifikasi dan dikelola. Untuk informasi selengkapnya, lihat Jenis data serikat yang ditandai kustom. |
maxLength | array, untai (karakter) | int | Panjang maksimum untuk output string dan array. Nilainya inklusif. |
maxValue | int | int | Nilai maksimum untuk output bilangan bulat. Nilai ini inklusif. |
metadata | all | object | Properti kustom untuk diterapkan ke output. Dapat mencakup properti deskripsi yang setara dengan dekorator deskripsi. |
minLength | array, untai (karakter) | int | Panjang minimum untuk output string dan array. Nilainya inklusif. |
minValue | int | int | Nilai minimum untuk output bilangan bulat. Nilai ini inklusif. |
disegel | object | tidak ada | Tingkatkan BCP089 dari peringatan ke kesalahan ketika nama properti dari jenis data yang ditentukan penggunaan kemungkinan salah ketik. Untuk informasi selengkapnya, lihat Meningkatkan tingkat kesalahan. |
Dekotaror berada dalam namespace layanan sys. Jika Anda perlu membedakan suatu dekorator dari item lainnya dengan nama yang sama, awali dekorator dengan sys
. Contohnya, jika file Bicep Anda mencakup parameter bernama description
, Anda harus menambahkan namespace layanan sys saat menggunakan dekorator deskripsi.
@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string
Deskripsi
Untuk menambahkan penjelasan, tambahkan deskripsi ke deklarasi output. Contohnya:
@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
Teks berformat markdown dapat digunakan untuk teks deskripsi.
Diskriminator
Lihat Jenis data union yang ditandai kustom.
Batasan bilangan bulat
Anda dapat mengatur nilai minimum dan maksimum untuk output bilangan bulat. Anda dapat mengatur salah satu atau kedua batasan.
var thisMonth = 3
@minValue(1)
@maxValue(12)
output month int = thisMonth
Batasan panjang
Anda dapat menentukan panjang minimum dan maksimum untuk output string dan array. Anda dapat mengatur salah satu atau kedua batasan. Untuk string, panjangnya menunjukkan jumlah karakter. Untuk array, panjangnya menunjukkan jumlah item dalam array.
Contoh berikut mendeklarasikan dua output. Salah satu output adalah untuk nama akun penyimpanan yang harus memiliki 3-24 karakter. Output lainnya adalah array yang harus memiliki dari 1-5 item.
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
Metadata
Jika Anda memiliki properti kustom yang ingin Anda terapkan ke output, tambahkan dekorator metadata. Dalam metadata, tentukan objek dengan nama dan nilai kustom. Objek yang Anda tentukan untuk metadata dapat berisi properti nama dan jenis apa pun.
Anda mungkin menggunakan dekorator ini untuk melacak informasi tentang output yang tidak masuk akal untuk ditambahkan ke deskripsi.
var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
output settings object = obj
Ketika Anda menyediakan @metadata()
dekorator dengan properti yang bertentangan dengan dekorator lain, dekorator itu selalu lebih diutamakan daripada apa pun di @metadata()
dekorator. Jadi, properti yang bertentangan dalam @metadata()
nilai berlebihan dan akan diganti. Untuk informasi selengkapnya, lihat Tidak ada metadata yang bertentangan.
Disegel
Lihat Meningkatkan tingkat kesalahan.
Output kondisional
Saat nilai yang akan dikembalikan bergantung pada kondisi dalam penyebaran, gunakan ?
operator.
output <name> <data-type> = <condition> ? <true-value> : <false-value>
Biasanya, Anda menggunakan output kondisional saat Anda menyebarkan secara kondisional sebuah sumber daya. Contoh berikut menunjukkan cara menampilkan ID sumber daya secara kondisional untuk alamat IP publik berdasarkan ketentuan apakah ID sumber daya yang baru sudah disebarkan.
Untuk menentukan output kondisional di Bicep, gunakan ?
operator. Contoh berikut menampilkan URL titik akhir atau string kosong tergantung pada kondisi.
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 : ''
Jumlah output dinamis
Dalam beberapa skenario, Anda tidak tahu jumlah instans nilai yang perlu Anda tampilkan saat membuat templat. Anda dapat menampilkan jumlah nilai variabel dengan menggunakan ekspresi for
.
output <name> <data-type> = [for <item> in <collection>: {
...
}]
Contoh berikut ini berulang-ulang di atas array.
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
}]
Untuk informasi selengkapnya tentang perulangan, lihat Perulangan iterasi di Bicep.
Output dari modul
Untuk mendapatkan nilai output dari modul, gunakan sintaks berikut:
<module-name>.outputs.<property-name>
Contoh berikut menunjukkan cara mengatur alamat IP pada penyeimbang muatan dengan mengambil nilai dari modul.
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
}
}
}
]
// ...
}
}
Mendapatkan nilai output
Saat penyebaran berhasil, nilai output akan ditampilkan secara otomatis dalam hasil penyebaran.
Untuk mendapatkan nilai output dari riwayat penyebaran, Anda dapat menggunakan skrip Azure CLI atau Azure PowerShell.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Pengurutan objek dalam output
Di JSON, objek adalah kumpulan pasangan kunci/nilai nol atau lebih yang tidak diurutkan. Pengurutan dapat berbeda bergantung pada implementasinya. Misalnya, fungsi item() Bicep mengurutkan objek dalam urutan abjad. Di tempat lain, pengurutan asli dapat dipertahankan. Karena non-determinisme ini, hindari membuat asumsi tentang pengurutan kunci objek saat menulis kode, yang berinteraksi dengan parameter penyebaran &output.
Langkah berikutnya
- Untuk mempelajari tentang properti yang tersedia untuk output, lihat Memahami struktur dan sintaks Bicep.