Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo, se describe cómo definir valores de salida en un archivo de Bicep. Las salidas se usan cuando es necesario devolver valores de recursos implementados. Está limitado a 64 salidas en un archivo Bicep. Para obtener más información, consulte Límites de plantilla.
Definir las salidas
La sintaxis para definir un valor de salida es:
output <name> <data-type or type-expression> = <value>
Una salida puede tener el mismo nombre que un parámetro, una variable, un módulo o un recurso. Cada valor de salida debe resolverse en uno de los tipos de datos o los tipos de datos definidos por el usuario en Bicep.
En el ejemplo siguiente se muestra cómo devolver una propiedad desde un recurso implementado. En el ejemplo, publicIP es el nombre simbólico de una dirección IP pública que se implementa en el archivo de Bicep. El valor de salida obtiene el nombre de dominio completo de la dirección IP pública:
output hostname string = publicIP.properties.dnsSettings.fqdn
En el ejemplo siguiente se muestra cómo devolver salidas 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()
Si necesita generar una propiedad que tenga un guion en el nombre, use corchetes alrededor del nombre en lugar de la notación de puntos. Por ejemplo, use ['property-name'] en lugar de .property-name.
var user = {
'user-name': 'Test Person'
}
output stringOutput string = user['user-name']
En el ejemplo siguiente se muestra cómo usar la expresión de tipo:
param foo 'a' | 'b' = 'a'
output out 'a' | 'b' = foo
Usar decoradores
Los decoradores se escriben con formato @expression y se colocan encima de las declaraciones de salida. En la tabla siguiente se muestran los decoradores disponibles para las salidas:
| Decorador | Aplicar a | Argumento | Descripción |
|---|---|---|---|
| Descripción | todo | cuerda / cadena | Esto proporciona descripciones para la salida. |
| discriminador | object | cuerda / cadena | Use este decorador para asegurarse de que la subclase correcta se identifica y administra. Para obtener más información, consulte Tipo de datos de unión etiquetado personalizado. |
| maxLength | matriz, cadena | int | Esto proporciona la longitud máxima para las salidas de cadena y matriz, y el valor es inclusivo. |
| maxValue | int | int | Esto proporciona el valor máximo para la salida de entero y el valor es inclusivo. |
| metadatos | todo | object | Esto proporciona propiedades personalizadas para aplicar a la salida y puede incluir una propiedad de descripción equivalente al decorador de descripción. |
| minLength | matriz, cadena | int | Esto proporciona la longitud mínima para las salidas de cadena y matriz, y el valor es inclusivo. |
| minValue | int | int | Esto proporciona el valor mínimo para la salida de entero y el valor es inclusivo. |
| sellado | object | None | Eleve BCP089 de una advertencia a un error cuando es probable que un nombre de propiedad de un tipo de datos use-define sea un error tipográfico. Para obtener más información, consulte Elevación del nivel de error. |
| seguro | cadena, objecto | None | Marca la salida como segura. El valor de una salida segura no se guarda en el historial de implementación y no se registra. Para más información, consulte Protección de cadenas y objetos. |
Los decoradores están en el espacio de nombres sys. Si necesita diferenciar un decorador de otro elemento con el mismo nombre, antepone el decorador con sys. Por ejemplo, si el archivo de Bicep incluye un parámetro llamado description, debe agregar el espacio de nombres sys al usar el decorador description.
@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string
Descripción
Para agregar una explicación, agregue una descripción a las declaraciones de salida. Por ejemplo:
@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
El texto con formato Markdown se puede usar para el texto de descripción.
Discriminator
Consulte Tipo de datos de unión con etiquetado personalizado.
Restricciones de enteros
Puede establecer valores mínimos y máximos para las salidas de enteros y una o ambas restricciones.
var thisMonth = 3
@minValue(1)
@maxValue(12)
output month int = thisMonth
Restricciones de longitud
Puede especificar la longitud mínima y máxima de las salidas de matriz y de cadena. Puede establecer una o las dos restricciones. Para las cadenas, la longitud indica el número de caracteres. Para las matrices, la longitud indica el número de elementos de la matriz.
En el ejemplo siguiente se declaran dos salidas. Una salida es para un nombre de cuenta de almacenamiento que debe tener entre 3 y 24 caracteres. La otra salida es una matriz que debe tener de 1 a 5 elementos:
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
Metadatos
Si tiene propiedades personalizadas que desea aplicar a una salida, agregue un decorador de metadatos. Dentro de los metadatos, defina un objeto con los nombres y valores personalizados. El objeto que defina para los metadatos puede contener propiedades de cualquier nombre y tipo.
Puede utilizar este decorador para realizar un seguimiento de la información sobre la salida que no tiene sentido agregar a la descripción.
var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
output settings object = obj
Cuando se proporciona un decorador @metadata() con una propiedad que está en conflicto con otro decorador, ese decorador siempre tiene prioridad sobre cualquier elemento del decorador @metadata(). A la vez, la propiedad en conflicto dentro del valor @metadata() es redundante y se reemplazará. Para obtener más información, consulte Regla linter: sin metadatos en conflicto.
Sealed
Consulte Elevación del nivel de error.
Salidas seguras
Con Bicep versión 0.35.1 y versiones posteriores, puede marcar las salidas de cadena u objeto como seguras. Cuando una salida está decorada con @secure(), Azure Resource Manager trata el valor de salida como confidencial, lo que impide que se registre o se muestre en el historial de implementación, Azure Portal o salidas de la línea de comandos.
@secure()
output demoPassword string
@secure()
output demoSecretObject object
El @secure() decorador solo es válido para las salidas de tipo cadena o objeto, ya que se alinean con los tipos secureString y secureObject en las plantillas de ARM. Para pasar matrices o números de forma segura, encapsularlas en un secureObject o serializarlas como secureString.
Salida condicional
Cuando el valor que se va a devolver depende de una condición de la implementación, use el operador ?.
output <name> <data-type> = <condition> ? <true-value> : <false-value>
Por norma general, se usa una salida condicional cuando se implementa condicionalmente un recurso. En el ejemplo siguiente, se muestra cómo se devuelve condicionalmente el identificador de recurso de una dirección IP pública en función de si se ha implementado una nueva.
Para especificar una salida condicional en Bicep, use el operador ?. En el ejemplo siguiente se devuelve una dirección URL de punto de conexión o una cadena vacía que depende de una condición:
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 salidas
En algunos escenarios, no conoce el número de instancias de un valor que debe devolver al crear la plantilla. Puede usar la for expresión para devolver un número variable de valores.
output <name> <data-type> = [for <item> in <collection>: {
...
}]
En el ejemplo siguiente se recorre en iteración una 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 más información sobre los bucles, consulte Bucles iterativos en Bicep.
Salidas de módulos
Para obtener un valor de salida de un módulo, use la sintaxis siguiente:
<module-name>.outputs.<property-name>
En el ejemplo siguiente se muestra cómo recuperar un valor de un módulo para establecer la dirección IP en un equilibrador 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
}
}
}
]
// ...
}
}
Obtención de valores de salida
Cuando la implementación se realiza correctamente, los resultados de la implementación muestran automáticamente los valores de salida.
Puede usar la CLI de Azure o el script de Azure PowerShell para obtener valores de salida del historial de implementación.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Ordenación de objetos en salidas
En JSON, un objeto es una colección desordenada de cero o más pares clave-valor. El orden puede ser diferente en función de las implementaciones. Por ejemplo, la función Bicep items() ordena los objetos por orden alfabético. En otros lugares, puede conservar la ordenación original. Debido a este no determinismo, evite realizar suposiciones sobre el orden de las claves de objeto al escribir código, que interactúa con los parámetros y salidas de la implementación.
Pasos siguientes
Para obtener información sobre las propiedades disponibles para las salidas, consulte Estructura y sintaxis de archivos de Bicep.