Вы можете сократить число повторяющихся общих значений в файлах Bicep. Вместо этого загрузите их из общего JSON-файла в файл Bicep. При использовании массивов объедините в коде Bicep общие значения со значениями, зависящими от развертывания.
Контекст и проблема
У вас в коде Bicep могут быть стандартные переменные, которые повторно используются в наборе файлов Bicep. Значения можно дублировать при каждом объявлении ресурса, например путем копирования и вставки между файлами Bicep. Однако этот подход чреват ошибками, и если необходимо внести изменения, потребуется обновить каждое определение ресурса, чтобы все было одинаково.
Более того, при работе с переменными, определенными как массивы, в нескольких файлах Bicep может быть набор общих значений, а кроме того, бывает нужно добавить определенные значения для развертываемого ресурса. Когда общие переменные смешиваются с переменными, зависящими от ресурса, бывает трудно понять различие между двумя этими категориями.
Решение
Создайте JSON-файл, содержащий ваши общие переменные. Используйте функцию loadJsonContent() функция, чтобы загрузить файл и получить доступ к переменным. Для переменных массива используйте функцию concat(), позволяющую объединить общие значения с пользовательскими значениями для определенного ресурса.
Пример 1. Префиксы именования
Предположим, что у вас есть несколько файлов Bicep, в которых определяются ресурсы. Для всех ресурсов необходимо использовать последовательный префикс именования.
Создайте JSON-файл, который содержит общие префиксы именования, применяемые в вашей компании:
Предположим, у вас есть несколько файлов Bicep, которые определяют собственные группы безопасности сети (NSG). Имеется общий набор правил безопасности, которые должны применяться к каждой NSG, а также необходимы правила для конкретных приложений.
Создайте JSON-файл, который содержит общие правила безопасности, применяемые в вашей компании:
JSON
{
"securityRules": [
{
"name": "Allow_RDP_from_company_IP_address",
"properties": {
"description": "Allow inbound RDP from the company's IP address range.",
"protocol": "Tcp",
"sourceAddressPrefix": "203.0.113.0/24",
"sourcePortRange": "*",
"destinationAddressPrefix": "VirtualNetwork",
"destinationPortRange": "3389",
"access": "Allow",
"priority": 100,
"direction": "Inbound"
}
},
{
"name": "Allow_VirtualNetwork_to_Storage",
"properties": {
"description": "Allow outbound connections to the Azure Storage service tag.",
"protocol": "Tcp",
"sourceAddressPrefix": "VirtualNetwork",
"sourcePortRange": "*",
"destinationAddressPrefix": "Storage",
"destinationPortRange": "*",
"access": "Allow",
"priority": 100,
"direction": "Outbound"
}
}
// other rules here
]
}
В файле Bicep объявите переменную, которая импортирует общие правила безопасности:
При использовании такого подхода JSON файл включается в шаблон ARM, создаваемый Bicep. Создаваемые Bicep JSON-шаблоны ARM имеют предельный размер файла в 4 МБ, поэтому не следует использовать большие файлы общих переменных.
Общие переменные массивов не должны конфликтовать со значениями массивов, указанными в каждом файле Bicep. Например, при определении групп безопасности сети с помощью шаблона набора конфигураций убедитесь, что у вас нет правил, задающих одинаковый приоритет и направление.
Управляйте множественными развертываниями в среде Azure ваших шаблонов Azure Resource Manager (шаблонов ARM) с использованием функций, переменных, тегов и файлов параметров.