Vzor sady konfigurace

Místo definování velkého množství jednotlivých parametrů vytvořte předdefinované sady hodnot. Během nasazování vyberte sadu hodnot, které chcete použít.

Kontext a problém

Jeden soubor Bicep často definuje mnoho prostředků. Každý prostředek může potřebovat použít jinou konfiguraci v závislosti na prostředí, do které ho nasazujete. Můžete například vytvořit soubor Bicep, který nasadí plán a aplikaci App Service a účet úložiště. Každý z těchto prostředků má několik možností, které ovlivňují jeho náklady, dostupnost a odolnost. V produkčních prostředích chcete použít jednu sadu konfigurací, která upřednostňuje vysokou dostupnost a odolnost. Pro neprodukční prostředí chcete použít jinou sadu konfigurace, která upřednostňuje snížení nákladů.

Můžete vytvořit parametry pro každé nastavení konfigurace, ale to má některé nevýhody:

  • Tento přístup představuje zátěž pro uživatele šablony, protože potřebují porozumět hodnotám, které se mají použít pro jednotlivé prostředky, a dopadu nastavení jednotlivých parametrů.
  • Počet parametrů v šabloně se zvyšuje s každým novým prostředkem, který definujete.
  • Uživatelé můžou vybrat kombinace hodnot parametrů, které nebyly testovány nebo které nebudou fungovat správně.

Řešení

Vytvořte jeden parametr pro určení typu prostředí. Pomocí proměnné můžete automaticky vybrat konfiguraci pro každý prostředek na základě hodnoty parametru.

Poznámka

Tento přístup se někdy označuje jako nastavení velikosti trička. Když si koupíte tričko, nemáte spoustu možností pro jeho délku, šířku, rukávy atd. Jednoduše si vyberete mezi malými, středními a velkými velikostmi a návrhář trička má tyto rozměry předdefinované na základě této velikosti.

Příklad

Předpokládejme, že máte šablonu, kterou je možné nasadit do dvou typů prostředí: neprodukčního prostředí a produkčního prostředí. V závislosti na typu prostředí se konfigurace, kterou potřebujete, liší:

Vlastnost Neprodukční prostředí Produkční prostředí
App Service plán
Název skladové položky S2 P2V3
Kapacita (počet instancí) 1 3
App Service aplikace
AlwaysOn Zakázáno Povoleno
Účet úložiště
Název skladové položky Standard_LRS Standard_ZRS

Pro tuto šablonu můžete použít vzor konfigurační sady.

Přijměte jeden parametr, který označuje typ prostředí, například produkční nebo neprodukční prostředí. Pomocí dekorátoru @allowed parametrů zajistěte, aby uživatelé šablony poskytovali pouze hodnoty, které očekáváte:

@allowed([
  'Production'
  'NonProduction'
])
param environmentType string = 'NonProduction'

Pak vytvořte proměnnou mapování, což je objekt, který definuje 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 parametru 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@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
}

Požadavky

  • V proměnné mapování zvažte seskupení vlastností podle prostředku, abyste zjednodušili jejich definici.
  • V proměnné mapování můžete definovat jak hodnoty jednotlivých vlastností (jako alwaysOn je vlastnost v příkladu), tak proměnné objektu, které nastavují vlastnost objektu (například vlastnosti skladové položky v příkladu).
  • Zvažte použití konfigurační sady s podmínkami prostředků. To umožňuje kódu Bicep nasadit určité prostředky pro konkrétní prostředí, a ne v jiných prostředích.

Další kroky

Přečtěte si o vzoru souboru sdílených proměnných.