Delen via


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 descriptionbevat, 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