Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье сравнивается синтаксис Bicep с синтаксисом JSON для шаблонов Azure Resource Manager (шаблоны ARM). В большинстве случаев Bicep предоставляет синтаксис, который меньше подробно, чем эквивалент в ФОРМАТЕ JSON.
Если вы знакомы с использованием JSON для разработки шаблонов ARM, используйте следующие примеры, чтобы узнать о эквивалентных синтаксисах Bicep.
Сравнение полных файлов
Платформа Bicep позволяет просматривать Bicep и эквивалентные JSON параллельно. Вы можете сравнить реализации одной и той же инфраструктуры.
Например, можно просмотреть файл для развертывания SQL Server и базы данных. Шаблон Bicep составляет около половины размера шаблона ARM.
Выражения
Чтобы создать выражение:
func()
"[func()]"
Параметры
Чтобы объявить параметр со значением по умолчанию:
param orgName string = 'Contoso'
"parameters": {
"orgName": {
"type": "string",
"defaultValue": "Contoso"
}
}
Чтобы получить значение параметра, используйте указанное вами имя:
name: orgName
"name": "[parameters('orgName')]"
Переменные
Объявление переменной:
var description = 'example value'
"variables": {
"description": "example value"
}
Чтобы получить значение переменной, используйте указанное вами имя:
workloadSetting: description
"workloadSetting": "[variables('description')]"
Строки
Объединение строк:
name: '${namePrefix}-vm'
"name": "[concat(parameters('namePrefix'), '-vm')]"
Логические операторы
Чтобы вернуть логический И, выполните следующие действия.
isMonday && isNovember
[and(parameter('isMonday'), parameter('isNovember'))]
Чтобы условно задать значение:
isMonday ? 'valueIfTrue' : 'valueIfFalse'
[if(parameters('isMonday'), 'valueIfTrue', 'valueIfFalse')]
Область развертывания
Чтобы задать целевую область развертывания, выполните следующие действия.
targetScope = 'subscription'
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#"
Ресурсы
Объявление ресурса:
resource virtualMachine 'Microsoft.Compute/virtualMachines@2025-04-01' = {
...
}
"resources": [
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2024-03-01",
...
}
]
Чтобы условно развернуть ресурс, выполните приведенные действия.
resource virtualMachine 'Microsoft.Compute/virtualMachines@2025-04-01' = if(deployVM) {
...
}
"resources": [
{
"condition": "[parameters('deployVM')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2024-03-01",
...
}
]
Чтобы задать свойство ресурса, выполните приведенные действия.
sku: '2016-Datacenter'
"sku": "2016-Datacenter",
Чтобы получить идентификатор ресурса в шаблоне, выполните следующие действия.
nic1.id
[resourceId('Microsoft.Network/networkInterfaces', variables('nic1Name'))]
Петли
Чтобы выполнить итерацию элементов в массиве или подсчете:
[for storageName in storageAccountNames: {
...
}]
"copy": {
"name": "storagecopy",
"count": "[length(parameters('storageAccountNames'))]"
},
...
Зависимости от ресурсов
Для Bicep можно задать явную зависимость, но этот подход не рекомендуется. Вместо этого следует полагаться на неявные зависимости. Неявная зависимость создается, когда одно объявление ресурса ссылается на идентификатор другого ресурса.
Ниже показан сетевой интерфейс с неявной зависимостью от группы безопасности сети. Он ссылается на группу безопасности сети с 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
}
}
}
Если необходимо задать явную зависимость, используйте следующее:
dependsOn: [ storageAccount ]
"dependsOn": ["[resourceId('Microsoft.Storage/storageAccounts', 'parameters('storageAccountName'))]"]
Справочные ресурсы
Чтобы получить свойство из ресурса в шаблоне, выполните следующие действия.
storageAccount.properties.primaryEndpoints.blob
[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))).primaryEndpoints.blob]
Чтобы получить свойство из существующего ресурса, который не развернут в шаблоне:
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]"
В Bicep используйте вложенный метод доступа (::) для получения свойства ресурса, вложенного в родительский ресурс:
VNet1::Subnet1.properties.addressPrefix
Для JSON используйте эталонную функцию:
[reference(resourceId('Microsoft.Network/virtualNetworks/subnets', variables('subnetName'))).properties.addressPrefix]
Выходы
Чтобы вывести свойство из ресурса в шаблоне, выполните следующие действия.
output hostname string = publicIP.properties.dnsSettings.fqdn
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
},
}
Для условного вывода значения:
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]"
}
}
Оператор Bicep ternary эквивалентен функции if в JSON-шаблоне ARM, а не свойству condition. Тернарный синтаксис должен оценить одно значение или другое. Если условие равно false в предыдущих примерах, Bicep выводит имя узла с пустой строкой, но JSON не выводит значения.
Повторное использование кода
Чтобы разделить решение на несколько файлов:
- Для Bicep используйте модули.
- Для шаблонов ARM используйте связанные шаблоны.
Дальнейшие шаги
- Для получения информации о Bicep см. краткое руководство по Bicep.
- Сведения о преобразовании шаблонов между языками см. в статье "Преобразование шаблонов ARM между JSON и Bicep".