Partilhar via


Funções de recurso para Bicep

Este artigo descreve as funções do Bíceps para obter valores de recursos.

Para obter valores da implantação atual, consulte Funções de valor de implantação.

extensionResourceId

extensionResourceId(resourceId, resourceType, resourceName1, [resourceName2], ...)

Retorna a ID do recurso para um recurso de extensão. Um recurso de extensão é um tipo de recurso que é aplicado a outro recurso para adicionar aos seus recursos.

Espaço de nomes: az.

A extensionResourceId função está disponível em arquivos Bicep, mas normalmente você não precisa dela. Em vez disso, use o nome simbólico para o recurso e acesse a id propriedade.

O formato básico do ID do recurso retornado por esta função é:

{scope}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

O segmento de escopo varia de acordo com o recurso que está sendo estendido.

Quando o recurso de extensão é aplicado a um recurso, a ID do recurso é retornada no seguinte formato:

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{baseResourceProviderNamespace}/{baseResourceType}/{baseResourceName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Quando o recurso de extensão é aplicado a um grupo de recursos, o formato é:

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Quando o recurso de extensão é aplicado a uma assinatura, o formato é:

/subscriptions/{subscriptionId}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Quando o recurso de extensão é aplicado a um grupo de gerenciamento, o formato é:

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Uma definição de política personalizada implantada em um grupo de gerenciamento é implementada como um recurso de extensão. Para criar e atribuir uma política, implante o seguinte arquivo Bicep em um grupo de gerenciamento.

targetScope = 'managementGroup'

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: 'locationAssignment'
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

As definições de política internas são recursos no nível do locatário. Para obter um exemplo de implantação de uma definição de política interna, consulte tenantResourceId.

getSecret

keyVaultName.getSecret(secretName)

Retorna um segredo de um Cofre de Chaves do Azure. Use esta função para passar um segredo para um parâmetro de cadeia de caracteres segura de um módulo Bicep.

Nota

az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion) função pode ser usada em .bicepparam arquivos para recuperar segredos do cofre de chaves. Para obter mais informações, consulte getSecret.

Você só pode usar a getSecret função de dentro da params seção de um módulo. Você só pode usá-lo com um Microsoft.KeyVault/vaults recurso.

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

Você recebe um erro se tentar usar essa função em qualquer outra parte do arquivo Bicep. Você também receberá um erro se usar essa função com interpolação de cadeia de caracteres, mesmo quando usado na seção params.

A função só pode ser usada com um parâmetro de módulo que tenha o @secure() decorador.

O cofre de chaves deve ter enabledForTemplateDeployment definido como true. O usuário que implanta o arquivo Bicep deve ter acesso ao segredo. Para obter mais informações, consulte Usar o Cofre da Chave do Azure para passar o valor do parâmetro seguro durante a implantação do Bicep.

Um qualificador de namespace não é necessário porque a função é usada com um tipo de recurso.

Parâmetros

Parâmetro Necessário Type Description
secretName Sim string O nome do segredo armazenado em um cofre de chaves.

Valor devolvido

O valor secreto para o nome secreto.

Exemplo

O seguinte arquivo Bicep é usado como um módulo. Tem um adminPassword parâmetro definido com o @secure() decorador.

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  ...
}

O seguinte arquivo Bicep consome o arquivo Bicep anterior como um módulo. O arquivo Bicep faz referência a um cofre de chaves existente e chama a getSecret função para recuperar o segredo do cofre de chaves e, em seguida, passa o valor como um parâmetro para o módulo.

param sqlServerName string
param adminLogin string

param subscriptionId string
param kvResourceGroup string
param kvName string

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

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

lista*

resourceName.list([apiVersion], [functionValues])

Você pode chamar uma função de lista para qualquer tipo de recurso com uma operação que começa com list. Alguns usos comuns são list, listKeys, listKeyValue, e listSecrets.

A sintaxe para esta função varia de acordo com o nome da operação de lista. Os valores retornados também variam de acordo com a operação. Atualmente, o Bicep não suporta conclusão e validação de list* funções.

Com a CLI do Bicep versão 0.4.X ou superior, você chama a função list usando o operador accessor. Por exemplo, storageAccount.listKeys().

Um qualificador de namespace não é necessário porque a função é usada com um tipo de recurso.

Parâmetros

Parâmetro Necessário Type Description
apiVersion Não string Se você não fornecer esse parâmetro, a versão da API para o recurso será usada. Forneça apenas uma versão personalizada da API quando precisar que a função seja executada com uma versão específica. Use o formato, aaaa-mm-dd.
functionValues Não objeto Um objeto que tem valores para a função. Forneça esse objeto somente para funções que suportam o recebimento de um objeto com valores de parâmetro, como listAccountSas em uma conta de armazenamento. Um exemplo de passagem de valores de função é mostrado neste artigo.

Utilizações válidas

As list funções podem ser usadas nas propriedades de uma definição de recurso. Não use uma list função que exponha informações confidenciais na seção de saídas de um arquivo Bicep. Os valores de saída são armazenados no histórico de implantação e podem ser recuperados por um usuário mal-intencionado.

Quando usado com um loop iterativo, você pode usar as list funções para input porque a expressão é atribuída à propriedade resource. Você não pode usá-los com count porque a contagem deve ser determinada antes que a list função seja resolvida.

Se você usar uma list função em um recurso implantado condicionalmente, a função será avaliada mesmo que o recurso não seja implantado. Você receberá um erro se a list função se referir a um recurso que não existe. Use a expressão condicional ?: para garantir que a função só seja avaliada quando o recurso estiver sendo implantado.

Valor devolvido

O objeto retornado varia de acordo com a função de lista usada. Por exemplo, o listKeys para uma conta de armazenamento retorna o seguinte formato:

{
  "keys": [
    {
      "keyName": "key1",
      "permissions": "Full",
      "value": "{value}"
    },
    {
      "keyName": "key2",
      "permissions": "Full",
      "value": "{value}"
    }
  ]
}

Outras list funções têm diferentes formatos de retorno. Para ver o formato de uma função, inclua-a na seção de saídas, conforme mostrado no arquivo Bicep de exemplo.

Exemplo de lista

O exemplo a seguir implanta uma conta de armazenamento e, em seguida, chama listKeys essa conta de armazenamento. A chave é usada ao definir um valor para scripts de implantação.

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'dscript${uniqueString(resourceGroup().id)}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource dScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'scriptWithStorage'
  location: location
  ...
  properties: {
    azCliVersion: '2.0.80'
    storageAccountSettings: {
      storageAccountName: storageAccount.name
      storageAccountKey: storageAccount.listKeys().keys[0].value
    }
    ...
  }
}

O próximo exemplo mostra uma list função que usa um parâmetro. Neste caso, a função é listAccountSas. Passe um objeto pelo tempo de expiração. O prazo de validade deve ser futuro.

param accountSasProperties object {
  default: {
    signedServices: 'b'
    signedPermission: 'r'
    signedExpiry: '2020-08-20T11:00:00Z'
    signedResourceTypes: 's'
  }
}
...
sasToken: storageAccount.listAccountSas('2021-04-01', accountSasProperties).accountSasToken

Implementações

Os usos possíveis de são mostrados list* na tabela a seguir.

Tipo de recurso Nome da função
Microsoft.Addons/supportProviders ListSupportPlanInfo
Microsoft.AnalysisServices/servidores listGatewayStatus
Microsoft.ApiManagement/service/authorizationServers listaSegredos
Microsoft.ApiManagement/serviço/gateways listKeys
Microsoft.ApiManagement/service/identityProviders listaSegredos
Microsoft.ApiManagement/service/namedValues listValue
Microsoft.ApiManagement/service/openidConnectProviders listaSegredos
Microsoft.ApiManagement/serviço/assinaturas listaSegredos
Microsoft.AppConfiguration/configurationStores ListKeys
Microsoft.AppPlatform/primavera listTestKeys
Microsoft.Automation/automationContas listKeys
Microsoft.Batch/batchAccounts listkeys
Microsoft.BatchAI/workspaces/experiments/jobs ListOutputFiles
Microsoft.BotService/botServices/canais listChannelWithKeys
Microsoft.Cache/redis listKeys
Microsoft.CognitiveServices/contas listKeys
Microsoft.ContainerRegistry/registries listCredentials
Microsoft.ContainerRegistry/registries listUsos
Microsoft.ContainerRegistry/registries/agentpools listQueueStatus
Microsoft.ContainerRegistry/registries/buildTasks listSourceRepositoryProperties
Microsoft.ContainerRegistry/registries/buildTasks/steps listBuildArguments
Microsoft.ContainerRegistry/registries/taskruns listDetalhes
Microsoft.ContainerRegistry/registros/webhooks listEventos
Microsoft.ContainerRegistry/registries/runs listLogSasUrl
Microsoft.ContainerRegistry/registros/tarefas listDetalhes
Microsoft.ContainerService/managedClusters listClusterAdminCredential
Microsoft.ContainerService/managedClusters listClusterMonitoringUserCredential
Microsoft.ContainerService/managedClusters listClusterUserCredential
Microsoft.ContainerService/managedClusters/accessProfiles listCredential
Microsoft.DataBox/empregos listCredentials
Microsoft.DataFactory/datafactories/gateways listauthkeys
Microsoft.DataFactory/factories/integrationruntimes listauthkeys
Microsoft.DataLakeAnalytics/accounts/storageAccounts/Containers listSasTokens
Microsoft.DataShare/contas/compartilhamentos listSincronizações
Microsoft.DataShare/accounts/shareSubscriptions listSourceShareSynchronizationSettings
Microsoft.DataShare/accounts/shareSubscriptions listSynchronizationDetails
Microsoft.DataShare/accounts/shareSubscriptions listSincronizações
Microsoft.Devices/iotHubs listkeys
Microsoft.Devices/iotHubs/iotHubKeys listkeys
Microsoft.Devices/provisioningServices/chaves listkeys
Microsoft.Devices/provisioningServices listkeys
Microsoft.DevTestLab/labs ListVhds
Microsoft.DevTestLab/labs/agendas ListApplicable
Microsoft.DevTestLab/labs/users/serviceFabrics ListApplicableSchedules
Microsoft.DevTestLab/labs/virtualMachines ListApplicableSchedules
Microsoft.DocumentDB/databaseAccounts listKeys
Microsoft.DocumentDB/databaseAccounts/notebookWorkspaces listConnectionInfo
Microsoft.DomainRegistration listDomainRecommendations
Microsoft.DomainRegistration/topLevelDomains listAcordos
Microsoft.EventGrid/domínios listKeys
Microsoft.EventGrid/topics listKeys
Microsoft.EventHub/namespaces/authorizationRules listkeys
Microsoft.EventHub/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.EventHub/namespaces/eventhubs/authorizationRules listkeys
Microsoft.ImportExport/jobs listBitLockerKeys
Microsoft.Kusto/Clusters/Bases de Dados ListPrincipals
Microsoft.LabServices/labs/usuários list
Microsoft.LabServices/labs/virtualMachines list
Microsoft.Logic/integrationAccounts/agreements listContentCallbackUrl
Microsoft.Logic/integrationContas/assemblies listContentCallbackUrl
Microsoft.Logic/integrationAccounts listCallbackUrl
Microsoft.Logic/integrationAccounts listKeyVaultKeys
Microsoft.Logic/integrationContas/mapas listContentCallbackUrl
Microsoft.Logic/integrationContas/parceiros listContentCallbackUrl
Microsoft.Logic/integrationAccounts/schemas listContentCallbackUrl
Microsoft.Logic/fluxos de trabalho listCallbackUrl
Microsoft.Logic/fluxos de trabalho listSwagger
Microsoft.Logic/workflows/runs/actions listExpressionTraces
Microsoft.Logic/workflows/runs/actions/repetitions listExpressionTraces
Microsoft.Logic/fluxos de trabalho/triggers listCallbackUrl
Microsoft.Logic/fluxos de trabalho/versões/triggers listCallbackUrl
Microsoft.MachineLearning/webServices listkeys
Microsoft.MachineLearning/Espaços de trabalho ListWorkspaceKeys
Microsoft.MachineLearningServices/espaços de trabalho/computação listKeys
Microsoft.MachineLearningServices/espaços de trabalho/computação listNodes
Microsoft.MachineLearningServices/espaços de trabalho listKeys
Microsoft.Maps/contas listKeys
Microsoft.Media/mediaservices/assets listContainerSas
Microsoft.Media/mediaservices/assets listStreamingLocalizadores
Microsoft.Media/mediaservices/streamingLocalizadores listContentKeys
Microsoft.Media/mediaservices/streamingLocalizadores listPaths
Microsoft.Network/applicationSecurityGroups listIpConfigurations
Microsoft.NotificationHubs/Namespaces/authorizationRules listkeys
Microsoft.NotificationHubs/Namespaces/NotificationHubs/authorizationRules listkeys
Microsoft.OperationalInsights/espaços de trabalho list
Microsoft.OperationalInsights/espaços de trabalho listKeys
Microsoft.PolicyInsights/remediações listDeployments
Microsoft.RedHatOpenShift/openShiftClusters listCredentials
Microsoft.Relay/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.Search/searchServices listAdminKeys
Microsoft.Search/searchServices listQueryKeys
Microsoft.SignalRService/SignalR listkeys
Microsoft.Storage/storageAccounts listAccountSas
Microsoft.Storage/storageAccounts listkeys
Microsoft.Storage/storageAccounts listServiceSas
Microsoft.StorSimple/managers/devices listFailoverSets
Microsoft.StorSimple/managers/devices listFailoverTargets
Microsoft.StorSimple/managers listActivationKey
Microsoft.StorSimple/managers listPublicEncryptionKey
Microsoft.Synapse/workspaces/integrationRuntimes listAuthKeys
Microsoft.Web/connectionGateways ListStatus
microsoft.web/conexões ListConsentLinks
Microsoft.Web/customApis listWsdlInterfaces
microsoft.web/localizações listwsdlinterfaces
Microsoft.Web/ApiManagementAccounts/APIS/Conexões ListConnectionKeys
Microsoft.Web/ApiManagementAccounts/APIS/Conexões listsecrets
microsoft.web/sites/backups list
Microsoft.Web/sites/config list
microsoft.web/sites/funções listkeys
microsoft.web/sites/funções listsecrets
microsoft.web/sites/hybridconnectionnamespaces/relays listkeys
microsoft.web/sites ListSyncFunctionTriggerStatus
microsoft.web/sites/slots/funções listsecrets
microsoft.web/sites/slots/backups list
Microsoft.Web/sites/slots/config list
microsoft.web/sites/slots/funções listsecrets

Para determinar quais tipos de recursos têm uma operação de lista, você tem as seguintes opções:

  • Exiba as operações da API REST para um provedor de recursos e procure operações de lista. Por exemplo, as contas de armazenamento têm a operação listKeys.

  • Use o cmdlet Get-AzProviderOperation PowerShell. O exemplo a seguir obtém todas as operações de lista para contas de armazenamento:

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • Use o seguinte comando da CLI do Azure para filtrar somente as operações de lista:

    az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
    

managementGroupResourceId

managementGroupResourceId(resourceType, resourceName1, [resourceName2], ...)

Retorna o identificador exclusivo de um recurso implantado no nível do grupo de gerenciamento.

Espaço de nomes: az.

A managementGroupResourceId função está disponível em arquivos Bicep, mas normalmente você não precisa dela. Em vez disso, use o nome simbólico para o recurso e acesse a id propriedade.

O identificador é retornado no seguinte formato:

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}

Observações

Use essa função para obter a ID do recurso para recursos que são implantados no grupo de gerenciamento em vez de um grupo de recursos. A ID retornada difere do valor retornado pela função resourceId por não incluir uma ID de assinatura e um valor de grupo de recursos.

Exemplo de managementGroupResourceID

O modelo a seguir cria e atribui uma definição de política. Ele usa a managementGroupResourceId função para obter o ID do recurso para a definição da política.

targetScope = 'managementGroup'

@description('Target Management Group')
param targetMG string

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

var mgScope = tenantResourceId('Microsoft.Management/managementGroups', targetMG)
var policyDefinitionName = 'LocationRestriction'

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
  name: policyDefinitionName
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource location_lock 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: 'location-lock'
  properties: {
    scope: mgScope
    policyDefinitionId: managementGroupResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionName)
  }
  dependsOn: [
    policyDefinition
  ]
}

pickZones [en]

pickZones(providerNamespace, resourceType, location, [numberOfZones], [offset])

Determina se um tipo de recurso oferece suporte a zonas para uma região. Esta função suporta apenas recursos zonais. Os serviços redundantes de zona retornam uma matriz vazia. Para obter mais informações, consulte Serviços do Azure que dão suporte a zonas de disponibilidade.

Espaço de nomes: az.

Parâmetros

Parâmetro Necessário Type Description
providerNamespace Sim string O namespace do provedor de recursos para o tipo de recurso para verificar o suporte à zona.
resourceType Sim string O tipo de recurso para verificar o suporte de zona.
localização Sim string A região para verificar o suporte da zona.
númerodeZonas Não integer O número de zonas lógicas a serem retornadas. A predefinição é 1. O número deve ser um número inteiro positivo de 1 a 3. Use 1 para recursos de zona única. Para recursos com várias zonas, o valor deve ser menor ou igual ao número de zonas suportadas.
offset Não integer O deslocamento da zona lógica inicial. A função retorna um erro se o deslocamento mais numberOfZones exceder o número de zonas suportadas.

Valor devolvido

Uma matriz com as zonas suportadas. Ao usar os valores padrão para deslocamento e numberOfZones, um tipo de recurso e região que ofereça suporte a zonas retorna a seguinte matriz:

[
    "1"
]

Quando o numberOfZones parâmetro é definido como 3, ele retorna:

[
    "1",
    "2",
    "3"
]

Quando o tipo de recurso ou região não oferece suporte a zonas, uma matriz vazia é retornada.

[
]

Observações

Há diferentes categorias para as Zonas de Disponibilidade do Azure - zonal e com redundância de zona. A pickZones função pode ser usada para retornar uma zona de disponibilidade para um recurso zonal. Para serviços redundantes de zona (ZRS), a função retorna uma matriz vazia. Os recursos zonais normalmente têm uma zones propriedade no nível superior da definição de recurso. Para determinar a categoria de suporte para zonas de disponibilidade, consulte Serviços do Azure que dão suporte a zonas de disponibilidade.

Para determinar se uma determinada região ou local do Azure dá suporte a zonas de disponibilidade, chame a pickZones função com um tipo de recurso zonal, como Microsoft.Network/publicIPAddresses. Se a resposta não estiver vazia, a região oferece suporte a zonas de disponibilidade.

exemplo de pickZones

O seguinte arquivo Bicep mostra três resultados para usar a pickZones função.

output supported array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus2')
output notSupportedRegion array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus')
output notSupportedType array = pickZones('Microsoft.Cdn', 'profiles', 'westus2')

A saída dos exemplos anteriores retorna três matrizes.

Nome Tipo valor
suportado matriz [ "1" ]
notSupportedRegion matriz []
notSupportedType matriz []

Você pode usar a resposta de pickZones para determinar se deve fornecer null para zonas ou atribuir máquinas virtuais a zonas diferentes.

fornecedores

A função de provedores foi preterida no Bicep. Não recomendamos mais usá-lo. Se você usou essa função para obter uma versão da API para o provedor de recursos, recomendamos que forneça uma versão específica da API no arquivo Bicep. Usar uma versão de API retornada dinamicamente pode quebrar seu modelo se as propriedades mudarem entre versões.

A operação dos provedores ainda está disponível por meio da API REST. Ele pode ser usado fora de um arquivo Bicep para obter informações sobre um provedor de recursos.

Espaço de nomes: az.

referência

reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])

Retorna um objeto que representa o estado de tempo de execução de um recurso. A saída e o reference comportamento da função dependem muito de como cada provedor de recursos (RP) implementa suas respostas PUT e GET.

Espaço de nomes: az.

Os arquivos Bicep fornecem acesso à função de referência, embora normalmente seja desnecessário. Em vez disso, recomenda-se usar o nome simbólico do recurso. A função de referência só pode ser usada dentro do properties objeto de um recurso e não pode ser empregada para propriedades de nível superior como name ou location. O mesmo se aplica geralmente às referências que utilizam o nome simbólico. No entanto, para propriedades como name, é possível gerar um modelo sem utilizar a função de referência. Sabe-se que informações suficientes sobre o nome do recurso emitem diretamente o nome. É conhecido como propriedades de tempo de compilação. A validação do bíceps pode identificar qualquer uso incorreto do nome simbólico.

O exemplo a seguir implanta uma conta de armazenamento. As duas primeiras saídas dão os mesmos resultados.

param storageAccountName string = uniqueString(resourceGroup().id)
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  location: location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageObjectSymbolic object = storageAccount.properties
output storageObjectReference object = reference('storageAccount')
output storageName string = storageAccount.name
output storageLocation string = storageAccount.location

Para obter uma propriedade de um recurso existente que não está implantado no modelo, use a existing palavra-chave:

param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
  name: storageAccountName
}

// use later in template as often as needed
output blobAddress string = storageAccount.properties.primaryEndpoints.blob

Para fazer referência a um recurso aninhado dentro de um recurso pai, use o acessador aninhado (::). Você só usa essa sintaxe quando está acessando o recurso aninhado de fora do recurso pai.

vNet1::subnet1.properties.addressPrefix

Se você tentar fazer referência a um recurso que não existe, receberá o NotFound erro e sua implantação falhará.

resourceId

resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)

Retorna o identificador exclusivo de um recurso.

Espaço de nomes: az.

A resourceId função está disponível em arquivos Bicep, mas normalmente você não precisa dela. Em vez disso, use o nome simbólico para o recurso e acesse a id propriedade.

Você usa essa função quando o nome do recurso é ambíguo ou não provisionado dentro do mesmo arquivo Bicep. O formato do identificador retornado varia com base no fato de a implantação ocorrer no escopo de um grupo de recursos, assinatura, grupo de gerenciamento ou locatário.

Por exemplo:

param storageAccountName string
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  location: location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageID string = storageAccount.id

Para obter a ID do recurso para um recurso que não está implantado no arquivo Bicep, use a palavra-chave existente.

param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
  name: storageAccountName
}

output storageID string = storageAccount.id

Para obter mais informações, consulte a função resourceId do modelo JSON.

subscriptionResourceId

subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)

Retorna o identificador exclusivo de um recurso implantado no nível da assinatura.

Espaço de nomes: az.

A subscriptionResourceId função está disponível em arquivos Bicep, mas normalmente você não precisa dela. Em vez disso, use o nome simbólico para o recurso e acesse a id propriedade.

O identificador é retornado no seguinte formato:

/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

Observações

Use essa função para obter a ID do recurso para recursos que são implantados na assinatura em vez de um grupo de recursos. A ID retornada difere do valor retornado pela função resourceId por não incluir um valor de grupo de recursos.

exemplo de subscriptionResourceID

O seguinte arquivo Bicep atribui uma função interna. Você pode implantá-lo em um grupo de recursos ou assinatura. Ele usa a subscriptionResourceId função para obter o ID do recurso para funções internas.

@description('Principal Id')
param principalId string

@allowed([
  'Owner'
  'Contributor'
  'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string

var roleDefinitionId = {
  Owner: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')
  }
  Contributor: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
  }
  Reader: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')
  }
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(resourceGroup().id, principalId, roleDefinitionId[builtInRoleType].id)
  properties: {
    roleDefinitionId: roleDefinitionId[builtInRoleType].id
    principalId: principalId
  }
}

tenantResourceId

tenantResourceId(resourceType, resourceName1, [resourceName2], ...)

Retorna o identificador exclusivo de um recurso implantado no nível do locatário.

Espaço de nomes: az.

A tenantResourceId função está disponível em arquivos Bicep, mas normalmente você não precisa dela. Em vez disso, use o nome simbólico para o recurso e acesse a id propriedade.

O identificador é retornado no seguinte formato:

/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

As definições de política internas são recursos no nível do locatário. Para implantar uma atribuição de política que faça referência a uma definição de política interna, use a tenantResourceId função.

@description('Specifies the ID of the policy definition or policy set definition being assigned.')
param policyDefinitionID string = '0a914e76-4921-4c19-b460-a2d36003525a'

@description('Specifies the name of the policy assignment, can be used defined or an idempotent name as the defaultValue provides.')
param policyAssignmentName string = guid(policyDefinitionID, resourceGroup().name)

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: policyAssignmentName
  properties: {
    scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
    policyDefinitionId: tenantResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionID)
  }
}

Próximos passos

  • Para obter valores da implantação atual, consulte Funções de valor de implantação.
  • Para iterar um número especificado de vezes ao criar um tipo de recurso, consulte Loops iterativos no Bicep.