Vysvětlení struktury a syntaxe souborů Bicep
Tento článek popisuje strukturu a syntaxi souboru Bicep. Zobrazí různé části souboru a vlastnosti, které jsou v těchto oddílech k dispozici.
Podrobný kurz, který vás provede procesem vytvoření souboru Bicep, najdete v tématu Rychlý start: Vytvoření souborů Bicep pomocí editoru Visual Studio Code.
Formát Bicep
Bicep je deklarativní jazyk, což znamená, že prvky se mohou objevit v libovolném pořadí. Na rozdíl od imperativních jazyků pořadí prvků nemá vliv na zpracování nasazení.
Soubor Bicep obsahuje následující prvky.
@<decorator>(<argument>)
metadata <metadata-name> = ANY
targetScope = '<scope>'
@<decorator>(<argument>)
type <user-defined-data-type-name> = <type-expression>
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
@<decorator>(<argument>)
param <parameter-name> <parameter-data-type> = <default-value>
@<decorator>(<argument>)
var <variable-name> = <variable-value>
@<decorator>(<argument>)
resource <resource-symbolic-name> '<resource-type>@<api-version>' = {
<resource-properties>
}
@<decorator>(<argument>)
module <module-symbolic-name> '<path-to-file>' = {
name: '<linked-deployment-name>'
params: {
<parameter-names-and-values>
}
}
@<decorator>(<argument>)
output <output-name> <output-data-type> = <output-value>
Následující příklad ukazuje implementaci těchto prvků.
metadata description = 'Creates a storage account and a web app'
@description('The prefix to use for the storage account name.')
@minLength(3)
@maxLength(11)
param storagePrefix string
param storageSKU string = 'Standard_LRS'
param location string = resourceGroup().location
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
Metadata
Metadata v Bicep jsou netypová hodnota, kterou lze zahrnout do souborů Bicep. Umožňuje vám poskytnout dodatečné informace o souborech Bicep, včetně podrobností, jako je jeho název, popis, autor, datum vytvoření a další.
Cílový obor
Ve výchozím nastavení je cílový obor nastaven na resourceGroup
hodnotu . Pokud nasazujete na úrovni skupiny prostředků, nemusíte v souboru Bicep nastavit cílový obor.
Povolené hodnoty jsou následující:
- resourceGroup – výchozí hodnota použitá pro nasazení skupin prostředků.
- předplatné – používá se pro nasazení předplatného.
- managementGroup – používá se pro nasazení skupin pro správu.
- tenant – používá se pro nasazení tenanta.
V modulu můžete zadat obor, který se liší od oboru pro zbytek souboru Bicep. Další informace najdete v tématu Konfigurace oboru modulu
Dekoratéry
Pro každý z následujících prvků můžete přidat jeden nebo více dekorátorů:
Dekorátory zahrnují:
Dekoratér | Použít u elementu | Použít u datového typu | Argument | Popis |
---|---|---|---|---|
povolený | Param | vše | pole | Pomocí tohoto dekorátoru se ujistěte, že uživatel poskytuje správné hodnoty. Tento dekorátor je povolen pouze u param příkazů. Chcete-li deklarovat, že vlastnost musí být jednou ze sady předdefinovaných hodnot v type příkazu nebo output příkazu, použijte syntaxi sjednocovacího typu. Syntaxi sjednocovacího typu lze použít také v param příkazech. |
batchSize | modul, prostředek | – | integer | Nastavte instance pro postupné nasazení. |
description | func, param, module, output, resource, type, var | vše | string | Zadejte popisy prvků. Text ve formátu Markdown lze použít pro text popisu. |
diskriminátor | parametr, typ, výstup | objekt | string | Pomocí tohoto dekorátoru se ujistěte, že je identifikována a spravována správná podtřída. Další informace naleznete v tématu Vlastní značky sjednocovacího datového typu. |
export | func, type, var | vše | Žádná | Označuje, že prvek lze importovat jiným souborem Bicep. |
maxLength | parametr, výstup, typ | array, string | int | Maximální délka řetězcových a maticových prvků. Hodnota je inkluzivní. |
maxValue | parametr, výstup, typ | int | int | Maximální hodnota celočíselného elementu. Tato hodnota je inkluzivní. |
metadata | func, output, param, type | vše | objekt | Vlastní vlastnosti, které se mají použít u prvků. Může obsahovat vlastnost popisu, která je ekvivalentní popis dekorátoru. |
minLength | parametr, výstup, typ | array, string | int | Minimální délka pro řetězcové a maticové prvky. Hodnota je inkluzivní. |
minValue | parametr, výstup, typ | int | int | Minimální hodnota celočíselného elementu. Tato hodnota je inkluzivní. |
sealed | parametr, typ, výstup | objekt | Žádná | Zvýšení úrovně BCP089 z upozornění na chybu, pokud název vlastnosti parametru use-define datový typ je pravděpodobně překlep. Další informace naleznete v tématu Zvýšení úrovně chyby. |
Zabezpečený | parametr, typ | string, object | Žádná | Označí parametr jako zabezpečený. Hodnota zabezpečeného parametru se neuloží do historie nasazení a nezaprotokoluje se. Další informace naleznete v tématu Zabezpečení řetězců a objektů. |
Parametry
Použijte parametry pro hodnoty, které se musí pro různá nasazení lišit. Můžete definovat výchozí hodnotu parametru, který se použije, pokud během nasazování není k dispozici žádná hodnota.
Můžete například přidat parametr skladové položky pro určení různých velikostí prostředku. V závislosti na tom, jestli nasazujete do testování nebo produkčního prostředí, můžete předat různé hodnoty.
param storageSKU string = 'Standard_LRS'
Parametr je k dispozici pro použití v souboru Bicep.
sku: {
name: storageSKU
}
Pro každý parametr můžete přidat jeden nebo více dekorátorů. Další informace naleznete v tématu Použití dekorátorů.
Další informace naleznete v tématu Parametry v bicep.
Proměnné
Soubor Bicep můžete zviditelnit zapouzdřením složitých výrazů do proměnné. Můžete například přidat proměnnou pro název prostředku, který je vytvořen zřetězením několika hodnot dohromady.
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
Tuto proměnnou použijte všude, kde potřebujete komplexní výraz.
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: uniqueStorageName
Pro každou proměnnou můžete přidat jeden nebo více dekorátorů. Další informace naleznete v tématu Použití dekorátorů.
Další informace najdete v tématu Proměnné v bicep.
Typy
Příkaz můžete použít type
k definování uživatelem definovaných datových typů.
param location string = resourceGroup().location
type storageAccountSkuType = 'Standard_LRS' | 'Standard_GRS'
type storageAccountConfigType = {
name: string
sku: storageAccountSkuType
}
param storageAccountConfig storageAccountConfigType = {
name: 'storage${uniqueString(resourceGroup().id)}'
sku: 'Standard_LRS'
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: storageAccountConfig.name
location: location
sku: {
name: storageAccountConfig.sku
}
kind: 'StorageV2'
}
Pro každý uživatelem definovaný datový typ můžete přidat jeden nebo více dekorátorů. Další informace naleznete v tématu Použití dekorátorů.
Další informace naleznete v tématu Uživatelem definované datové typy.
Funkce
V souboru Bicep můžete kromě standardních funkcí Bicep, které jsou automaticky dostupné v souborech Bicep, vytvořit vlastní funkce. Vytvořte si vlastní funkce, pokud máte složité výrazy, které se opakovaně používají v souborech Bicep.
func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'
output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
Další informace naleznete v tématu Uživatelem definované funkce.
Zdroje informací
Pomocí klíčového resource
slova definujte prostředek, který se má nasadit. Deklarace prostředku obsahuje symbolický název prostředku. Tento symbolický název použijete v jiných částech souboru Bicep k získání hodnoty z prostředku.
Deklarace prostředku zahrnuje typ prostředku a verzi rozhraní API. V těle deklarace prostředku uveďte vlastnosti specifické pro daný typ prostředku.
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
Pro každý prostředek můžete přidat jeden nebo více dekorátorů. Další informace naleznete v tématu Použití dekorátorů.
Další informace najdete v tématu Deklarace prostředků v Bicep.
Některé prostředky mají vztah nadřazenosti nebo podřízenosti. Podřízený prostředek můžete definovat buď uvnitř nadřazeného prostředku, nebo mimo něj.
Následující příklad ukazuje, jak definovat podřízený prostředek v rámci nadřazeného prostředku. Obsahuje účet úložiště s podřízeným prostředkem (souborovou službou), který je definovaný v rámci účtu úložiště. Souborová služba má také podřízený prostředek (sdílenou složku), který je v něm definovaný.
resource storage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
resource service 'fileServices' = {
name: 'default'
resource share 'shares' = {
name: 'exampleshare'
}
}
}
Následující příklad ukazuje, jak definovat podřízený prostředek mimo nadřazený prostředek. K identifikaci vztahu nadřazeného/podřízeného objektu použijete nadřazenou vlastnost. Jsou definovány stejné tři prostředky.
resource storage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2023-04-01' = {
name: 'default'
parent: storage
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-04-01' = {
name: 'exampleshare'
parent: service
}
Další informace naleznete v tématu Nastavení názvu a typu pro podřízené prostředky v Bicep.
Moduly
Moduly umožňují opakovaně používat kód ze souboru Bicep v jiných souborech Bicep. V deklaraci modulu propočítáte soubor, který chcete znovu použít. Když nasadíte soubor Bicep, nasadí se také prostředky v modulu.
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
Symbolický název umožňuje odkazovat na modul odjinud v souboru. Výstupní hodnotu můžete získat například z modulu pomocí symbolického názvu a názvu výstupní hodnoty.
Pro každý modul můžete přidat jeden nebo více dekorátorů. Další informace naleznete v tématu Použití dekorátorů.
Další informace najdete v tématu Použití modulů Bicep.
Výstupy
Pomocí výstupů můžete vracet hodnoty z nasazení. Obvykle vrátíte hodnotu z nasazeného prostředku, když potřebujete tuto hodnotu znovu použít pro jinou operaci.
output storageEndpoint object = stg.properties.primaryEndpoints
Pro každý výstup můžete přidat jeden nebo více dekorátorů. Další informace naleznete v tématu Použití dekorátorů.
Další informace najdete v tématu Výstupy v Bicep.
Smyčky
Do souboru Bicep můžete přidat iterativní smyčky pro definování více kopií:
- resource
- modul
- proměnná
- vlastnost
- output
Pomocí výrazu for
definujte smyčku.
param moduleCount int = 2
module stgModule './example.bicep' = [for i in range(0, moduleCount): {
name: '${i}deployModule'
params: {
}
}]
Můžete iterovat pole, objekt nebo celočíselné indexy.
Další informace naleznete v tématu Iterativní smyčky v Bicep.
Podmíněné nasazení
Prostředek nebo modul můžete přidat do souboru Bicep, který je podmíněně nasazený. Během nasazení se podmínka vyhodnotí a výsledek určuje, jestli je prostředek nebo modul nasazený. Pomocí výrazu if
definujte podmíněné nasazení.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
Další informace najdete v tématu Podmíněné nasazení v Bicep.
Whitespace
Při vytváření souborů Bicep se mezery a karty ignorují.
Bicep je citlivá na nový řádek. Příklad:
resource sa 'Microsoft.Storage/storageAccounts@2023-04-01' = if (newOrExisting == 'new') {
...
}
Nejde napsat takto:
resource sa 'Microsoft.Storage/storageAccounts@2023-04-01' =
if (newOrExisting == 'new') {
...
}
Definujte objekty a pole v několika řádcích.
Komentáře
Používá se //
pro jednořádkové komentáře nebo /* ... */
pro víceřádkové komentáře.
Následující příklad ukazuje jednořádkový komentář.
// This is your primary NIC.
resource nic1 'Microsoft.Network/networkInterfaces@2023-11-01' = {
...
}
Následující příklad ukazuje víceřádkový komentář.
/*
This Bicep file assumes the key vault already exists and
is in same subscription and resource group as the deployment.
*/
param existingKeyVaultName string
Víceřádkové řetězce
Řetězec můžete rozdělit na několik řádků. K zahájení a ukončení víceřádkového řetězce použijte tři jednoduché znaky '''
uvozovek.
Znaky v řetězci s více řádky se zpracovávají tak, jak jsou. Řídicí znaky nejsou nutné. Do víceřádkového řetězce nemůžete zahrnout '''
. Interpolace řetězců se v současné době nepodporuje.
Řetězec můžete začínat přímo za otevřením '''
nebo přidat nový řádek. V obou případech výsledný řetězec neobsahuje nový řádek. V závislosti na konců řádků v souboru Bicep se nové řádky interpretují jako \r\n
nebo \n
.
Následující příklad ukazuje víceřádkový řetězec.
var stringVar = '''
this is multi-line
string with formatting
preserved.
'''
Předchozí příklad je ekvivalentní následujícímu kódu JSON.
"variables": {
"stringVar": "this is multi-line\r\n string with formatting\r\n preserved.\r\n"
}
Deklarace víceřádkového řádku
V deklaracích funkcí, polí a objektů teď můžete použít více řádků. Tato funkce vyžaduje rozhraní příkazového řádku Bicep verze 0.7.X nebo vyšší.
V následujícím příkladu resourceGroup()
je definice rozdělena na více řádků.
var foo = resourceGroup(
mySubscription,
myRgName)
Ukázky deklarace více řádků najdete v polích a objektech .
Známá omezení
- Nepodporuje se koncept apiProfile, který se používá k mapování jednoho souboru apiProfile na sadu apiVersion pro každý typ prostředku.
- Uživatelem definované funkce se v tuto chvíli nepodporují. Experimentální funkce je ale momentálně přístupná. Další informace naleznete v tématu Uživatelem definované funkce v Bicep.
- Některé funkce Bicep vyžadují odpovídající změnu zprostředkujícího jazyka (šablony JSON Azure Resource Manageru). Tyto funkce oznamujeme jako dostupné, když jsou všechny požadované aktualizace nasazené do globálního Azure. Pokud používáte jiné prostředí, například Azure Stack, může dojít ke zpoždění dostupnosti funkce. Funkce Bicep je dostupná pouze v případech, kdy se v daném prostředí aktualizoval také zprostředkující jazyk.
Další kroky
Úvod do Bicep najdete v tématu Co je Bicep?. Datové typy Bicep najdete v tématu Datové typy.