Bicep 访问器运算符

访问器运算符用于访问对象上的子资源、属性和数组中的元素。 还可以使用属性访问器来使用某些函数。

运算符 名称
[] 索引访问器
. 函数访问器
:: 嵌套资源访问器
. 属性访问器

索引访问器

array[integerIndex]

object['stringIndex']

使用索引访问器从数组获取元素或从对象获取属性。

对于数组,请提供整数形式的索引 。 该整数匹配要检索的元素从零开始的位置。

对于对象,请提供字符串形式的索引 。 该字符串匹配要检索的对象的名称。

以下示例获取数组中的元素。

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

output accessorResult string = arrayVar[1]

示例中的输出:

名称 类型
accessorResult 字符串 'Contoso'

下一个示例获取对象的属性。

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

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

示例中的输出:

名称 类型
accessorResult 字符串 'Development'

函数访问器

resourceName.functionName()

两个函数 - getSecretlist* - 支持用于调用函数的访问器运算符。 只有这两个函数支持访问器运算符。

示例

以下示例引用现有密钥保管库,然后使用 getSecret 将机密传递到模块。

resource kv 'Microsoft.KeyVault/vaults@2019-09-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@2020-01-01' = {
  name: 'demoParent'
  location: 'China North'

  // 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 integer 42

通常,将属性访问器与在 Bicep 文件中部署的资源一起使用。 以下示例创建一个公共 IP 地址,并使用属性访问器从部署的资源返回值。

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

后续步骤