A JSON és a Bicep összehasonlítása sablonokhoz
Ez a cikk összehasonlítja a Bicep-szintaxist az Azure Resource Manager-sablonok (ARM-sablonok) JSON-szintaxisával. A Bicep a legtöbb esetben olyan szintaxist biztosít, amely kevésbé részletes, mint a JSON megfelelője.
Ha ismeri az ARM-sablonok JSON-alapú használatát, az alábbi példákkal megismerheti a Bicep megfelelő szintaxisát.
Teljes fájlok összehasonlítása
A Bicep Playground segítségével egymás mellett tekintheti meg a Bicepet és az azzal egyenértékű JSON-t. Összehasonlíthatja ugyanannak az infrastruktúrának az implementációit.
Megtekintheti például a fájlt egy SQL Server és egy adatbázis üzembe helyezéséhez. A Bicep körülbelül fele az ARM-sablon méretének.
Kifejezések
Kifejezés létrehozása:
func()
"[func()]"
Paraméterek
Alapértelmezett értékkel rendelkező paraméter deklarálása:
param orgName string = 'Contoso'
"parameters": {
"orgName": {
"type": "string",
"defaultValue": "Contoso"
}
}
Paraméterérték lekéréséhez használja a megadott nevet:
name: orgName
"name": "[parameters('orgName')]"
Változók
Változó deklarálása:
var description = 'example value'
"variables": {
"description": "example value"
}
Változó értékének lekéréséhez használja a megadott nevet:
workloadSetting: description
"workloadSetting": "[variables('description')]"
Sztringek
Sztringek összefűzéséhez:
name: '${namePrefix}-vm'
"name": "[concat(parameters('namePrefix'), '-vm')]"
Logikai operátorok
A logikai ÉS visszaadása:
isMonday && isNovember
[and(parameter('isMonday'), parameter('isNovember'))]
Érték feltételes beállítása:
isMonday ? 'valueIfTrue' : 'valueIfFalse'
[if(parameters('isMonday'), 'valueIfTrue', 'valueIfFalse')]
Üzembehelyezési hatókör
Az üzembe helyezés célhatókörének beállítása:
targetScope = 'subscription'
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#"
Források
Erőforrás deklarálása:
resource virtualMachine 'Microsoft.Compute/virtualMachines@2024-03-01' = {
...
}
"resources": [
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2024-03-01",
...
}
]
Erőforrás feltételes üzembe helyezése:
resource virtualMachine 'Microsoft.Compute/virtualMachines@2024-03-01' = if(deployVM) {
...
}
"resources": [
{
"condition": "[parameters('deployVM')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2024-03-01",
...
}
]
Erőforrástulajdonság beállítása:
sku: '2016-Datacenter'
"sku": "2016-Datacenter",
Egy erőforrás erőforrás-azonosítójának lekérése a sablonban:
nic1.id
[resourceId('Microsoft.Network/networkInterfaces', variables('nic1Name'))]
Hurkok
Tömb elemeinek vagy darabszámának iterálása:
[for storageName in storageAccountNames: {
...
}]
"copy": {
"name": "storagecopy",
"count": "[length(parameters('storageAccountNames'))]"
},
...
Erőforrás-függőségek
A Bicep esetében beállíthat explicit függőséget, de ez a megközelítés nem ajánlott. Ehelyett implicit függőségekre támaszkodhat. Implicit függőség akkor jön létre, ha egy erőforrás-deklaráció egy másik erőforrás azonosítójára hivatkozik.
Az alábbiakban egy hálózati biztonsági csoport implicit függőségével rendelkező hálózati adapter látható. A hálózati biztonsági csoportra hivatkozik a következővel netSecurityGroup.id
: .
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
}
}
}
Ha explicit függőséget kell beállítania, használja a következőt:
dependsOn: [ storageAccount ]
"dependsOn": ["[resourceId('Microsoft.Storage/storageAccounts', 'parameters('storageAccountName'))]"]
Referencia-erőforrások
Tulajdonság lekérése a sablon egyik erőforrásából:
storageAccount.properties.primaryEndpoints.blob
[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))).primaryEndpoints.blob]
Tulajdonság lekérése olyan meglévő erőforrásból, amely nincs üzembe helyezve a sablonban:
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]"
A Bicepben használja a beágyazott kiegészítőt (::
) egy szülőerőforrásba beágyazott erőforrás tulajdonságának lekéréséhez:
VNet1::Subnet1.properties.addressPrefix
JSON esetén használja a referenciafüggvényt:
[reference(resourceId('Microsoft.Network/virtualNetworks/subnets', variables('subnetName'))).properties.addressPrefix]
Kimenetek
Tulajdonság kimenete egy erőforrásból a sablonban:
output hostname string = publicIP.properties.dnsSettings.fqdn
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
},
}
Érték feltételes kimenete:
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]"
}
}
A Bicep ternáris operátor egyenértékű az ARM-sablon JSON-sablonjának if függvényével , nem pedig a feltétel tulajdonságával. A ternáris szintaxisnak az egyik vagy a másik értékre kell kiértékelnie. Ha a feltétel hamis az előző mintákban, a Bicep egy üres sztringgel rendelkező gazdagépnevet ad ki, de a JSON nem ad ki értékeket.
Kód újrafelhasználása
Megoldás több fájlra való elválasztása:
- A Bicep esetében használjon modulokat.
- ARM-sablonokhoz használjon csatolt sablonokat.
Következő lépések
- A Bicep-ről további információt a Bicep rövid útmutatójában talál.
- A sablonok nyelvek közötti konvertálásáról az ARM-sablonok JSON és Bicep közötti konvertálása című témakörben olvashat.