Dela via


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 descriptionmå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