Utdata i Bicep
I den här artikeln beskrivs hur du definierar utdatavärden i en Bicep-fil. Du använder utdata när du behöver returnera värden från de distribuerade resurserna. Du är begränsad till 64 utdata i en Bicep-fil. Mer information finns i Mallgränser.
Definiera utmatningar
Syntaxen för att definiera ett utdatavärde är:
output <name> <data-type or type-expression> = <value>
Utdata kan ha samma namn som en parameter, variabel, modul eller resurs. Varje utdatavärde måste matcha till en av datatyperna eller ett användardefinierat uttryck för datatyp.
I följande exempel visas hur du returnerar en egenskap från en distribuerad resurs. I exemplet publicIP
är det symboliska namnet för en offentlig IP-adress som distribueras i Bicep-filen. Utdatavärdet hämtar det fullständigt kvalificerade domännamnet för den offentliga IP-adressen.
output hostname string = publicIP.properties.dnsSettings.fqdn
I nästa exempel visas hur du returnerar utdata av olika typer.
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()
Om du behöver mata ut en egenskap som har ett bindestreck i namnet använder du hakparenteser runt namnet i stället för punkt notation. Använd till exempel ['property-name']
i stället för .property-name
.
var user = {
'user-name': 'Test Person'
}
output stringOutput string = user['user-name']
I följande exempel visas hur du använder typuttryck:
param foo 'a' | 'b' = 'a'
output out 'a' | 'b' = foo
Mer information finns i Användardefinierade datatyper.
Använda dekoratörer
Dekoratörer är skrivna i formatet @expression
och placeras ovanför utdatadeklarationerna. I följande tabell visas tillgängliga dekoratörer för utdata.
Dekoratör | Tillämpa på | Argument | beskrivning |
---|---|---|---|
beskrivning | alla | sträng | Ange beskrivningar för utdata. |
diskriminerande | objekt | sträng | Använd den här dekoratören för att säkerställa att rätt underklass identifieras och hanteras. Mer information finns i Anpassad taggad union-datatyp. |
maxLength | matris, sträng | heltal | Maximal längd för sträng- och matrisutdata. Värdet är inkluderande. |
maxValue | heltal | heltal | Det maximala värdet för heltalsutdata. Det här värdet är inkluderande. |
metadata | alla | objekt | Anpassade egenskaper som ska tillämpas på utdata. Kan innehålla en beskrivningsegenskap som motsvarar beskrivningsdekoratören. |
minLength | matris, sträng | heltal | Minsta längd för sträng- och matrisutdata. Värdet är inkluderande. |
minValue | heltal | heltal | Minsta värde för heltalsutdata. Det här värdet är inkluderande. |
stängd | objekt | inget | Höj BCP089 från en varning till ett fel när ett egenskapsnamn för en användningsdefinierad datatyp sannolikt är ett skrivfel. Mer information finns i Höja felnivån. |
Dekoratörer finns i sys-namnområdet. Om du behöver skilja en dekoratör från ett annat objekt med samma namn, förorda dekoratören med sys
. Om din Bicep-fil till exempel innehåller en parameter med namnet description
måste du lägga till sys-namnområdet när du använder beskrivningsdekoratören.
@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string
beskrivning
Lägg till en förklaring genom att lägga till en beskrivning i utdatadeklarationer. Till exempel:
@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
Markdown-formaterad text kan användas för beskrivningstexten.
Diskriminerande
Se Anpassad taggad unionsdatatyp.
Heltalsbegränsningar
Du kan ange lägsta och högsta värden för heltalsutdata. Du kan ange en eller båda begränsningarna.
var thisMonth = 3
@minValue(1)
@maxValue(12)
output month int = thisMonth
Längdbegränsningar
Du kan ange minsta och högsta längd för sträng- och matrisutdata. Du kan ange en eller båda begränsningarna. För strängar anger längden antalet tecken. För matriser anger längden antalet objekt i matrisen.
I följande exempel deklareras två utdata. Ett utdata är för ett lagringskontonamn som måste innehålla 3–24 tecken. De andra utdata är en matris som måste ha mellan 1 och 5 objekt.
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
Metadata
Om du har anpassade egenskaper som du vill tillämpa på utdata lägger du till en metadatadekoratör. I metadata definierar du ett objekt med anpassade namn och värden. Objektet som du definierar för metadata kan innehålla egenskaper för valfritt namn och typ.
Du kan använda den här dekoratören för att spåra information om utdata som inte är meningsfulla att lägga till i beskrivningen.
var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
output settings object = obj
När du ger en @metadata()
dekoratör en egenskap som står i konflikt med en annan dekoratör, har den dekoratören alltid företräde framför allt i dekoratören @metadata()
. Därför är den motstridiga egenskapen i @metadata()
värdet redundant och kommer att ersättas. Mer information finns i Inga metadata i konflikt.
Stängd
Mer information finns i Höja felnivå.
Villkorsstyrda utdata
När värdet som ska returneras beror på ett villkor i distributionen använder du operatorn ?
.
output <name> <data-type> = <condition> ? <true-value> : <false-value>
Vanligtvis använder du villkorsstyrda utdata när du har distribuerat en resurs villkorligt. I följande exempel visas hur du villkorligt returnerar resurs-ID:t för en offentlig IP-adress baserat på om en ny har distribuerats.
Om du vill ange villkorsstyrda utdata i Bicep använder du operatorn ?
. I följande exempel returneras antingen en slutpunkts-URL eller en tom sträng beroende på ett villkor.
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 : ''
Dynamiskt antal utdata
I vissa scenarier vet du inte hur många instanser av ett värde du behöver returnera när du skapar mallen. Du kan returnera ett variabelt antal värden med hjälp for
av uttrycket .
output <name> <data-type> = [for <item> in <collection>: {
...
}]
I följande exempel itererar över en matris.
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
}]
Mer information om loopar finns i Iterativa loopar i Bicep.
Utdata från moduler
Om du vill hämta ett utdatavärde från en modul använder du följande syntax:
<module-name>.outputs.<property-name>
I följande exempel visas hur du anger IP-adressen för en lastbalanserare genom att hämta ett värde från en modul.
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
}
}
}
]
// ...
}
}
Hämta utdatavärden
När distributionen lyckas returneras utdatavärdena automatiskt i resultatet av distributionen.
Om du vill hämta utdatavärden från distributionshistoriken kan du använda Azure CLI- eller Azure PowerShell-skript.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Objektsortering i utdata
I JSON är ett objekt en osorterad samling med noll eller fler nyckel/värde-par. Beställningen kan variera beroende på implementeringarna. Funktionen Bicep items() sorterar till exempel objekten i alfabetisk ordning. På andra ställen kan den ursprungliga ordningen bevaras. På grund av denna icke-determinism bör du undvika att göra några antaganden om ordningen på objektnycklar när du skriver kod, som interagerar med distributionsparametrar och utdata.
Nästa steg
- Mer information om tillgängliga egenskaper för utdata finns i Förstå strukturen och syntaxen för Bicep.