Compartilhar via


Operadores do acessador Bicep

Os operadores acessadores são usados para acessar recursos filho, propriedades em objetos e elementos em uma matriz. Você também pode usar o acessador de propriedades para usar algumas funções.

Operador Nome
[] Acessador de índice
[^index] Acessador de índice reverso
. Acessador de funções
:: Acessador de recursos aninhados
. Acessador de propriedades

Acessador de índice

array[integerIndex]

object['stringIndex']

Use o acessador de índice para obter um elemento de uma matriz ou uma propriedade de um objeto.

Para uma matriz, forneça o índice como um inteiro. O inteiro corresponde à posição baseada em zero do elemento a ser recuperado.

Para um objeto, forneça o índice como uma cadeia de caracteres. A cadeia de caracteres corresponde ao nome do objeto a ser recuperado.

O exemplo a seguir obtém um elemento em uma matriz.

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

output accessorResult string = arrayVar[1]

Saída do exemplo:

Nome Tipo Valor
accessorResult corda 'Contoso'

O exemplo a seguir obtém uma propriedade em um objeto.

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

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

Saída do exemplo:

Nome Tipo Valor
accessorResult corda 'Desenvolvimento'

Acessador de índice reverso

Começando com a CLI do Bicep versão 0.34.x, o operador do acessador de índice reverso (^) permite que você recupere um elemento de uma matriz contando do final. Esse índice baseado em um significa que ^1 retorna o último item, ^2 o penúltimo e assim por diante. O índice deve ser um inteiro positivo maior que zero e pode ser especificado como um literal ou uma expressão que seja avaliada como um inteiro.

array[^index]

Se o índice exceder o comprimento da matriz, ocorrerá um erro de compilação para índices estáticos ou ocorrerá um erro de runtime para índices dinâmicos.

Para matrizes constantes, o operador é avaliado em tempo de compilação. Para entradas dinâmicas, como parâmetros, a avaliação ocorre no momento da implantação.

Exemplo

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

output secondToLast string = items[^2]

Saída do exemplo:

Nome Tipo Valor
secondToLast corda 'laranja'

Acessador de funções

resourceName.functionName()

Duas funções - getSecret e list* - dão suporte ao operador acessador para chamar a função. Essas duas funções são as únicas funções que dão suporte ao operador acessador.

Exemplo

O exemplo a seguir faz referência a um cofre de chaves existente e, em seguida, usa getSecret para passar um segredo para um módulo.

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')
  }
}

Acessador de recursos aninhados

parentResource::nestedResource

Um recurso aninhado é um recurso declarado em outro recurso. Use o acessador :: de recursos aninhado para acessar os recursos aninhados de fora do recurso pai.

No recurso pai, você faz referência ao recurso aninhado apenas com o nome simbólico. Você só precisa usar o acessador de recursos aninhado ao referenciar o recurso aninhado de fora do recurso pai.

Exemplo

O exemplo a seguir mostra como referenciar um recurso aninhado de dentro do recurso pai e de fora do recurso pai.

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

Acessador de propriedades

objectName.propertyName

Use acessadores de propriedade para acessar as propriedades de um objeto. Os acessadores de propriedade podem ser usados com qualquer objeto, incluindo parâmetros e variáveis que são objetos. Você recebe um erro ao usar o acesso à propriedade em uma expressão que não é um objeto.

Exemplo

O exemplo a seguir mostra uma variável de objeto e como acessar as propriedades.

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

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

Saída do exemplo:

Nome Tipo Valor
outputZ corda 'Olá'
outputQ número inteiro 42

Normalmente, você usa o acessador de propriedades com um recurso implantado no arquivo Bicep. O exemplo a seguir cria um endereço IP público e usa acessadores de propriedade para retornar um valor do recurso implantado.

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

Próximas etapas