Bagikan melalui


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