Vergleichen von JSON- und Bicep für Vorlagen
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 bietet Bicep eine Syntax, die weniger ausführlich ist als die entsprechende in JSON.
Wenn Sie mit JSON zum Entwickeln von ARM-Vorlagen vertraut sind, erfahren Sie in der folgenden Tabelle mehr über die entsprechende Syntax für Bicep.
Vergleichen von vollständigen Dateien
Mit dem Bicep Playground können Sie Bicep und die JSON-Entsprechung nebeneinander anzeigen. Sie können die Implementierungen derselben Infrastruktur vergleichen.
Sie können z. B. die Datei zur Bereitstellung eines SQL-Servers und einer Datenbank anzeigen. Das Bicep-Format ist ungefähr halb so groß wie die ARM-Vorlage.
Ausdrücke
So erstellen Sie einen Ausdruck
func()
"[func()]"
Parameter
So deklarieren Sie einen Parameter mit einem Standardwert
param orgName string = 'Contoso'
"parameters": {
"orgName": {
"type": "string",
"defaultValue": "Contoso"
}
}
Um einen Parameterwert abzurufen, verwenden Sie den von Ihnen definierten Namen:
name: orgName
"name": "[parameters('orgName')]"
Variablen
So deklarieren Sie eine Variable
var description = 'example value'
"variables": {
"description": "example value"
}
Um einen Variablenwert abzurufen, verwenden Sie den von Ihnen definierten Namen:
workloadSetting: description
"workloadSetting": "[variables('description')]"
Zeichenfolgen
So verketten Sie Zeichenfolgen
name: '${namePrefix}-vm'
"name": "[concat(parameters('namePrefix'), '-vm')]"
Logische Operatoren
So geben Sie logisches UNDzurü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@2024-03-01' = {
...
}
"resources": [
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2024-03-01",
...
}
]
So stellen Sie bedingt eine Ressource bereit
resource virtualMachine 'Microsoft.Compute/virtualMachines@2024-03-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 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, dieser Ansatz wird jedoch 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 wird eine Netzwerkschnittstelle mit einer impliziten Abhängigkeit von einer Netzwerksicherheitsgruppe veranschaulicht. Auf die Netzwerksicherheitsgruppe wird mit netSecurityGroup.id
verwiesen.
resource netSecurityGroup 'Microsoft.Network/networkSecurityGroups@2023-11-01' = {
...
}
resource nic1 'Microsoft.Network/networkInterfaces@2023-11-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 einer vorhandenen Ressource ab, die nicht in der Vorlage bereitgestellt ist
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-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, aber JSON gibt keine Werte aus.
Wiederverwendung von Code
So teilen Sie eine Lösung in mehrere Dateien auf
- Verwenden Sie für Bicep Module.
- Verwenden Sie für ARM-Vorlagen verknüpfte Vorlagen.
Nächste Schritte
- Weitere Informationen zu Bicep finden Sie unter Bicep-Schnellstart.
- Informationen zum Umstellen von Vorlagen zwischen den Sprachen finden Sie unter Umstellen von ARM-Vorlagen zwischen JSON und BICEP.