Udostępnij za pośrednictwem


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 danych 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.

Korzystanie z dekoratorów

Dekoratory są zapisywane w formacie @expression i są umieszczane powyżej deklaracji wyjściowych. W poniższej tabeli przedstawiono dostępne dekoratory dla danych wyjściowych.

Dekorator Zastosuj do Argument opis
opis wszystkie string Podaj opisy danych wyjściowych.
Rozróżniacza obiekt string Użyj tego dekoratora, aby upewnić się, że prawidłowa podklasa jest identyfikowana i zarządzana. Aby uzyskać więcej informacji, zobacz Custom-tagged union data type (Typ danych unii z tagiem niestandardowym).
maxLength tablica, ciąg int Maksymalna długość danych wyjściowych ciągu i tablicy. Wartość jest inkluzywna.
maxValue int int Maksymalna wartość danych wyjściowych liczby całkowitej. Ta wartość jest inkluzywna.
metadane wszystkie obiekt Właściwości niestandardowe, które mają być stosowane do danych wyjściowych. Może zawierać właściwość opisu, która jest równoważna dekoratorowi opisu.
minLength tablica, ciąg int Minimalna długość danych wyjściowych ciągu i tablicy. Wartość jest inkluzywna.
minValue int int Minimalna wartość danych wyjściowych liczby całkowitej. Ta wartość jest inkluzywna.
sealed obiekt Brak Podnieś poziom BCP089 z ostrzeżenia do błędu, gdy nazwa właściwości typu danych use-define jest prawdopodobnie literówką. Aby uzyskać więcej informacji, zobacz Podnoszenie poziomu błędu.

Dekoratory znajdują się w przestrzeni nazw systemu. Jeśli musisz odróżnić dekorator od innego elementu o tej samej nazwie, należy poprzeć dekorator za pomocą polecenia sys. Jeśli na przykład plik Bicep zawiera parametr o nazwie description, należy dodać przestrzeń nazw systemu podczas korzystania z dekoratora opisu .

@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string

opis

Aby dodać wyjaśnienie, dodaj opis do deklaracji wyjściowych. Na przykład:

@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''

Tekst w formacie markdown może służyć do tekstu opisu.

Rozróżniacza

Zobacz Typ danych unii otagowanych niestandardowych tagach.

Ograniczenia liczb całkowitych

Można ustawić wartości minimalne i maksymalne dla danych wyjściowych liczby całkowitej. Można ustawić jedno lub oba ograniczenia.

var thisMonth = 3

@minValue(1)
@maxValue(12)
output month int = thisMonth

Ograniczenia długości

Możesz określić minimalną i maksymalną długość dla danych wyjściowych ciągu i tablicy. Można ustawić jedno lub oba ograniczenia. W przypadku ciągów długość wskazuje liczbę znaków. W przypadku tablic długość wskazuje liczbę elementów w tablicy.

Poniższy przykład deklaruje dwa dane wyjściowe. Jednym z danych wyjściowych jest nazwa konta magazynu, która musi mieć od 3 do 24 znaków. Inne dane wyjściowe to tablica, która musi zawierać od 1 do 5 elementów.

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

Metadane

Jeśli masz właściwości niestandardowe, które chcesz zastosować do danych wyjściowych, dodaj dekorator metadanych. W metadanych zdefiniuj obiekt z niestandardowymi nazwami i wartościami. Obiekt zdefiniowany dla metadanych może zawierać właściwości dowolnej nazwy i typu.

Możesz użyć tego dekoratora do śledzenia informacji o danych wyjściowych, które nie mają sensu dodawać do opisu.

var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
  source: 'database'
  contact: 'Web team'
})
output settings object = obj

Po podaniu dekoratora @metadata() z właściwością, która powoduje konflikt z innym dekoratorem, dekorator zawsze ma pierwszeństwo przed wszystkimi elementami w dekoratorze @metadata() . Dlatego właściwość powodująca konflikt w ramach @metadata() wartości jest nadmiarowa i zostanie zamieniona. Aby uzyskać więcej informacji, zobacz Brak powodujących konflikt metadanych.

Zamknięte

Zobacz Podnoszenie poziomu błędu.

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

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

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@2023-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