Шаблон набора конфигурации
Вместо того чтобы определять множество отдельных параметров, вы можете создавать предопределенные наборы значений. Во время развертывания выберите используемый набор значений.
Контекст и проблема
В одном файле Bicep часто определяется множество ресурсов. Каждому ресурсу может потребоваться использовать отдельную конфигурацию, в зависимости от того, в какой среде он развертывается. Например, вы можете создать файл Bicep, который развертывает приложение и план службы приложений, а также учетную запись хранения. Каждый из этих ресурсов содержит ряд параметров, от которых зависят его стоимость, доступность и устойчивость. Для рабочих сред необходимо использовать один набор конфигураций, который определяет высокий уровень доступности и устойчивость. Для нерабочих сред рекомендуем использовать другой набор конфигурации, где приоритет отдается сокращению расходов.
Вы можете создать параметры для каждого параметра конфигурации, но этот подход имеет некоторые недостатки:
- Этот подход усложняет работу пользователей шаблонов, так как им нужно понимать, какие значения использовать для каждого ресурса, и увеличивает влияние настройки каждого параметра.
- Количество параметров в шаблоне увеличивается с каждым новым определенным ресурсом.
- Пользователи могут выбрать сочетания значений параметров, которые не были протестированы или не работают надлежащим образом.
Решение
Создайте один параметр, указывающий тип среды. Используйте переменную для автоматического выбора конфигурации каждого ресурса в соответствии со значением параметра.
Примечание.
Этот подход похож на выбор футболки. При покупке футболки вы не выбираете множество параметров, таких как длина, ширина, рукава и т. д. Вы просто выбираете малый, средний или крупный размер, для которых дизайнер определил эти параметры.
Пример
Допустим, у вас есть шаблон, который можно развернуть в средах двух типов: нерабочих и рабочих. Нужная конфигурация выбирается в зависимости от типа среды:
Свойство | Нерабочие среды | Рабочие среды |
---|---|---|
План обслуживания приложения | ||
Номер SKU | S2 | P2V3 |
Емкость (количество экземпляров) | 1 | 3 |
Приложение Службы приложений | ||
Всегда включено | Выключено | Включен |
Учетная запись хранения | ||
Номер SKU | Standard_LRS | Standard_ZRS |
Вы можете использовать шаблон набора конфигурации для этого примера.
Примите один параметр, указывающий тип среды, например рабочую или нерабочую. Используйте декоратор параметра @allowed
, чтобы гарантировать, что пользователи шаблона предоставляют только ожидаемые значения.
@allowed([
'Production'
'NonProduction'
])
param environmentType string = 'NonProduction'
Затем создайте переменную сопоставления, которая представляет собой объект, определяющий конкретную конфигурацию в зависимости от типа среды. Обратите внимание, что переменная содержит два объекта с названиями Production
и NonProduction
. Эти имена соответствуют допустимым значениям параметра из предыдущего примера:
var environmentConfigurationMap = {
Production: {
appServicePlan: {
sku: {
name: 'P2V3'
capacity: 3
}
}
appServiceApp: {
alwaysOn: false
}
storageAccount: {
sku: {
name: 'Standard_ZRS'
}
}
}
NonProduction: {
appServicePlan: {
sku: {
name: 'S2'
capacity: 1
}
}
appServiceApp: {
alwaysOn: false
}
storageAccount: {
sku: {
name: 'Standard_LRS'
}
}
}
}
При определении ресурсов используйте сопоставление конфигурации, чтобы определить свойства ресурсов:
resource appServicePlan 'Microsoft.Web/serverfarms@2022-09-01' = {
name: appServicePlanName
location: location
sku: environmentConfigurationMap[environmentType].appServicePlan.sku
}
resource appServiceApp 'Microsoft.Web/sites@2022-09-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
siteConfig: {
alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
}
}
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountName
location: location
kind: 'StorageV2'
sku: environmentConfigurationMap[environmentType].storageAccount.sku
}
Рекомендации
- В переменной сопоставления рекомендуем группировать свойства по ресурсу, чтобы упростить их определение.
- В переменной сопоставления можно определить как значения отдельных свойств (например, свойства
alwaysOn
в нашем примере), так и объектные переменные, которые задают свойства объектов (например, свойства SKU в нашем примере). - Рекомендуем использовать набор конфигурации с условиями ресурсов. Благодаря этому код Bicep может развертывать определенные ресурсы для конкретных сред, не развертывая их в других.