Megosztás a következőn keresztül:


A Bicep-fájlok szerkezetének és szintaxisának megismerése

Ez a cikk egy Bicep-fájl szerkezetét és szintaxisát ismerteti. Bemutatja a fájl különböző szakaszait és az ezekben a szakaszokban elérhető tulajdonságokat.

A Bicep-fájlok létrehozásának folyamatán végigvezető részletes oktatóanyagért tekintse meg a Rövid útmutatót: Bicep-fájlok létrehozása a Visual Studio Code-tal.

Bicep formátum

A Bicep egy deklaratív nyelv, ami azt jelenti, hogy az elemek bármilyen sorrendben megjelenhetnek. Az imperatív nyelvektől eltérően az elemek sorrendje nem befolyásolja az üzembe helyezés feldolgozását.

A Bicep-fájlok a következő elemeket tartalmaznak.

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

Az alábbi példa ezeknek az elemeknek a megvalósítását mutatja be.

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

Metaadatok

A Bicep metaadatai olyan nem beírt értékek, amelyek a Bicep-fájlokban is szerepelhetnek. Lehetővé teszi, hogy kiegészítő információkat adjon meg a Bicep-fájlokról, beleértve a nevét, leírását, szerzőjét, létrehozási dátumát stb.

Cél hatóköre

Alapértelmezés szerint a cél hatóköre a következőre resourceGroupvan állítva: . Ha az erőforráscsoport szintjén telepít, nem kell beállítania a célhatókört a Bicep-fájlban.

Az engedélyezett értékek a következők:

  • resourceGroup – az erőforráscsoport üzembe helyezéséhez használt alapértelmezett érték.
  • előfizetés – előfizetések üzembe helyezéséhez használatos.
  • managementGroup – felügyeleti csoportok üzembe helyezéséhez használatos.
  • bérlő – bérlőtelepítésekhez használatos.

Egy modulban megadhat egy olyan hatókört, amely eltér a Bicep-fájl többi részének hatókörétől. További információ: Modulhatókör konfigurálása

Dekorátorok

Az alábbi elemek mindegyikéhez hozzáadhat egy vagy több dekoratőrt:

A lakberendezők a következők:

Lakberendező Alkalmazás elemre Alkalmazás adattípusra Argumentum Leírás
megengedett Param mind array Ezzel a dekorátorsal győződjön meg arról, hogy a felhasználó helyes értékeket ad meg. Ez a dekoratőr csak a nyilatkozatokban param engedélyezett. Ha azt szeretné deklarálni, hogy egy tulajdonságnak egy vagy output utasításban előre definiált értékek type egyikének kell lennie, használja az egyesítő típusú szintaxist. Az egyesítő típusú szintaxis az utasításokban param is használható.
batchSize modul, erőforrás n/a egész szám A példányok beállítása egymás után történő üzembe helyezéshez.
leírás func, param, modul, kimenet, erőforrás, típus, var mind húr Adja meg az elemek leírását. Markdown formátumú szöveg használható a leírás szövegéhez.
diszkriminatív param, type, output object húr Ezzel a dekorátor használatával győződjön meg arról, hogy a megfelelő alosztályt azonosítja és kezeli. További információ: Egyéni címkével ellátott egyesítő adattípus.
exportálás func, type, var mind Nincs Azt jelzi, hogy az elemet egy másik Bicep-fájl importálhatja.
maxLength param, output, type tömb, sztring egész A sztring- és tömbelemek maximális hossza. Az érték befogadó.
maxValue param, output, type egész egész Az egész szám elemeinek maximális értéke. Ez az érték a befogadó.
metaadatok func, output, param, type mind object Az elemekre alkalmazandó egyéni tulajdonságok. Olyan leírástulajdonságokat is tartalmazhat, amelyek egyenértékűek a leírás dekorátorával.
minLength param, output, type tömb, sztring egész A sztring- és tömbelemek minimális hossza. Az érték befogadó.
minValue param, output, type egész egész Az egész szám elemeinek minimális értéke. Ez az érték a befogadó.
lezárt param, type, output object Nincs A BCP089 emelése figyelmeztetésből hibába, ha egy használatalapú adattípus tulajdonságneve valószínűleg elírás. További információ: Hibaszint emelés.
biztonságos param, type sztring, objektum Nincs A paramétert biztonságosként jelöli meg. A biztonságos paraméter értékét a rendszer nem menti az üzembe helyezési előzményekbe, és nincs naplózva. További információ: Biztonságos sztringek és objektumok.

Paraméterek

Olyan értékekhez használjon paramétereket, amelyeknek eltérőnek kell a különböző üzemelő példányok esetében. Megadhat egy alapértelmezett értéket a használt paraméterhez, ha az üzembe helyezés során nem ad meg értéket.

Hozzáadhat például egy termékváltozat-paramétert az erőforrás különböző méreteinek megadásához. Különböző értékeket adhat meg attól függően, hogy tesztelésre vagy éles üzembe helyezésre készül-e.

param storageSKU string = 'Standard_LRS'

A paraméter a Bicep-fájlban használható.

sku: {
  name: storageSKU
}

Minden paraméterhez hozzáadhat egy vagy több dekoratőrt. További információ: Lakberendezők használata.

További információ: Paraméterek a Bicepben.

Változók

A Bicep-fájlt olvashatóbbá teheti, ha összetett kifejezéseket foglal bele egy változóba. Hozzáadhat például egy változót egy erőforrásnévhez, amely több érték összefűzésével jön létre.

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

Alkalmazza ezt a változót bárhol, ahol szüksége van az összetett kifejezésre.

resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: uniqueStorageName

Minden változóhoz hozzáadhat egy vagy több dekorátort. További információ: Lakberendezők használata.

További információ: Változók a Bicepben.

Típusok

Az type utasítás használatával definiálhat felhasználó által definiált adattípusokat.

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

Minden felhasználó által definiált adattípushoz hozzáadhat egy vagy több dekorátort. További információ: Lakberendezők használata.

További információ: Felhasználó által definiált adattípusok.

Függvények

A Bicep-fájlban a szokásos Bicep-függvények mellett saját függvényeket is létrehozhat, amelyek automatikusan elérhetők a Bicep-fájlokban. Saját függvényeket hozhat létre, ha bonyolult kifejezésekkel rendelkezik, amelyeket a Bicep-fájlokban ismétlődően használnak.

func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'

output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')

További információ: Felhasználó által definiált függvények.

Források

resource A kulcsszóval definiálhat egy üzembe helyezhető erőforrást. Az erőforrás-deklaráció az erőforrás szimbolikus nevét tartalmazza. Ezt a szimbolikus nevet a Bicep-fájl más részeiben használja az erőforrás értékének lekéréséhez.

Az erőforrás-deklaráció tartalmazza az erőforrástípust és az API-verziót. Az erőforrás-deklaráció törzsében szerepeljenek az erőforrástípusra jellemző tulajdonságok.

resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

Minden erőforráshoz hozzáadhat egy vagy több dekoratőrt. További információ: Lakberendezők használata.

További információ: Erőforrás-deklaráció a Bicepben.

Egyes erőforrások szülő-gyermek kapcsolatban vannak. Gyermekerőforrást a szülőerőforráson belül vagy azon kívül is meghatározhat.

Az alábbi példa bemutatja, hogyan definiálhat gyermekerőforrást egy szülőerőforráson belül. Tartalmaz egy tárfiókot a tárfiókban definiált gyermekerőforrással (fájlszolgáltatással). A fájlszolgáltatás egy gyermekerőforrással (megosztással) is rendelkezik, amely benne van definiálva.

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

A következő példa bemutatja, hogyan definiálhat gyermekerőforrást a szülőerőforráson kívül. A szülőtulajdonság használatával azonosíthatja a szülő-gyermek kapcsolatot. Ugyanaz a három erőforrás van definiálva.

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
}

További információ: Gyermekerőforrások nevének és típusának beállítása a Bicepben.

Modulok

A modulok lehetővé teszik, hogy más Bicep-fájlokban lévő Bicep-fájlokból származó kódot újra felhasználjon. A modul deklarációjában hivatkozik a fájlra, hogy újra felhasználhassa. A Bicep-fájl üzembe helyezésekor a modul erőforrásai is üzembe lesznek helyezve.

module webModule './webApp.bicep' = {
  name: 'webDeploy'
  params: {
    skuName: 'S1'
    location: location
  }
}

A szimbolikus név lehetővé teszi a modul hivatkozását a fájl más részeiről. Egy modul kimeneti értékét például a szimbolikus névvel és a kimeneti érték nevével is lekérheti.

Minden modulhoz hozzáadhat egy vagy több dekoratőrt. További információ: Lakberendezők használata.

További információ: Bicep-modulok használata.

Kimenetek

Kimenetek használatával adja vissza az üzembe helyezés értékeit. Általában akkor ad vissza egy értéket egy üzembe helyezett erőforrásból, ha ezt az értéket újra kell használnia egy másik művelethez.

output storageEndpoint object = stg.properties.primaryEndpoints

Minden kimenethez hozzáadhat egy vagy több dekorátort. További információ: Lakberendezők használata.

További információ: Kimenetek a Bicepben.

Hurkok

A Bicep-fájlhoz iteratív hurkokat adhat hozzá a következő fájlok több példányának definiálásához:

  • erőforrás
  • modul
  • változó
  • tulajdonság
  • output

A kifejezés használatával for definiálhat egy hurkot.

param moduleCount int = 2

module stgModule './example.bicep' = [for i in range(0, moduleCount): {
  name: '${i}deployModule'
  params: {
  }
}]

Egy tömb, objektum vagy egész szám indexe iterálható.

További információ: Iteratív hurkok a Bicepben.

Feltételes üzembe helyezés

A feltételesen üzembe helyezett Bicep-fájlhoz hozzáadhat egy erőforrást vagy modult. Az üzembe helyezés során a rendszer kiértékeli a feltételt, és az eredmény meghatározza, hogy az erőforrás vagy a modul üzembe lett-e helyezve. A kifejezéssel if feltételes üzembe helyezést határozhat meg.

param deployZone bool

resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
  name: 'myZone'
  location: 'global'
}

További információ: Feltételes üzembe helyezés a Bicepben.

Térköz

A bicep-fájlok létrehozásakor a rendszer figyelmen kívül hagyja a szóközöket és a lapokat.

Bicep newline sensitive. Példa:

resource sa 'Microsoft.Storage/storageAccounts@2023-04-01' = if (newOrExisting == 'new') {
  ...
}

Nem írható így:

resource sa 'Microsoft.Storage/storageAccounts@2023-04-01' =
    if (newOrExisting == 'new') {
      ...
    }

Objektumok és tömbök definiálása több sorban.

Megjegyzések

Egysoros megjegyzésekhez vagy /* ... */ többsoros megjegyzésekhez használható //

Az alábbi példában egy egysoros megjegyzés látható.

// This is your primary NIC.
resource nic1 'Microsoft.Network/networkInterfaces@2023-11-01' = {
  ...
}

Az alábbi példában egy többsoros megjegyzés látható.

/*
  This Bicep file assumes the key vault already exists and
  is in same subscription and resource group as the deployment.
*/
param existingKeyVaultName string

Többsoros sztringek

A sztringeket több sorra bonthatja. A többsoros sztring elindításához és befejezéséhez használjon három egyetlen idézőjelet ''' .

A többsoros sztringben lévő karakterek kezelése a következőképpen történik. A feloldó karakterek szükségtelenek. A többsoros sztringben nem szerepelhet ''' . A sztring interpolációja jelenleg nem támogatott.

Elindíthatja a sztringet közvetlenül a megnyitás ''' után, vagy felvehet egy új sort. Mindkét esetben az eredményül kapott sztring nem tartalmaz új sort. A Bicep-fájlban lévő sorvégződéstől függően a rendszer az új sorokat a következőképpen értelmezi \r\n : vagy \n.

Az alábbi példa egy többsoros sztringet mutat be.

var stringVar = '''
this is multi-line
  string with formatting
  preserved.
'''

Az előző példa a következő JSON-nak felel meg.

"variables": {
  "stringVar": "this is multi-line\r\n  string with formatting\r\n  preserved.\r\n"
}

Többsoros deklarációk

Mostantól több sort is használhat függvény-, tömb- és objektumdeklarációkban. Ehhez a funkcióhoz a Bicep CLI 0.7.X-es vagy újabb verziója szükséges.

Az alábbi példában a resourceGroup() definíció több sorra van bontva.

var foo = resourceGroup(
  mySubscription,
  myRgName)

Többsoros deklarációmintákat a Tömbök és objektumok című témakörben talál.

Ismert korlátozások

  • Az apiProfile fogalma nem támogatott, amely egyetlen apiProfile egy adott apiVersion-ra való leképezésére szolgál az egyes erőforrástípusokhoz.
  • A felhasználó által definiált függvények jelenleg nem támogatottak. Egy kísérleti funkció azonban jelenleg elérhető. További információ: Felhasználó által definiált függvények a Bicepben.
  • Egyes Bicep-funkciókhoz a köztes nyelv (Azure Resource Manager JSON-sablonok) megfelelő módosítása szükséges. Ezeket a funkciókat akkor tesszük elérhetővé, ha az összes szükséges frissítés üzembe lett helyezve a globális Azure-ban. Ha más környezetet használ, például az Azure Stacket, előfordulhat, hogy a funkció rendelkezésre állása késik. A Bicep szolgáltatás csak akkor érhető el, ha a köztes nyelv is frissült ebben a környezetben.

Következő lépések

A Bicep bemutatása: Mi az a Bicep?. Bicep-adattípusok esetén lásd : Adattípusok.