設定集模式
與其定義許多個別參數,您可以選擇建立值的預先定義集合。 在部署期間,選取要使用的值集合。
內容和問題
單一 Bicep 檔案通常會定義許多資源。 依您要部署的環境而定,每個資源可能需要使用不同的設定。 例如,您可能會建立 Bicep 檔案,藉以部署 App Service 方案和應用程式,以及儲存體帳戶。 這些資源都有多個選項會影響其成本、可用性和復原。 在生產環境中,您想使用一組設定來優先處理高可用性和復原。 對於非生產環境,您想使用另一組不同的設定,以降低成本為優先考量。
您可以為每個組態設定建立參數,但此方式有一些缺點:
- 這種方法會對您的範本使用者造成負擔,因為他們需要了解每個資源所使用的值,以及設定每個參數的影響。
- 範本中的參數數目會隨著您所定義的每個新資源而增加。
- 使用者可能選取尚未經過測試或無法正常運作的參數值組合。
解決方案
建立單一參數來指定環境類型。 使用變數,依參數值自動選取各資源的設定。
注意
此方法有時稱為「T 恤尺寸」。 當您購買 T 恤時,不會有長度、寬度、有袖等許多選項。 您只需選擇 S、M 及 L 尺寸,而 T 恤設計師已根據該大小預先定義這些量值。
範例
假設您的範本可部署兩種環境類型:非生產和生產環境。 視環境類型而定,您需要的設定會有所不同:
屬性 | 非生產環境 | 實際執行環境 |
---|---|---|
App Service 計劃 | ||
SKU 名稱 | S2 | P2V3 |
容量 (執行個體數目) | 1 | 3 |
App Service 應用程式 | ||
永遠開啟 | 停用 | 啟用 |
儲存體帳戶 | ||
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 程式碼便可針對特定環境部署特定資源,而非其他環境。