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.

Menentukan nilai 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.

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@2019-06-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@2020-06-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@2020-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