Поделиться через


Операторы доступа Bicep

Операторы доступа используются для доступа к дочерним ресурсам, свойствам объектов и элементам в массиве. Для использования некоторых функций можно также использовать метод доступа к свойствам.

Оператор Имя
[] Метод доступа к индексу
[^index] Обратный метод доступа к индексу
. Метод доступа к функциям
:: Метод доступа к вложенным ресурсам
. Метод доступа к свойствам

Метод доступа к индексу

array[integerIndex]

object['stringIndex']

Используйте метод доступа к индексу, чтобы получить элемент из массива или свойства из объекта.

Для массива укажите индекс в виде целого числа. Целое число соответствует отсчитываемой от нуля позиции извлекаемого элемента.

Для объекта укажите индекс в виде строки. Строка соответствует имени извлекаемого объекта.

В следующем примере возвращается элемент в массиве.

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

output accessorResult string = arrayVar[1]

Выходные данные примера

Имя Тип Ценность
accessorResult струна Contoso

Следующий пример получает свойство объекта.

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

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

Выходные данные примера

Имя Тип Ценность
accessorResult струна "Разработка"

Обратный метод доступа к индексу

Начиная с интерфейса командной строки Bicep версии 0.34.x, оператор обратного доступа к индексу (^) позволяет получить элемент из массива, подсчитывая с конца. Этот одноуровневый индекс означает ^1 возвращение последнего элемента, ^2 второго к последнему и т. д. Индекс должен быть положительным целым числом больше нуля и может быть указан как литерал или выражение, которое оценивается целым числом.

array[^index]

Если индекс превышает длину массива, ошибка компиляции возникает для статических индексов или возникает ошибка среды выполнения для динамических индексов.

Для постоянных массивов оператор вычисляется во время компиляции. Для динамических входных данных, таких как параметры, оценка происходит во время развертывания.

Пример

var items = [
  'apple'
  'banana'
  'orange'
  'grape'
]

output secondToLast string = items[^2]

Выходные данные примера

Имя Тип Ценность
secondToLast струна "оранжевый"

Метод доступа к функциям

resourceName.functionName()

Две функции — getSecret и list* — поддерживают оператор доступа для вызова функции. Эти две функции являются единственными функциями, поддерживающими оператор доступа.

Пример

В следующем примере ссылается существующее хранилище ключей, а затем используется getSecret для передачи секрета модулю.

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

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

Метод доступа к вложенным ресурсам

parentResource::nestedResource

Вложенный ресурс — это ресурс, объявленный в другом ресурсе. Используйте метод :: доступа к вложенным ресурсам, чтобы получить доступ к вложенным ресурсам за пределами родительского ресурса.

В родительском ресурсе ссылается на вложенный ресурс с символьным именем. Необходимо использовать только метод доступа к вложенным ресурсам при ссылке на вложенный ресурс за пределами родительского ресурса.

Пример

В следующем примере показано, как ссылаться на вложенный ресурс из родительского ресурса и извне родительского ресурса.

resource demoParent 'demo.Rp/parentType@2024-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

Метод доступа к свойствам

objectName.propertyName

Используйте методы доступа к свойствам объекта. Методы доступа к свойствам можно использовать с любым объектом, включая параметры и переменные, которые являются объектами. При использовании доступа к свойству в выражении, которое не является объектом, возникает ошибка.

Пример

В следующем примере показана переменная объекта и способ доступа к свойствам.

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

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

Выходные данные примера

Имя Тип Ценность
outputZ струна "Hello"
outputQ целое число 42

Как правило, вы используете метод доступа к свойствам с ресурсом, развернутым в файле Bicep. В следующем примере создается общедоступный IP-адрес и используются методы доступа к свойствам для возврата значения из развернутого ресурса.

resource publicIp 'Microsoft.Network/publicIPAddresses@2025-01-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

Дальнейшие шаги