Operator pengakses Bicep

Operator pengakses digunakan untuk mengakses sumber daya anak, properti pada objek, dan element dalam array. Anda juga dapat menggunakan pengakses properti untuk menggunakan beberapa fungsi.

Operator Nama
[] Pengakses indeks
. Pengakses fungsi
:: Pengakses sumber daya bersarang
. Pengakses properti

Pengakses indeks

array[integerIndex]

object['stringIndex']

Gunakan pengakses indeks untuk mendapatkan elemen dari array atau properti dari objek.

Untuk array, berikan indeks sebagai bilangan bulat. Bilangan bulat cocok dengan posisi elemen berbasis nol yang akan diambil.

Untuk objek, berikan indeks sebagai string. String cocok dengan nama objek yang akan diambil.

Contoh berikut mendapatkan elemen dalam array.

var arrayVar = [
  'Coho'
  'Contoso'
  'Fabrikan'
]

output accessorResult string = arrayVar[1]

Output dari contoh:

Nama Jenis Nilai
accessorResult string 'Contoso'

Contoh berikut mendapatkan properti pada objek.

var environmentSettings = {
  dev: {
    name: 'Development'
  }
  prod: {
    name: 'Production'
  }
}

output accessorResult string = environmentSettings['dev'].name

Output dari contoh:

Nama Jenis Nilai
accessorResult string 'Development'

Pengakses fungsi

resourceName.functionName()

Dua fungsi - getSecret dan list* - mendukung operator pengakses untuk memanggil fungsi. Kedua fungsi ini adalah satu-satunya fungsi yang mendukung operator pengakses.

Contoh

Contoh berikut mereferensikan brankas kunci yang ada, kemudian menggunakan getSecret untuk mengirim rahasia ke modul.

resource kv 'Microsoft.KeyVault/vaults@2023-02-01' existing = {
  name: kvName
  scope: resourceGroup(subscriptionId, kvResourceGroup )
}

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    sqlServerName: sqlServerName
    adminLogin: adminLogin
    adminPassword: kv.getSecret('vmAdminPassword')
  }
}

Pengakses sumber daya bersarang

parentResource::nestedResource

Sumber daya bersarang adalah sumber daya yang dinyatakan dalam sumber daya lain. Gunakan pengakses sumber daya bersarang :: untuk mengakses sumber daya bersarang dari luar sumber daya induk.

Dalam sumber daya induk, Anda mereferensikan sumber daya bersarang hanya dengan nama simbolik. Anda hanya perlu menggunakan pengakses sumber daya bersarang saat merujuk sumber daya bersarang dari luar sumber daya induk.

Contoh

Contoh berikut menunjukkan cara mereferensikan sumber daya bersarang dari dalam sumber daya induk dan dari luar sumber daya induk.

resource demoParent 'demo.Rp/parentType@2023-01-01' = {
  name: 'demoParent'
  location: 'West US'

  // Declare a nested resource within 'demoParent'
  resource demoNested 'childType' = {
    name: 'demoNested'
    properties: {
      displayName: 'The nested instance.'
    }
  }

  // Declare another nested resource
  resource demoSibling 'childType' = {
    name: 'demoSibling'
    properties: {
      // Use symbolic name to reference because this line is within demoParent
      displayName: 'Sibling of ${demoNested.properties.displayName}'
    }
  }
}

// Use nested accessor to reference because this line is outside of demoParent
output displayName string = demoParent::demoNested.properties.displayName

Pengakses properti

objectName.propertyName

Pengakses properti digunakan untuk mengakses properti suatu objek. Pengakses properti dapat digunakan dengan objek apa pun, termasuk parameter dan variabel yang merupakan objek. Anda mendapatkan kesalahan saat menggunakan akses properti pada pernyataan yang bukan merupakan objek.

Contoh

Contoh berikut menunjukkan variabel objek dan cara mengakses properti.

var x = {
  y: {
    z: 'Hello'
    a: true
  }
  q: 42
}

output outputZ string = x.y.z
output outputQ int = x.q

Output dari contoh:

Nama Jenis Nilai
outputZ string 'Hello'
outputQ bilangan bulat 42

Biasanya, Anda menggunakan pengakses properti dengan sumber daya yang digunakan dalam file Bicep. Contoh berikut membuat alamat IP publik dan menggunakan pengakses properti untuk mengembalikan nilai dari sumber daya yang disebarkan.

resource publicIp 'Microsoft.Network/publicIPAddresses@2022-11-01' = {
  name: publicIpResourceName
  location: location
  properties: {
    publicIPAllocationMethod: dynamicAllocation ? 'Dynamic' : 'Static'
    dnsSettings: {
      domainNameLabel: publicIpDnsLabel
    }
  }
}

// Use property accessor to get value
output ipFqdn string = publicIp.properties.dnsSettings.fqdn

Langkah berikutnya