Výstupy v Bicep

Tento článek popisuje, jak definovat výstupní hodnoty v souboru Bicep. Výstupy použijete v případě, že potřebujete vracet hodnoty z nasazených prostředků. V souboru Bicep máte omezení na 64 výstupů. Další informace najdete v tématu Omezení šablon.

Definování výstupních hodnot

Syntaxe pro definování výstupní hodnoty je:

output <name> <data-type or type-expression> = <value>

Výstup může mít stejný název jako parametr, proměnná, modul nebo prostředek. Každá výstupní hodnota se musí přeložit na jeden z datových typů nebo výrazu datového typu definovaného uživatelem.

Následující příklad ukazuje, jak vrátit vlastnost z nasazeného prostředku. V tomto příkladu publicIP je symbolický název veřejné IP adresy nasazené v souboru Bicep. Výstupní hodnota získá plně kvalifikovaný název domény pro veřejnou IP adresu.

output hostname string = publicIP.properties.dnsSettings.fqdn

Další příklad ukazuje, jak vrátit výstupy různých typů.

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()

Pokud potřebujete vytvořit výstup vlastnosti, která má v názvu pomlčka, použijte místo tečky kolem názvu hranaté závorky. Například místo ['property-name'] ..property-name

var user = {
  'user-name': 'Test Person'
}

output stringOutput string = user['user-name']

Následující příklad ukazuje použití výrazu typu:

param foo 'a' | 'b' = 'a'

output out 'a' | 'b' = foo

Další informace naleznete v tématu Uživatelem definované datové typy.

Podmíněný výstup

Pokud vrácená hodnota závisí na podmínce v nasazení, použijte ? operátor.

output <name> <data-type> = <condition> ? <true-value> : <false-value>

Podmíněný výstup se obvykle používá při podmíněném nasazení prostředku. Následující příklad ukazuje, jak podmíněně vrátit ID prostředku pro veřejnou IP adresu na základě toho, jestli byl nasazen nový.

Pokud chcete zadat podmíněný výstup v Bicep, použijte ? operátor. Následující příklad vrátí adresu URL koncového bodu nebo prázdný řetězec v závislosti na podmínce.

param deployStorage bool = true
param storageName string
param location string = resourceGroup().location

resource myStorageAccount 'Microsoft.Storage/storageAccounts@2019-06-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 : ''

Dynamický počet výstupů

V některých scénářích neznáte počet instancí hodnoty, které je potřeba vrátit při vytváření šablony. Pomocí výrazu for můžete vrátit proměnný počet hodnot.

output <name> <data-type> = [for <item> in <collection>: {
  ...
}]

Následující příklad iteruje přes pole.

param nsgLocation string = resourceGroup().location
param orgNames array = [
  'Contoso'
  'Fabrikam'
  'Coho'
]

resource nsg 'Microsoft.Network/networkSecurityGroups@2020-06-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
}]

Další informace o smyčkách naleznete v tématu Iterativní smyčky v Bicep.

Výstupy z modulů

Pokud chcete získat výstupní hodnotu z modulu, použijte následující syntaxi:

<module-name>.outputs.<property-name>

Následující příklad ukazuje, jak nastavit IP adresu v nástroji pro vyrovnávání zatížení načtením hodnoty z modulu.

module publicIP 'modules/public-ip-address.bicep' = {
  name: 'public-ip-address-module'
}

resource loadBalancer 'Microsoft.Network/loadBalancers@2020-11-01' = {
  name: loadBalancerName
  location: location
  properties: {
    frontendIPConfigurations: [
      {
        name: 'name'
        properties: {
          publicIPAddress: {
            id: publicIP.outputs.resourceId
          }
        }
      }
    ]
    // ...
  }
}

Získání výstupních hodnot

Po úspěšném nasazení se výstupní hodnoty automaticky vrátí ve výsledcích nasazení.

K získání výstupních hodnot z historie nasazení můžete použít Azure CLI nebo skript Azure PowerShellu.

(Get-AzResourceGroupDeployment `
  -ResourceGroupName <resource-group-name> `
  -Name <deployment-name>).Outputs.resourceID.value

Řazení objektů ve výstupech

Ve formátu JSON je objekt neuspořádanou kolekcí párů klíč/hodnota nula nebo více. Řazení se může lišit v závislosti na implementacích. Například funkce Bicep items() seřadí objekty v abecedním pořadí. Na jiných místech lze původní řazení zachovat. Kvůli tomuto ne determinismu nepoužívejte žádné předpoklady týkající se řazení klíčů objektů při psaní kódu, které interaguje s parametry nasazení a výstupy.

Další kroky