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 utdatavärden
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.
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.