Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel worden de structuur en syntaxis van een Bicep-bestand beschreven. Het bevat de verschillende secties van het bestand en de eigenschappen die beschikbaar zijn in deze secties.
Zie Quickstart: Bicep-bestanden maken met Visual Studio Code voor een stapsgewijze zelfstudie die u begeleidt bij het maken van een Bicep-bestand.
Bekende beperkingen
- De Bicep-taal biedt geen ondersteuning voor het concept van
apiProfile. Dit concept wijst een enkeleapiProfiletoe aan een setapiVersionvoor elk brontype. - Door de gebruiker gedefinieerde functies worden momenteel niet ondersteund. Een experimentele functie is momenteel toegankelijk. Zie Door de gebruiker gedefinieerde functies in Bicep voor meer informatie.
- Sommige Bicep-functies vereisen een overeenkomstige wijziging in de tussenliggende taal (Azure Resource Manager JSON-sjablonen). Het productteam kondigt deze functies aan als beschikbaar nadat alle vereiste updates zijn geïmplementeerd in global Azure. Als u een andere omgeving gebruikt, zoals Azure Stack, kan er een vertraging optreden in de beschikbaarheid van de functie. De Bicep-functie is alleen beschikbaar nadat de intermediate taal ook in die omgeving is bijgewerkt.
Bicep-indeling
Bicep is een declaratieve taal, wat betekent dat de elementen in elke volgorde kunnen worden weergegeven. In tegenstelling tot imperatieve talen heeft de volgorde van elementen geen invloed op de wijze waarop de implementatie wordt verwerkt.
Een Bicep-bestand heeft de volgende elementen:
#<directive-name> <argument> [<argument> ...]
@<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>
In het volgende voorbeeld ziet u een implementatie van deze elementen:
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@2025-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
Metagegevens
Metagegevens in Bicep zijn een niet-getypte waarde die u kunt opnemen in uw Bicep-bestanden. Metagegevens bieden aanvullende informatie over uw Bicep-bestanden, zoals naam, beschrijving, auteur en aanmaakdatum.
Doelbereik
Het standaarddoelbereik is resourceGroup. Als u implementeert op het niveau van de resourcegroep, hoeft u het doelbereik niet in te stellen in uw Bicep-bestand.
De toegestane waarden zijn:
-
resourceGroup: Standaardwaarde die wordt gebruikt voor resourcegroepimplementaties. -
subscription: Wordt gebruikt voor abonnementsimplementaties. -
managementGroup: Wordt gebruikt voor implementaties van beheergroepen. -
tenant: Wordt gebruikt voor tenantimplementaties.
In een module kunt u een bereik opgeven dat verschilt van het bereik voor de rest van het Bicep-bestand. Zie Modulebereik configureren voor meer informatie.
Parameters
Gebruik parameters voor waarden die moeten variëren voor verschillende implementaties. U kunt een standaardwaarde definiëren voor de parameter die wordt gebruikt als er geen waarde wordt opgegeven tijdens de implementatie.
U kunt bijvoorbeeld een SKU parameter toevoegen om verschillende grootten voor een resource op te geven. U kunt verschillende waarden doorgeven, afhankelijk van of u implementeert voor testen of productie.
param storageSKU string = 'Standard_LRS'
De parameter is beschikbaar voor gebruik in uw Bicep-bestand.
sku: {
name: storageSKU
}
U kunt voor elke parameter een of meer decorators toevoegen. Voor meer informatie, zie Decorators gebruiken.
Zie Parameters in Bicep voor meer informatie.
Variabelen
Als u het Bicep-bestand beter leesbaar wilt maken, kunt u complexe expressies in een variabele inkapselen. U kunt bijvoorbeeld een variabele toevoegen voor een resourcenaam die u maakt door meerdere waarden samen te voegen.
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
Gebruik deze variabele waar u de complexe expressie nodig hebt.
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: uniqueStorageName
U kunt voor elke variabele een of meer decorators toevoegen. Voor meer informatie, zie Decorators gebruiken.
Zie Variabelen in Bicep voor meer informatie.
Middelen
Gebruik het resource trefwoord om een resource te definiëren die moet worden geïmplementeerd. Uw resourcedeclaratie bevat een symbolische naam voor de resource. Gebruik deze symbolische naam in andere delen van het Bicep-bestand om een waarde op te halen uit de resource.
De resourcedeclaratie bevat het resourcetype en de API-versie. Neem in de hoofdtekst van de resourcedeclaratie eigenschappen op die specifiek zijn voor het resourcetype.
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
U kunt voor elke resource een of meer decorators toevoegen. Voor meer informatie, zie Decorators gebruiken.
Zie Resourcedeclaratie in Bicep voor meer informatie.
Sommige bronnen hebben een ouder/kind relatie. U kunt een subresource definiëren binnen de hoofdresource of erbuiten.
In het volgende voorbeeld wordt getoond hoe u een subresource binnen een ouderresource definieert. Het bevat een opslagaccount met een onderliggende resource (bestandsservice) die is gedefinieerd in het opslagaccount. De bestandsservice heeft ook een ondergeschikte resource (share) die daarin is gedefinieerd.
resource storage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
resource service 'fileServices' = {
name: 'default'
resource share 'shares' = {
name: 'exampleshare'
}
}
}
In het volgende voorbeeld ziet u hoe u een subresource buiten de hoofdresource definieert. U gebruikt de eigenschap ouder om een ouder/kind-relatie te identificeren. Dezelfde drie resources worden gedefinieerd.
resource storage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2025-06-01' = {
name: 'default'
parent: storage
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2025-06-01' = {
name: 'exampleshare'
parent: service
}
Voor meer informatie, zie Naam en type instellen voor onderliggende resources in Bicep.
Modulen
Met modules kunt u code uit een Bicep-bestand opnieuw gebruiken in andere Bicep-bestanden. In de moduledeclaratie koppelt u een koppeling naar het bestand dat u opnieuw wilt gebruiken. Wanneer u het Bicep-bestand implementeert, implementeert u ook de resources in de module.
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
Met de symbolische naam kunt u naar de module verwijzen vanaf een andere locatie in het bestand. U kunt bijvoorbeeld een uitvoerwaarde uit een module ophalen met behulp van de symbolische naam en de naam van de uitvoerwaarde.
U kunt voor elke module een of meer decorators toevoegen. Voor meer informatie, zie Decorators gebruiken.
Voor meer informatie, zie Bicep-modules gebruiken.
Uitvoer
Gebruik uitvoer om waarden van de implementatie te retourneren. Normaal gesproken retourneert u een waarde van een geïmplementeerde resource wanneer u die waarde opnieuw moet gebruiken voor een andere bewerking.
output storageEndpoint object = stg.properties.primaryEndpoints
U kunt voor elke uitvoer een of meer decorators toevoegen. Voor meer informatie, zie Decorators gebruiken.
Zie Outputs in Bicep voor meer informatie.
Typen
Gebruik de type instructie om door de gebruiker gedefinieerde gegevenstypen te definiëren.
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@2025-06-01' = {
name: storageAccountConfig.name
location: location
sku: {
name: storageAccountConfig.sku
}
kind: 'StorageV2'
}
U kunt een of meer decorators toevoegen voor elk door de gebruiker gedefinieerd gegevenstype. Voor meer informatie, zie Decorators gebruiken.
Zie Door de gebruiker gedefinieerde gegevenstypen in Bicep voor meer informatie.
Functies
In uw Bicep-bestand kunt u uw eigen functies maken en ook de standaard Bicep-functies gebruiken die automatisch beschikbaar zijn in uw Bicep-bestanden. Maak uw eigen functies wanneer u complexe expressies hebt die u herhaaldelijk in uw Bicep-bestanden gebruikt.
func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'
output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
Zie Door de gebruiker gedefinieerde functies in Bicep voor meer informatie.
Decorateurs
Voeg een of meer decorators toe aan elk van de volgende elementen:
De volgende tabel bevat de decorators:
| Decorateur | Toepassen op element | Toepassen op gegevenstype | Argument | Beschrijving |
|---|---|---|---|---|
| toegestaan | Param | Alles | array | Gebruik deze decorator om ervoor te zorgen dat de gebruiker de juiste waarden levert. Deze decorator is uitsluitend toegestaan op param instructies. Als u wilt verklaren dat een eigenschap een van een reeks vooraf gedefinieerde waarden in een type of output instructie moet zijn, gebruikt u de union-type syntaxis. U kunt ook de syntaxis van het union-type gebruiken in param instructies. |
| batchgrootte | module, resource | N.v.t. | integer | Stel exemplaren in om sequentieel te implementeren. |
| beschrijving | func, param, module, uitvoer, resource, type, var | Alles | tekenreeks | Geef beschrijvingen op voor de elementen. Gebruik markdown-opgemaakte tekst voor de beschrijvingstekst. |
| onderscheidingsfactor | param, type, uitvoer | object | tekenreeks | Gebruik deze decorator om ervoor te zorgen dat de juiste subklasse wordt geïdentificeerd en beheerd. Voor meer informatie, zie Aangepast gelabeld unie gegevenstype. |
| exporteren | func, type, var | Alles | Geen | Geeft aan dat een ander Bicep-bestand het element kan importeren. |
| maximale lengte | param, uitvoer, type | array, tekenreeks | int | De maximale lengte voor tekenreeks- en matrixelementen. De waarde is inclusief. |
| maxWaarde | param, uitvoer, type | int | int | De maximumwaarde voor de gehele getallen. Deze waarde is inclusief. |
| metagegevens | func, output, param, type | Alles | object | Aangepaste eigenschappen die moeten worden toegepast op de elementen. Kan een beschrijvingseigenschap bevatten die overeenkomt met de beschrijvingsdecorator. |
| minimale lengte | param, uitvoer, type | array, tekenreeks | int | De minimale lengte voor tekenreeks- en matrixelementen. De waarde is inclusief. |
| minimumwaarde | param, uitvoer, type | int | int | De minimumwaarde voor de gehele getallen. Deze waarde is inclusief. |
| Verzegeld | param, type, uitvoer | object | Geen | Verhoog BCP089 van een waarschuwing naar een fout wanneer een eigenschapsnaam van een door de gebruiker gedefinieerd gegevenstype waarschijnlijk een typefout is. Zie Foutniveau verhogen voor meer informatie. |
| beveiligd | param, type | string, object | Geen | Markeert de parameter als veilig. De waarde voor een beveiligde parameter wordt niet opgeslagen in de implementatiegeschiedenis en wordt niet geregistreerd. Zie Beveiligde tekenreeksen en objecten voor meer informatie. |
Richtlijnen
Bicep ondersteunt richtlijnen (pragmas) om bepaald gedrag in het bestand te beheren, zoals het onderdrukken van linterwaarschuwingen of waarschuwingsdiagnoseberichten. De instructies worden voorafgegaan door het # teken.
#<directive-name> <argument1> [<argument2> ... ]
U moet na de instructie ten minste één id opgeven. Als u geen id's opgeeft, meldt de compiler een fout. De id's die u opgeeft na de instructie kunnen verwijzen naar:
-
Bicep compiler-diagnostiek, zoals
BCP138 -
Bicep linter-regels, zoals
no-unused-params
U scheidt argumenten door spaties te gebruiken. De linterregels en diagnostische codes zijn hoofdlettergevoelig.
Bicep ondersteunt momenteel drie richtlijntypen:
-
#disable-next-line— schakelt een of meer diagnostische controles alleen voor de volgende regel uit -
#disable-diagnostics— schakelt een of meer diagnostische gegevens uit voor een volledig bestand of totdat deze opnieuw is ingeschakeld -
#restore-diagnostics— schakelt eerder uitgeschakelde diagnostische gegevens opnieuw in
In het volgende voorbeeld worden meerdere diagnostische gegevens en regels onderdrukt:
#disable-diagnostics no-unused-vars BCP335
var location = 'eastus'
param storageCount int
resource accounts 'Microsoft.Storage/storageAccounts@2025-06-01' = [for i in range(0, storageCount): if (i % 2 == 0) {
name: 'sa0820${i}'
location: resourceGroup().location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}]
Gebruik richtlijnen spaarzaam en alleen wanneer u een diagnostische of linterregel controleert en opzettelijk onderdrukt. Overmatig gebruik kan de leesbaarheid en onderhoud van sjablonen verminderen. Voeg een opmerking toe waarin wordt uitgelegd waarom de regels of de diagnostische codes niet van toepassing zijn op deze regel.
Lussen
Voeg iteratieve lussen toe aan uw Bicep-bestand om meerdere exemplaren te definiëren van specifieke resources.
- Een hulpmiddel
- Een module
- Een variabele
- Een eigenschap
- Een uitvoer
Gebruik de for expressie om een lus te definiëren.
param moduleCount int = 2
module stgModule './example.bicep' = [for i in range(0, moduleCount): {
name: '${i}deployModule'
params: {
}
}]
U kunt itereren over een array, object of een gehele getalindex.
Voor meer informatie, zie Iteratieve lussen in Bicep.
Voorwaardelijke implementatie
U kunt een resource of module toevoegen aan uw Bicep-bestand voor voorwaardelijke implementatie. Tijdens de implementatie wordt de voorwaarde geëvalueerd en het resultaat bepaalt of de resource of module is geïmplementeerd. Gebruik de if expressie om een voorwaardelijke implementatie te definiëren.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
Zie Voorwaardelijke implementaties in Bicep met de if-expressie voor meer informatie.
Witruimte
Bicep-bestanden negeren spaties en tabbladen.
Bicep is gevoelig voor nieuwe lijnen. Voorbeeld:
resource sa 'Microsoft.Storage/storageAccounts@2025-06-01' = if (newOrExisting == 'new') {
...
}
U kunt deze niet schrijven als:
resource sa 'Microsoft.Storage/storageAccounts@2025-06-01' =
if (newOrExisting == 'new') {
...
}
U kunt objecten en matrices op meerdere regels definiëren.
Opmerkingen
Gebruiken // voor opmerkingen met één regel of /* ... */ voor opmerkingen met meerdere regels.
In het volgende voorbeeld ziet u een opmerking met één regel.
// This is your primary NIC.
resource nic1 'Microsoft.Network/networkInterfaces@2025-01-01' = {
...
}
In het volgende voorbeeld ziet u een opmerking met meerdere regels.
/*
This Bicep file assumes the key vault already exists and
is in same subscription and resource group as the deployment.
*/
param existingKeyVaultName string
Declaraties in meerdere regels
U kunt nu meerdere regels gebruiken in functie-, matrix- en objectdeclaraties. Voor deze functie is Bicep CLI versie 0.7.X of hoger vereist.
In het volgende voorbeeld wordt de resourceGroup() definitie onderverdeeld in meerdere regels.
var foo = resourceGroup(
mySubscription,
myRgName)
Zie matrices en objecten voor voorbeelden van declaraties met meerdere regels.
Verwante inhoud
- Zie Wat is Bicep voor een inleiding tot Bicep?
- Voor informatie over Bicep-gegevenstypen, zie Gegevenstypen.