Dane wyjściowe w Bicep

W tym artykule opisano sposób definiowania wartości wyjściowych w pliku Bicep. Dane wyjściowe są używane, gdy trzeba zwracać wartości z wdrożonych zasobów. W pliku Bicep jest ograniczonych do 64 danych wyjściowych. Aby uzyskać więcej informacji, zobacz Limity szablonów.

Definiowanie wartości wyjściowych

Składnia definiująca wartość wyjściową to:

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

Dane wyjściowe mogą mieć taką samą nazwę jak parametr, zmienna, moduł lub zasób. Każda wartość wyjściowa musi być rozpoznawana jako jeden z typów danych lub wyrażenie typu danych zdefiniowanego przez użytkownika.

W poniższym przykładzie pokazano, jak zwrócić właściwość z wdrożonego zasobu. W tym przykładzie publicIP jest to symboliczna nazwa publicznego adresu IP wdrożonego w pliku Bicep. Wartość wyjściowa pobiera w pełni kwalifikowaną nazwę domeny dla publicznego adresu IP.

output hostname string = publicIP.properties.dnsSettings.fqdn

W następnym przykładzie pokazano, jak zwracać dane wyjściowe różnych typów.

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

Jeśli musisz wyświetlić właściwość, która ma łącznik w nazwie, użyj nawiasów kwadratowych wokół nazwy zamiast notacji kropkowej. Na przykład użyj polecenia ['property-name'] zamiast .property-name.

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

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

W poniższym przykładzie pokazano, jak używać wyrażenia typu:

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

output out 'a' | 'b' = foo

Aby uzyskać więcej informacji, zobacz Typy danych zdefiniowanych przez użytkownika.

Dane wyjściowe warunkowe

Gdy wartość do zwrócenia zależy od warunku we wdrożeniu, użyj ? operatora .

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

Zazwyczaj dane wyjściowe warunkowe są używane podczas warunkowego wdrażania zasobu. W poniższym przykładzie pokazano, jak warunkowo zwrócić identyfikator zasobu dla publicznego adresu IP na podstawie tego, czy został wdrożony nowy.

Aby określić dane wyjściowe warunkowe w Bicep, użyj ? operatora . Poniższy przykład zwraca adres URL punktu końcowego lub pusty ciąg w zależności od warunku.

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 : ''

Dynamiczna liczba danych wyjściowych

W niektórych scenariuszach nie wiadomo, ile wystąpień wartości należy zwrócić podczas tworzenia szablonu. Możesz zwrócić zmienną liczbę wartości przy użyciu for wyrażenia .

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

Poniższy przykład iteruje tablicę.

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
}]

Aby uzyskać więcej informacji na temat pętli, zobacz Iteracyjne pętle w Bicep.

Dane wyjściowe z modułów

Aby uzyskać wartość wyjściową z modułu, użyj następującej składni:

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

W poniższym przykładzie pokazano, jak ustawić adres IP modułu równoważenia obciążenia, pobierając wartość z modułu.

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
          }
        }
      }
    ]
    // ...
  }
}

Pobieranie wartości wyjściowych

Gdy wdrożenie zakończy się pomyślnie, wartości wyjściowe zostaną automatycznie zwrócone w wynikach wdrożenia.

Aby uzyskać wartości wyjściowe z historii wdrożenia, możesz użyć interfejsu wiersza polecenia platformy Azure lub skryptu programu Azure PowerShell.

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

Sortowanie obiektów w danych wyjściowych

W formacie JSON obiekt jest nieurządkowaną kolekcją par klucz/wartość zero lub więcej. Kolejność może być różna w zależności od implementacji. Na przykład funkcja Bicep items() sortuje obiekty w kolejności alfabetycznej. W innych miejscach można zachować oryginalną kolejność. Ze względu na ten niedeterminizm należy unikać wprowadzania wszelkich założeń dotyczących porządkowania kluczy obiektów podczas pisania kodu, który wchodzi w interakcje z parametrami i danymi wyjściowymi wdrożeń.

Następne kroki