Vzor konfigurační sady
Místo toho, abyste definovali velké množství jednotlivých parametrů, vytvořte předdefinované sady hodnot. Během nasazování vyberte sadu hodnot, které se mají použít.
Kontext a problém
Jeden soubor bicep často definuje mnoho prostředků. Každý prostředek může vyžadovat použití jiné konfigurace v závislosti na prostředí, do kterého ho nasazujete. Můžete například vytvořit soubor bicep, který nasadí App Service plán a aplikace a účet úložiště. Každý z těchto prostředků má několik možností, které mají vliv na jeho náklady, dostupnost a odolnost. V produkčních prostředích budete chtít použít jednu sadu konfigurací, která má určit prioritu vysoké dostupnosti a odolnosti. V případě neprodukčních prostředí budete chtít použít jinou sadu konfigurace, která bude upřednostňovat snížení nákladů.
Pro každé nastavení konfigurace můžete vytvořit parametry, ale toto má několik nevýhod:
- Tento přístup vytvoří pro uživatele šablony režii, protože musí pochopit hodnoty, které mají být použity pro jednotlivé prostředky, a dopad nastavení jednotlivých parametrů.
- Počet parametrů ve vaší šabloně se zvyšuje s každým novým prostředkem, který definujete.
- Uživatelé mohou vybrat kombinace hodnot parametrů, které nebyly testovány nebo které nebudou správně fungovat.
Řešení
Vytvořte jeden parametr pro určení typu prostředí. Použijte proměnnou k automatickému výběru konfigurace pro každý prostředek na základě hodnoty parametru.
Poznámka
Tento přístup se někdy označuje jako Velikost t-tričko. Když si koupíte tričko, nezískáte spoustu možností pro jeho délku, šířku, rukávy a tak dále. Stačí si vybrat mezi malými, středními a velkými velikostmi a Návrhář t-trička tato měření předdefinovaná na základě této velikosti.
Příklad
Předpokládejme, že máte šablonu, která se dá nasadit do dvou typů prostředí: neprodukční a produkční. V závislosti na typu prostředí se konfigurace, kterou potřebujete, liší:
| Vlastnost | Neprodukční prostředí | Produkční prostředí |
|---|---|---|
| Plán App Service | ||
| Název SKU | S2 | P2V3 |
| Kapacita (počet instancí) | 1 | 3 |
| Aplikace App Service | ||
| Vždy zapnuto | Zakázáno | Povoleno |
| Účet úložiště | ||
| Název SKU | Standard_LRS | Standard_ZRS |
Pro tuto šablonu můžete použít vzor sady konfigurací.
Přijměte jeden parametr, který indikuje typ prostředí, jako je například produkční nebo neprodukční. Pomocí @allowed parametru dekoratér zajistěte, aby uživatelé vaší šablony měli jenom hodnoty, které očekáváte:
@allowed([
'Production'
'NonProduction'
])
param environmentType string = 'NonProduction'
Pak vytvořte proměnnou mapy, což je objekt definující konkrétní konfiguraci v závislosti na typu prostředí. Všimněte si, že proměnná má dva objekty s názvem Production a NonProduction . Tyto názvy odpovídají povoleným hodnotám pro parametr v předchozím příkladu:
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'
}
}
}
}
Při definování prostředků použijte mapu konfigurace k definování vlastností prostředku:
resource appServicePlan 'Microsoft.Web/serverfarms@2020-06-01' = {
name: appServicePlanName
location: location
sku: environmentConfigurationMap[environmentType].appServicePlan.sku
}
resource appServiceApp 'Microsoft.Web/sites@2020-06-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
siteConfig: {
alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
}
}
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
name: storageAccountName
location: location
kind: 'StorageV2'
sku: environmentConfigurationMap[environmentType].storageAccount.sku
}
Požadavky
- V proměnné mapy zvažte seskupení vlastností podle prostředků, aby se zjednodušila jejich definice.
- Ve vaší proměnné mapy můžete definovat jednotlivé hodnoty vlastností (například
alwaysOnvlastnost v příkladu) nebo proměnné objektu, které nastaví vlastnost objektu (například vlastnosti SKU v příkladu). - Zvažte použití konfigurační sady s podmínkami pro prostředky. To umožňuje, aby kód bicep nasadil určité prostředky pro konkrétní prostředí, a ne jiné.