Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird die Bicep-Syntax mit der JSON-Syntax für Azure Resource Manager-Vorlagen (ARM-Vorlagen) verglichen. In den meisten Fällen stellt Bicep eine Syntax bereit, die weniger ausführlich ist als die Entsprechung in JSON.
Wenn Sie mit der Verwendung von JSON zum Entwickeln von ARM-Vorlagen vertraut sind, verwenden Sie die folgenden Beispiele, um mehr über die entsprechende Syntax für Bicep zu erfahren.
Vergleichen vollständiger Dateien
Mit dem Bicep-Playground können Sie Bicep und entsprechende JSON nebeneinander anzeigen. Sie können die Implementierungen derselben Infrastruktur vergleichen.
Sie können beispielsweise die Datei anzeigen, um einen SQL Server und eine Datenbank bereitzustellen. Der Bizeps ist etwa halb so groß wie die ARM-Vorlage.
Ausdrücke
So verfassen Sie einen Ausdruck:
func()
"[func()]"
Parameter
So deklarieren Sie einen Parameter mit einem Standardwert:
param orgName string = 'Contoso'
"parameters": {
"orgName": {
"type": "string",
"defaultValue": "Contoso"
}
}
Verwenden Sie zum Abrufen eines Parameterwerts den von Ihnen definierten Namen:
name: orgName
"name": "[parameters('orgName')]"
Variablen
So deklarieren Sie eine Variable:
var description = 'example value'
"variables": {
"description": "example value"
}
Verwenden Sie zum Abrufen eines Variablenwerts den von Ihnen definierten Namen:
workloadSetting: description
"workloadSetting": "[variables('description')]"
Streichinstrumente
So verketten Sie Zeichenfolgen:
name: '${namePrefix}-vm'
"name": "[concat(parameters('namePrefix'), '-vm')]"
Logische Operatoren
So geben Sie das logische UND zurück:
isMonday && isNovember
[and(parameter('isMonday'), parameter('isNovember'))]
So legen Sie einen Wert bedingt fest:
isMonday ? 'valueIfTrue' : 'valueIfFalse'
[if(parameters('isMonday'), 'valueIfTrue', 'valueIfFalse')]
Bereitstellungsumfang
So legen Sie den Zielbereich der Bereitstellung fest:
targetScope = 'subscription'
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#"
Ressourcen
So deklarieren Sie eine Ressource:
resource virtualMachine 'Microsoft.Compute/virtualMachines@2025-04-01' = {
...
}
"resources": [
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2024-03-01",
...
}
]
So stellen Sie eine Ressource bedingt bereit:
resource virtualMachine 'Microsoft.Compute/virtualMachines@2025-04-01' = if(deployVM) {
...
}
"resources": [
{
"condition": "[parameters('deployVM')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2024-03-01",
...
}
]
So legen Sie eine Ressourceneigenschaft fest:
sku: '2016-Datacenter'
"sku": "2016-Datacenter",
So rufen Sie die Ressourcen-ID einer Ressource in der Vorlage ab:
nic1.id
[resourceId('Microsoft.Network/networkInterfaces', variables('nic1Name'))]
Schleifen
So durchlaufen Sie Elemente in einem Array oder einer Anzahl:
[for storageName in storageAccountNames: {
...
}]
"copy": {
"name": "storagecopy",
"count": "[length(parameters('storageAccountNames'))]"
},
...
Ressourcenabhängigkeiten
Für Bicep können Sie eine explizite Abhängigkeit festlegen, aber dieser Ansatz wird nicht empfohlen. Verwenden Sie stattdessen implizite Abhängigkeiten. Eine implizite Abhängigkeit wird erstellt, wenn eine Ressourcendeklaration auf den Bezeichner einer anderen Ressource verweist.
Im Folgenden finden Sie eine Netzwerkschnittstelle mit einer impliziten Abhängigkeit von einer Netzwerksicherheitsgruppe. Sie verweist auf die Netzwerksicherheitsgruppe mit netSecurityGroup.id.
resource netSecurityGroup 'Microsoft.Network/networkSecurityGroups@2025-01-01' = {
...
}
resource nic1 'Microsoft.Network/networkInterfaces@2025-01-01' = {
name: nic1Name
location: location
properties: {
...
networkSecurityGroup: {
id: netSecurityGroup.id
}
}
}
Wenn Sie eine explizite Abhängigkeit festlegen müssen, verwenden Sie Folgendes:
dependsOn: [ storageAccount ]
"dependsOn": ["[resourceId('Microsoft.Storage/storageAccounts', 'parameters('storageAccountName'))]"]
Referenzressourcen
So rufen Sie eine Eigenschaft aus einer Ressource in der Vorlage ab:
storageAccount.properties.primaryEndpoints.blob
[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))).primaryEndpoints.blob]
So rufen Sie eine Eigenschaft aus einer vorhandenen Ressource ab, die nicht in der Vorlage bereitgestellt wird:
resource storageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' existing = {
name: storageAccountName
}
// use later in template as often as needed
storageAccount.properties.primaryEndpoints.blob
// required every time the property is needed
"[reference(resourceId('Microsoft.Storage/storageAccounts/', parameters('storageAccountName')), '2019-06-01').primaryEndpoints.blob]"
Verwenden Sie in Bicep den geschachtelten Accessor (::), um eine Eigenschaft für eine in einer übergeordneten Ressource geschachtelte Ressource zu erhalten:
VNet1::Subnet1.properties.addressPrefix
Verwenden Sie für JSON die Referenzfunktion:
[reference(resourceId('Microsoft.Network/virtualNetworks/subnets', variables('subnetName'))).properties.addressPrefix]
Ausgaben
So geben Sie eine Eigenschaft aus einer Ressource in der Vorlage aus:
output hostname string = publicIP.properties.dnsSettings.fqdn
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
},
}
So geben Sie einen Wert bedingt aus:
output hostname string = condition ? publicIP.properties.dnsSettings.fqdn : ''
"outputs": {
"hostname": {
"condition": "[variables('condition')]",
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
}
}
Der ternäre Bicep-Operator entspricht der if-Funktion im JSON-Code einer ARM-Vorlage, nicht der Eigenschaft „condition“. Die ternäre Syntax muss zu dem einen oder anderen Wert ausgewertet werden. Wenn die Bedingung in den vorherigen Beispielen falsch ist, gibt Bicep einen Hostnamen mit einer leeren Zeichenfolge aus, json gibt jedoch keine Werte aus.
Codewiederverwendung
So trennen Sie eine Lösung in mehrere Dateien:
- Verwenden Sie für Bicep Module.
- Verwenden Sie für ARM-Vorlagen verknüpfte Vorlagen.
Nächste Schritte
- Informationen zu Bicep finden Sie in der Bicep-Schnellstartanleitung.
- Informationen zum Konvertieren von Vorlagen zwischen den Sprachen finden Sie unter Konvertieren von ARM-Vorlagen zwischen JSON und Bicep.