Uitvoer in Bicep
In dit artikel wordt beschreven hoe u uitvoerwaarden definieert in een Bicep-bestand. U gebruikt uitvoer wanneer u waarden van de geïmplementeerde resources moet retourneren. U bent beperkt tot 64 uitvoer in een Bicep-bestand. Zie Sjabloonlimieten voor meer informatie.
Uitvoer definiëren
De syntaxis voor het definiëren van een uitvoerwaarde is:
output <name> <data-type or type-expression> = <value>
Een uitvoer kan dezelfde naam hebben als een parameter, variabele, module of resource. Elke uitvoerwaarde moet worden omgezet in een van de gegevenstypen of door de gebruiker gedefinieerde expressie voor gegevenstypen.
In het volgende voorbeeld ziet u hoe u een eigenschap van een geïmplementeerde resource kunt retourneren. In het voorbeeld publicIP
is dit de symbolische naam voor een openbaar IP-adres dat is geïmplementeerd in het Bicep-bestand. De uitvoerwaarde haalt de volledig gekwalificeerde domeinnaam op voor het openbare IP-adres.
output hostname string = publicIP.properties.dnsSettings.fqdn
In het volgende voorbeeld ziet u hoe u uitvoer van verschillende typen retourneert.
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()
Als u een eigenschap met een afbreekstreepje in de naam wilt uitvoeren, gebruikt u vierkante haken rond de naam in plaats van punt notatie. Gebruik bijvoorbeeld ['property-name']
in plaats van .property-name
.
var user = {
'user-name': 'Test Person'
}
output stringOutput string = user['user-name']
In het volgende voorbeeld ziet u hoe u een typeexpressie gebruikt:
param foo 'a' | 'b' = 'a'
output out 'a' | 'b' = foo
Zie Door de gebruiker gedefinieerde gegevenstypen voor meer informatie.
Decorators gebruiken
Decorators worden geschreven in de indeling @expression
en worden boven uitvoerdeclaraties geplaatst. In de volgende tabel ziet u de beschikbare decorators voor uitvoer.
Decorateur | Van toepassing op | Argument | Beschrijving |
---|---|---|---|
beschrijving | Alles | tekenreeks | Geef beschrijvingen op voor de uitvoer. |
Discriminator | object | tekenreeks | Gebruik deze decorator om ervoor te zorgen dat de juiste subklasse wordt geïdentificeerd en beheerd. Zie het gegevenstype Aangepaste samenvoeging voor meer informatie. |
maxLength | matrix, tekenreeks | int | De maximale lengte voor tekenreeks- en matrixuitvoer. De waarde is inclusief. |
maxValue | int | int | De maximumwaarde voor de uitvoer van het gehele getal. Deze waarde is inclusief. |
metagegevens | Alles | object | Aangepaste eigenschappen die moeten worden toegepast op de uitvoer. Kan een beschrijvingseigenschap bevatten die gelijk is aan de beschrijvingsdecorator. |
minLength | matrix, tekenreeks | int | De minimale lengte voor tekenreeks- en matrixuitvoer. De waarde is inclusief. |
minValue | int | int | De minimumwaarde voor de uitvoer van het gehele getal. Deze waarde is inclusief. |
Verzegeld | object | Geen | Verhoog BCP089 van een waarschuwing naar een fout wanneer een eigenschapsnaam van een gegevenstype use-define waarschijnlijk een type typfout is. Zie Foutniveau verhogen voor meer informatie. |
Decorators bevinden zich in de sys-naamruimte. Als u een decorator wilt onderscheiden van een ander item met dezelfde naam, moet u de decorator vooraf laten gaan door sys
. Als uw Bicep-bestand bijvoorbeeld een parameter met de naam description
bevat, moet u de sys-naamruimte toevoegen wanneer u de beschrijvings decorator gebruikt.
@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string
Beschrijving
Als u uitleg wilt toevoegen, voegt u een beschrijving toe aan uitvoerdeclaraties. Voorbeeld:
@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
Markdown-opgemaakte tekst kan worden gebruikt voor de beschrijvingstekst.
Discriminator
Zie het gegevenstype Voor een samenvoeging met aangepaste tags.
Beperkingen voor gehele getallen
U kunt minimum- en maximumwaarden instellen voor gehele getallen. U kunt een of beide beperkingen instellen.
var thisMonth = 3
@minValue(1)
@maxValue(12)
output month int = thisMonth
Lengtebeperkingen
U kunt minimum- en maximumlengten opgeven voor tekenreeks- en matrixuitvoer. U kunt een of beide beperkingen instellen. Voor tekenreeksen geeft de lengte het aantal tekens aan. Voor matrices geeft de lengte het aantal items in de matrix aan.
In het volgende voorbeeld worden twee uitvoerwaarden declareren. Eén uitvoer is voor een opslagaccountnaam met 3-24 tekens. De andere uitvoer is een matrix die uit 1-5 items moet bestaan.
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
Metagegevens
Als u aangepaste eigenschappen hebt die u wilt toepassen op een uitvoer, voegt u een metagegevensdecorator toe. Definieer binnen de metagegevens een object met de aangepaste namen en waarden. Het object dat u definieert voor de metagegevens kan eigenschappen van elke naam en elk type bevatten.
U kunt deze decorator gebruiken om informatie bij te houden over de uitvoer die niet zinvol is om aan de beschrijving toe te voegen.
var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
output settings object = obj
Wanneer u een @metadata()
decorator verstrekt met een eigenschap die conflicteert met een andere decorator, heeft die decorator altijd voorrang op iets in de @metadata()
decorator. De conflicterende eigenschap in de @metadata()
waarde is dus redundant en wordt vervangen. Zie Geen conflicterende metagegevens voor meer informatie.
Verzegeld
Zie Foutniveau verhogen.
Voorwaardelijke uitvoer
Wanneer de te retourneren waarde afhankelijk is van een voorwaarde in de implementatie, gebruikt u de ?
operator.
output <name> <data-type> = <condition> ? <true-value> : <false-value>
Normaal gesproken gebruikt u een voorwaardelijke uitvoer wanneer u een resource voorwaardelijk hebt geïmplementeerd . In het volgende voorbeeld ziet u hoe u de resource-id voorwaardelijk retourneert voor een openbaar IP-adres op basis van of er een nieuwe is geïmplementeerd.
Als u een voorwaardelijke uitvoer in Bicep wilt opgeven, gebruikt u de ?
operator. In het volgende voorbeeld wordt een eindpunt-URL of een lege tekenreeks geretourneerd, afhankelijk van een voorwaarde.
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 : ''
Dynamisch aantal uitvoer
In sommige scenario's weet u niet hoeveel exemplaren van een waarde u moet retourneren bij het maken van de sjabloon. U kunt een variabel aantal waarden retourneren met behulp van de for
expressie.
output <name> <data-type> = [for <item> in <collection>: {
...
}]
In het volgende voorbeeld wordt een matrix herhaald.
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
}]
Zie Iteratieve lussen in Bicep voor meer informatie over lussen.
Uitvoer van modules
Gebruik de volgende syntaxis om een uitvoerwaarde op te halen uit een module:
<module-name>.outputs.<property-name>
In het volgende voorbeeld ziet u hoe u het IP-adres op een load balancer instelt door een waarde op te halen uit een module.
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
}
}
}
]
// ...
}
}
Uitvoerwaarden ophalen
Wanneer de implementatie slaagt, worden de uitvoerwaarden automatisch geretourneerd in de resultaten van de implementatie.
Als u uitvoerwaarden wilt ophalen uit de implementatiegeschiedenis, kunt u het Azure CLI- of Azure PowerShell-script gebruiken.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Objectsortering in uitvoer
In JSON is een object een niet-geordende verzameling van nul of meer sleutel-waardeparen. De volgorde kan verschillen, afhankelijk van de implementaties. De functie Bicep items() sorteert bijvoorbeeld de objecten in alfabetische volgorde. Op andere plaatsen kan de oorspronkelijke volgorde behouden blijven. Vanwege dit niet-determinisme vermijdt u veronderstellingen over de volgorde van objectsleutels bij het schrijven van code, die communiceert met implementatieparameters en uitvoer.
Volgende stappen
- Zie De structuur en syntaxis van Bicep voor meer informatie over de beschikbare eigenschappen voor uitvoer.