Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment définir des valeurs de sortie dans un fichier Bicep. Vous utilisez des sorties lorsque vous devez retourner des valeurs à partir de ressources déployées. Vous êtes limité à 64 sorties dans un fichier Bicep. Pour plus d’informations, consultez Limites du modèle.
Définir les sorties
La syntaxe permettant de définir une valeur de sortie est la suivante :
output <name> <data-type or type-expression> = <value>
Une sortie peut avoir le même nom qu’un paramètre, une variable, un module ou une ressource. Chaque valeur de sortie doit être résolue en un des types de données ou des types de données définis par l’utilisateur dans Bicep.
L’exemple suivant montre comment renvoyer une propriété à partir d’une ressource déployée. Dans l’exemple, publicIP
est le nom symbolique d’une adresse IP publique déployée dans le fichier Bicep. La valeur de sortie obtient le nom de domaine complet pour l’adresse IP publique :
output hostname string = publicIP.properties.dnsSettings.fqdn
L’exemple suivant montre comment retourner des sorties de différents types :
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 vous avez besoin de générer une propriété dont le nom comporte un trait d’union, utilisez des crochets autour du nom au lieu de la notation par points. Par exemple, utilisez ['property-name']
au lieu de .property-name
.
var user = {
'user-name': 'Test Person'
}
output stringOutput string = user['user-name']
L’exemple suivant montre comment utiliser une expression du type :
param foo 'a' | 'b' = 'a'
output out 'a' | 'b' = foo
Utiliser des éléments décoratifs
Les éléments décoratifs sont écrits au format @expression
et sont placés au-dessus des déclarations de sorties. Le tableau suivant présente les décorateurs disponibles pour les sorties :
Élément décoratif | S’applique à | Raisonnement | Descriptif |
---|---|---|---|
description | tout | ficelle | Il fournit des descriptions pour la sortie. |
discriminant | objet | ficelle | Utilisez cet élément décoratif pour vous assurer que la sous-classe appropriée est identifiée et gérée. Pour plus d’informations, consultez Type de données union étiqueté personnalisé. |
maxLength | tableau, chaîne | Int | Cela fournit la longueur maximale des sorties de chaîne et de tableau, et la valeur est inclusive. |
maxValue | Int | Int | Cela fournit la valeur maximale pour la sortie entière et la valeur est inclusive. |
métadonnées | tout | objet | Cela fournit des propriétés personnalisées à appliquer à la sortie et peut inclure une propriété de description équivalente au décorateur de description. |
minLength | tableau, chaîne | Int | Cela fournit la longueur minimale des sorties de chaîne et de tableau, et la valeur est inclusive. |
minValue | Int | Int | Cela fournit la valeur minimale pour la sortie entière et la valeur est inclusive. |
scellé | objet | Aucune | Élever BCP089 d’avertissement à erreur lorsqu’un nom de propriété d’un type de données défini par l’utilisateur est probablement une faute de frappe. Pour plus d’informations, consultez Élever le niveau d’erreur. |
sûr | string, objet | Aucune | Marque la sortie comme sécurisée. La valeur d’une sortie sécurisée n’est pas enregistrée dans l’historique du déploiement et n’est pas journalisée. Pour plus d’informations, consultez Sécuriser les chaînes et les objets. |
Les éléments décoratifs se trouvent dans l’espace de noms sys
. Si vous devez différencier un élément décoratif d'un autre élément portant le même nom, faites précéder l’élément décoratif de sys
. Par exemple, si votre fichier Bicep inclut un paramètre nommé description
, vous devez ajouter l'espace de noms sys
lors de l’utilisation du décorateur description.
@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string
Descriptif
Pour ajouter une explication, ajoutez une description aux déclarations de sortie. Par exemple :
@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
Du texte au format Markdown peut être utilisé pour le texte de description.
Discriminant
Consultez Type de données d’union personnalisées.
Contraintes d’entier
Vous pouvez définir des valeurs minimales et maximales pour les sorties entières et une ou les deux contraintes.
var thisMonth = 3
@minValue(1)
@maxValue(12)
output month int = thisMonth
Contraintes de longueur
Vous pouvez spécifier des longueurs minimale et maximale pour les sorties de chaîne et de tableau. Vous pouvez définir une contrainte ou les deux. Pour les chaînes, la longueur indique le nombre de caractères. Pour les tableaux, la longueur indique le nombre d’éléments dans le tableau.
L’exemple suivant déclare deux sorties. Une sortie est destinée à un nom de compte de stockage qui doit compter entre 3 et 24 caractères. L’autre sortie est un tableau qui doit comporter entre 1 et 5 éléments :
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
Métadonnées
Si vous disposez de propriétés personnalisées que vous souhaitez appliquer à une sortie, ajoutez un élément décoratif de métadonnées. Dans les métadonnées, définissez un objet avec des noms et valeurs personnalisés. L’objet que vous définissez pour les métadonnées peut contenir des propriétés de n’importe quel nom et type.
Vous pouvez utiliser cet élément décoratif pour suivre les informations relatives à la sortie qu'il n'est pas utile d'ajouter à la description.
var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
output settings object = obj
Lorsque vous fournissez un @metadata()
élément décoratif avec une propriété qui est en conflit avec un autre élément décoratif, cet élément décoratif est toujours prioritaire sur tout ce qui se passe dans @metadata()
l’élément décoratif. À son tour, la propriété en conflit dans la @metadata()
valeur est redondante et sera remplacée. Pour plus d’informations, consultez la règle Linter : aucune métadonnées en conflit.
Scellé
Consultez Élever le niveau d’erreur.
Sorties sécurisées
Avec Bicep version 0.35.1 et ultérieure, vous pouvez marquer les sorties de chaîne ou d’objet comme sécurisées. Lorsqu’une sortie est décorée, @secure()
Azure Resource Manager traite la valeur de sortie comme sensible, ce qui l’empêche d’être journalisée ou affichée dans l’historique de déploiement, le portail Azure ou les sorties de ligne de commande.
@secure()
output demoPassword string
@secure()
output demoSecretObject object
Le @secure()
décorateur est valide uniquement pour les sorties de type chaîne ou d’objet, car celles-ci s’alignent sur les types secureString et secureObject dans les modèles ARM. Pour passer des tableaux ou des nombres en toute sécurité, encapsulez-les dans un objet secureObject ou sérialisez-les en tant que secureString.
Sortie conditionnelle
Lorsque la valeur à retourner dépend d’une condition dans le déploiement, utilisez l’opérateur ?
.
output <name> <data-type> = <condition> ? <true-value> : <false-value>
En général, vous utilisez une sortie conditionnelle quand vous avez déployé de manière conditionnelle une ressource. L’exemple suivant montre comment retourner de façon conditionnelle l’ID de ressource pour une adresse IP publique si une nouvelle a été déployée.
Pour spécifier une sortie conditionnelle dans Bicep, utilisez l'opérateur ?
. L’exemple suivant retourne une URL de point de terminaison ou une chaîne vide qui dépend d’une condition :
param deployStorage bool = true
param storageName string
param location string = resourceGroup().location
resource myStorageAccount 'Microsoft.Storage/storageAccounts@2023-04-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 : ''
Nombre dynamique de sorties
Dans certains scénarios, vous ne connaissez pas le nombre d’instances d’une valeur que vous devez retourner lors de la création du modèle. Vous pouvez utiliser l’expression for
pour retourner un nombre variable de valeurs.
output <name> <data-type> = [for <item> in <collection>: {
...
}]
L’exemple suivant itère au sein d’un tableau :
param nsgLocation string = resourceGroup().location
param orgNames array = [
'Contoso'
'Fabrikam'
'Coho'
]
resource nsg 'Microsoft.Network/networkSecurityGroups@2023-11-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
}]
Pour plus d’informations sur les boucles, consultez Boucles itératives dans Bicep.
Sorties des modules
Pour récupérer une valeur de sortie à partir d’un module, utilisez la syntaxe suivante :
<module-name>.outputs.<property-name>
L’exemple suivant montre comment récupérer une valeur à partir d’un module pour définir l’adresse IP sur un équilibreur de charge :
module publicIP 'modules/public-ip-address.bicep' = {
name: 'public-ip-address-module'
}
resource loadBalancer 'Microsoft.Network/loadBalancers@2023-11-01' = {
name: loadBalancerName
location: location
properties: {
frontendIPConfigurations: [
{
name: 'name'
properties: {
publicIPAddress: {
id: publicIP.outputs.resourceId
}
}
}
]
// ...
}
}
Obtenir des valeurs de sortie
Une fois le déploiement réussi, les résultats du déploiement affichent automatiquement les valeurs de sortie.
Vous pouvez utiliser l’interface de ligne de commande Azure ou le script Azure PowerShell pour obtenir des valeurs de sortie à partir de l’historique du déploiement.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Tri d’objets dans les sorties
Dans JSON, un objet est une collection non ordonnée de zéro ou plusieurs paires clé ou valeur. L’ordre peut être différent en fonction des implémentations. Par exemple, la fonction Bicep items() trie les objets par ordre alphabétique. Dans d’autres endroits, vous pouvez conserver l’ordre d’origine. En raison de ce nondéterminisme, évitez d’effectuer des hypothèses sur l’ordre des clés d’objet lorsque vous écrivez du code, qui interagit avec les paramètres de déploiement et les sorties.
Étapes suivantes
Pour en savoir plus sur les propriétés disponibles pour les sorties, consultez la structure et la syntaxe des fichiers Bicep.