Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como definir valores de saída em um arquivo Bicep. Você usa resultados quando precisa retornar valores dos recursos que foram implantados. Você tem o limite de 64 saídas em um arquivo Bicep. Para obter mais informações, confira Limites de modelo.
Definir saídas
A sintaxe para definir um valor de saída é:
output <name> <data-type or type-expression> = <value>
Uma saída pode ter o mesmo nome que um parâmetro, variável, módulo ou recurso. Cada valor de saída deve ser resolvido para um dos tipos de dados ou tipos de dados definidos pelo usuário no Bicep.
O exemplo a seguir mostra como retornar uma propriedade de um recurso implantado. No exemplo, publicIP é o nome simbólico de um endereço IP público implantado no arquivo Bicep. O valor de saída obtém o nome de domínio totalmente qualificado para o endereço IP público:
output hostname string = publicIP.properties.dnsSettings.fqdn
O exemplo a seguir mostra como retornar saídas de diferentes tipos:
output stringOutput string = deployment().name
output integerOutput int = length(environment().authentication.audiences)
output booleanOutput bool = contains(deployment().name, 'demo')
output arrayOutput array = environment().authentication.audiences
output objectOutput object = subscription()
Se você precisar gerar uma propriedade que tenha um hífen no nome, use colchetes ao redor do nome em vez da notação de ponto. Por exemplo, use ['property-name'] ao invés de .property-name.
var user = {
'user-name': 'Test Person'
}
output stringOutput string = user['user-name']
O seguinte exemplo mostra como usar a expressão de tipo:
param foo 'a' | 'b' = 'a'
output out 'a' | 'b' = foo
Usar decoradores
Decoradores são escritos no formato @expression e colocados acima das declarações de saída. A tabela a seguir mostra os decoradores disponíveis para saídas:
| Decorador | Aplicar a | Argumento | Descrição |
|---|---|---|---|
| descrição | todos | cadeia | Isso fornece descrições para o resultado. |
| discriminador | objeto | cadeia | Use esse decorador para garantir que a subclasse correta seja identificada e gerenciada. Para obter mais informações, confira Tipo de dados de união com marcação personalizada. |
| maxLength | matriz, cadeia de caracteres | INT | Isso fornece o comprimento máximo para resultados de cadeia de caracteres e matriz, e o valor é inclusivo. |
| maxValue | INT | INT | Isso fornece o valor máximo para a saída de inteiro e o valor é inclusivo. |
| metadados | todos | objeto | Isso fornece propriedades personalizadas a serem aplicadas à saída, podendo incluir uma propriedade de descrição equivalente a um decorador de descrição. |
| minLength | matriz, cadeia de caracteres | INT | Isso fornece o comprimento mínimo para resultados de cadeia de caracteres e matriz, e o valor é inclusivo. |
| minValue | INT | INT | Isso fornece o valor mínimo para a saída de um número inteiro e o valor é inclusivo. |
| selado | objeto | none | Eleve o nível do BCP089 de aviso para erro quando um nome de propriedade de um tipo de dados definido pelo usuário provavelmente for um erro de digitação. Para obter mais informações, consulte Elevar nível de erro. |
| seguro | cadeia de caracteres, objeto | none | Marca a saída como segura. O valor de uma saída segura não é salvo no histórico de implantação e não é registrado. Para obter mais informações, confira Proteger cadeias de caracteres e objetos. |
Os decoradores estão no namespace sys. Se você precisar diferenciar um decorador de outro item com o mesmo nome, preceda o decorador com sys. Por exemplo, se o arquivo Bicep incluir um parâmetro chamado description, você deverá adicionar o sys namespace ao usar o decorador de descrição .
@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string
Descrição
Para adicionar uma explicação, adicione uma descrição às declarações de saída. Por exemplo:
@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
O texto formatado em Markdown pode ser usado para o texto da descrição.
Discriminador
Confira Tipo de dados de união com marcação personalizada.
Restrições do inteiro
Você pode definir valores mínimos e máximos para saídas de inteiro e uma ou ambas as restrições.
var thisMonth = 3
@minValue(1)
@maxValue(12)
output month int = thisMonth
Restrições de comprimento
Você pode especificar comprimentos mínimos e máximos para saídas de cadeias e matrizes. É possível definir uma restrição ou as duas. Nas cadeias de caracteres, o comprimento indica o número de caracteres. Nas matrizes, o comprimento indica o número de itens da matriz.
O exemplo a seguir declara duas saídas. Uma saída é para um nome de conta de armazenamento que deve ter de 3 a 24 caracteres. A outra saída é uma matriz que deve ter de 1 a 5 itens:
var accountName = uniqueString(resourceGroup().id)
var appNames = [
'SyncSphere'
'DataWhiz'
'FlowMatrix'
]
@minLength(3)
@maxLength(24)
output storageAccountName string = accountName
@minLength(1)
@maxLength(5)
output applicationNames array = appNames
Metadados
Se você tiver propriedades personalizadas que deseja aplicar a uma saída, adicione um decorador de metadados. Dentro dos metadados, defina um objeto com os nomes e os valores personalizados. O objeto que você define para os metadados pode conter propriedades de qualquer nome e tipo.
Você pode usar este decorador para rastrear informações sobre a saída que não faz sentido adicionar à descrição.
var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
output settings object = obj
Quando você fornece um decorador @metadata() com uma propriedade que entra em conflito com outro decorador, esse decorador sempre tem precedência sobre qualquer coisa no decorador @metadata(). Por sua vez, a propriedade conflitante dentro do @metadata() valor é redundante e será substituída. Para obter mais informações, consulte a regra linter - sem metadados conflitantes.
Selado
Consulte Elevar nível de erro.
Saídas seguras
Com a versão 0.35.1 ou posterior do Bicep, você pode marcar saídas do tipo cadeia de caracteres ou objeto como seguras. Quando uma saída é decorada com @secure(), o Azure Resource Manager trata o valor de saída como confidencial, impedindo que ele seja registrado ou exibido no histórico de implantação, portal do Azure ou saídas de linha de comando.
@secure()
output demoPassword string
@secure()
output demoSecretObject object
O @secure() decorador é válido apenas para saídas de tipo cadeia de caracteres ou objeto, pois elas se alinham com os tipos secureString e secureObject em modelos arm. Para passar matrizes ou números com segurança, embrulhe-os em um secureObject ou serialize-os como um secureString.
Resultado condicional
Quando o valor a ser retornado depender de uma condição na implantação, use o operador ?.
output <name> <data-type> = <condition> ? <true-value> : <false-value>
Normalmente, você usa uma saída condicional quando implementa condicionalmente um recurso. O exemplo a seguir mostra como retornar condicionalmente o ID do recurso para um endereço IP público com base na implantação de um novo.
Para especificar uma saída condicional no Bicep, use o operador ?. O exemplo a seguir retorna uma URL de ponto de extremidade ou uma cadeia de caracteres vazia que depende de uma condição:
param deployStorage bool = true
param storageName string
param location string = resourceGroup().location
resource myStorageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' = if (deployStorage) {
name: storageName
location: location
kind: 'StorageV2'
sku:{
name:'Standard_LRS'
tier: 'Standard'
}
properties: {
accessTier: 'Hot'
}
}
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
Número dinâmico de saídas
Em alguns cenários, você não sabe o número de instâncias de um valor que precisa retornar ao criar o modelo. Você pode usar a for expressão para retornar um número variável de valores.
output <name> <data-type> = [for <item> in <collection>: {
...
}]
O exemplo a seguir itera por meio de uma matriz:
param nsgLocation string = resourceGroup().location
param orgNames array = [
'Contoso'
'Fabrikam'
'Coho'
]
resource nsg 'Microsoft.Network/networkSecurityGroups@2025-01-01' = [for name in orgNames: {
name: 'nsg-${name}'
location: nsgLocation
}]
output deployedNSGs array = [for (name, i) in orgNames: {
orgName: name
nsgName: nsg[i].name
resourceId: nsg[i].id
}]
Para obter mais informações sobre loops, consulte Loops iterativos em Bicep.
Resultados de módulos
Para obter um valor de saída de um módulo, use a seguinte sintaxe:
<module-name>.outputs.<property-name>
O exemplo a seguir mostra como recuperar um valor de um módulo para definir o endereço IP em um balanceador de carga:
module publicIP 'modules/public-ip-address.bicep' = {
name: 'public-ip-address-module'
}
resource loadBalancer 'Microsoft.Network/loadBalancers@2025-01-01' = {
name: loadBalancerName
location: location
properties: {
frontendIPConfigurations: [
{
name: 'name'
properties: {
publicIPAddress: {
id: publicIP.outputs.resourceId
}
}
}
]
// ...
}
}
Obter valores de saída
Quando a implantação for bem-sucedida, os resultados da implantação mostrarão automaticamente os valores de saída.
Você pode usar a CLI do Azure ou o script do Azure PowerShell para obter valores de saída do histórico de implantação.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Classificação de objeto em saídas
Em JSON, um objeto é uma coleção não ordenada de zero ou mais pares de chaves ou valores. A ordem pode ser diferente dependendo das implementações. Por exemplo, a função items() do Bicep classifica os objetos em ordem alfabética. Em outros lugares, você pode preservar a ordem original. Devido a esse não determinismo, evite fazer suposições sobre a ordem das chaves dos objetos ao escrever código que interage com parâmetros de implantação e saídas.
Próximas etapas
Para saber mais sobre as propriedades disponíveis para saídas, consulte a estrutura e a sintaxe do arquivo Bicep.