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 resourceGroup
van á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.