Přidání flexibility pomocí parametrů a proměnných

Dokončeno

Soubory Bicep jsou výkonné kvůli jejich opakované použitelnosti. Bicep můžete použít k vytvoření souborů, které nasazují více prostředí nebo kopie vašich prostředků.

Vaše společnost toy pravidelně spouští nové produkty a musíte použít soubory Bicep k vytvoření prostředků Azure potřebných pro každé spuštění produktu. Musíte se vyhnout použití pevných názvů prostředků. Mnoho typů prostředků Azure potřebuje jedinečné názvy, takže vkládání názvů do souboru Bicep znamená, že nemůžete znovu použít soubor pro více spuštění produktů. Prostředky také musíte nasadit do různých umístění v závislosti na tom, kde se budou hračky spouštět, což znamená, že nemůžete vložit ani umístění prostředků do souboru.

V této lekci se dozvíte o parametrech a proměnných, což jsou dvě funkce Bicep, které umožňují flexibilní a opakovaně použitelné soubory Bicep. Seznámíte se také s výrazy.

Poznámka:

Příkazy v této lekci jsou znázorněny pro ilustraci konceptů. Zatím nespouštět příkazy. Brzy si procvičíte, co se tady naučíte.

Parametry a proměnné

Parametr umožňuje přenést hodnoty mimo soubor Bicep. Pokud například soubor ručně nasazujete pomocí Azure CLI nebo Azure PowerShellu, zobrazí se výzva k zadání hodnot pro každý parametr. Můžete také vytvořit soubor parametrů, který obsahuje všechny parametry a hodnoty, které chcete použít pro nasazení. Pokud je soubor Bicep nasazený z automatizovaného procesu, jako je nasazovací linka, může linka zadat hodnoty parametrů.

Proměnná je definována a nastavena v rámci souboru Bicep. Proměnné umožňují ukládat důležité informace na jednom místě a odkazovat na ni v celém souboru, aniž byste je museli kopírovat a vkládat.

Obvykle je vhodné použít parametry pro věci, které se mezi jednotlivými nasazeními změní, například:

  • Názvy prostředků, které musí být jedinečné.
  • Umístění, do kterých se mají prostředky nasadit.
  • Nastavení, která ovlivňují ceny prostředků, jako jsou jejich skladové položky, cenové úrovně a počty instancí.
  • Přihlašovací údaje a informace potřebné pro přístup k jiným systémům, které nejsou definované v souboru Bicep.

Proměnné jsou obvykle dobrou volbou, když pro každé nasazení použijete stejné hodnoty, ale chcete, aby byla hodnota v souboru opakovaně použitelná nebo když chcete použít výrazy k vytvoření komplexní hodnoty. Proměnné můžete použít také pro prostředky, které nepotřebují jedinečné názvy.

Návod

Je důležité použít dobré pojmenování parametrů a proměnných, takže soubory Bicep jsou snadno čitelné a srozumitelné. Ujistěte se, že používáte jasné, popisné a konzistentní názvy.

Přidání parametru

V Bicep můžete definovat parametr takto:

param appServiceAppName string

Pojďme se podívat, jak jednotlivé části této definice fungují:

  • param řekne Bicep, že definujete parametr.
  • appServiceAppName je název parametru. Pokud nasazujete soubor Bicep ručně, může se zobrazit výzva k zadání hodnoty, takže je důležité, aby byl název jasný a srozumitelný. Název je také způsob, jakým odkazujete na hodnotu parametru v souboru, stejně jako u symbolických názvů prostředků.
  • string je typ parametru. Pro parametry Bicep můžete zadat několik různých typů, včetně string textu, int čísel a bool logických hodnot true nebo false. Složitější parametry můžete předat také pomocí a arrayobject typů.

Návod

Pokuste se příliš nezobecňovat soubory Bicep pomocí příliš mnoha parametry. Pro váš obchodní scénář byste měli použít minimální počet parametrů, které potřebujete. Mějte na paměti, že pokud se vaše požadavky změní, můžete soubory Bicep kdykoliv v budoucnu změnit.

Zadání výchozích hodnot

Volitelně můžete zadat výchozí hodnotu parametru. Když zadáte výchozí hodnotu, parametr se stane volitelným. Osoba, která nasazuje soubor Bicep, může zadat hodnotu, pokud chce, ale pokud ne, použije Bicep výchozí hodnotu.

Tady je postup, jak přidat výchozí hodnotu:

param appServiceAppName string = 'toy-product-launch-1'

Poznámka:

V tomto příkladu má název aplikace Aplikace Azure Service pevně zakódovanou výchozí hodnotu. To není dobrý nápad, protože aplikace App Service potřebují jedinečné názvy. Za chvíli to opravíte.

Použití hodnot parametrů v souboru Bicep

Jakmile deklarujete parametr, můžete na něj odkazovat ve zbytku souboru Bicep. Pojďme se podívat, jak můžete použít nový parametr v definici prostředku:

resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
  name: appServiceAppName
  location: 'eastus'
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

Všimněte si, že soubor Bicep nyní používá hodnotu parametru k určení názvu prostředku pro prostředek aplikace, namísto použití pevně zakódované hodnoty.

Návod

Rozšíření Bicep pro Visual Studio Code zobrazuje vizuální indikátory, které vás upozorní, když neposouzujete doporučené postupy. Například vás upozorní, pokud definujete parametr, který nepoužíváte. Linter Bicep průběžně spouští tyto kontroly během práce.

Přidání proměnné

Proměnnou můžete definovat takto:

var appServicePlanName = 'toy-product-launch-plan'

Proměnné jsou definovány podobným způsobem jako parametry, ale existuje několik rozdílů:

  • Pomocí klíčového var slova řekněte Bicep, že deklarujete proměnnou.
  • Je nutné zadat hodnotu proměnné.
  • Proměnné nepotřebují typy. Bicep může určit typ na základě nastavené hodnoty.

Výrazy

Při psaní souborů Bicep často nechcete pevně zakódovat hodnoty nebo je požádat o zadání v parametru. Místo toho chcete zjistit hodnoty při spuštění souboru. Například pravděpodobně chcete nasadit všechny prostředky v souboru Bicep do jedné oblasti Azure: oblast, ve které jste vytvořili skupinu prostředků. Nebo můžete chtít automaticky vytvořit jedinečný název prostředku na základě konkrétní strategie pojmenování, kterou vaše společnost používá.

Výrazy v Bicep jsou výkonnou funkcí, která vám pomůže zvládnout nejrůznější zajímavé scénáře. Pojďme se podívat na několik míst, kde můžete použít výrazy v souboru Bicep.

Umístění prostředků

Při psaní a nasazování šablony často nechcete zadávat umístění každého prostředku jednotlivě. Místo toho můžete mít jednoduché obchodní pravidlo, které ve výchozím nastavení říká, nasaďte všechny prostředky do stejného umístění, ve kterém byla skupina prostředků vytvořena.

V Bicep můžete vytvořit parametr s názvem locationa pak pomocí výrazu nastavit jeho hodnotu:

param location string = resourceGroup().location

Podívejte se na výchozí hodnotu tohoto parametru. Používá funkci , resourceGroup() která poskytuje přístup k informacím o skupině prostředků, do které se nasazuje soubor Bicep. V tomto příkladu soubor používá vlastnost location. Tento přístup se běžně používá k nasazení prostředků do stejné oblasti Azure jako skupina prostředků.

Pokud někdo nasazuje tento soubor Bicep, může se rozhodnout přepsat výchozí hodnotu zde a použít jiné umístění.

Poznámka:

Některé prostředky v Azure je možné nasadit pouze do určitých umístění. K nastavení umístění těchto prostředků možná budete potřebovat samostatné parametry.

Teď můžete použít parametr umístění prostředku v souboru Bicep, například takto:

resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

Názvy prostředků

Mnoho prostředků Azure potřebuje jedinečné názvy. Ve vašem scénáři máte dva prostředky, které potřebují jedinečné názvy: účet úložiště a aplikaci App Service. Když požádáte o nastavení těchto hodnot jako parametry, může být obtížné pro každého, kdo používá soubor Bicep, protože potřebuje najít jméno, které nikdo jiný nepoužívá.

Bicep má další funkci, uniqueString() která se při vytváření názvů prostředků hodí. Při použití této funkce musíte zadat počáteční hodnotu, která by se měla lišit v různých nasazeních, ale konzistentní napříč všemi nasazeními pro stejné prostředky.

Pokud zvolíte dobrou počáteční hodnotu, můžete získat stejný název pokaždé, když nasadíte stejnou sadu prostředků, ale pokaždé, když nasadíte jinou sadu prostředků pomocí stejného souboru Bicep, získáte jiný název. Pojďme se podívat, jak můžete funkci použít uniqueString() :

param storageAccountName string = uniqueString(resourceGroup().id)

Výchozí hodnota tohoto parametru resourceGroup() znovu používá funkci, jako jste to udělali při nastavování umístění prostředku. Tentokrát ale získáte ID skupiny prostředků. ID skupiny prostředků vypadá takto:

/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MyResourceGroup

ID skupiny prostředků zahrnuje ID předplatného Azure (aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e) a název skupiny prostředků (MyResourceGroup). ID skupiny prostředků je často vhodným kandidátem na základní hodnotu pro názvy prostředků, protože:

  • Pokaždé, když nasadíte stejné prostředky, přejdou do stejné skupiny prostředků. Funkce uniqueString() vrátí stejnou hodnotu pokaždé.
  • Pokud nasadíte do dvou různých skupin prostředků v předplatném Azure, hodnota `resourceGroup().id` se bude lišit, protože názvy skupin prostředků se budou lišit. Funkce uniqueString() poskytne různé hodnoty pro každou sadu prostředků.
  • Pokud nasadíte do dvou různých předplatných Azure, i když použijete stejný název skupiny prostředků, hodnota se bude lišit, resourceGroup().id protože ID předplatného Azure se bude lišit. Funkce uniqueString() znovu poskytne různé hodnoty pro každou sadu prostředků.

Návod

Často je vhodné k vytváření názvů prostředků použít výrazy souborů Bicep. Mnoho typů prostředků Azure má pravidla týkající se povolených znaků a délky jejich názvů. Vložení procesu vytváření názvů prostředků do souboru Bicep znamená, že si každý, kdo soubor používá, nemusí pamatovat tato pravidla.

Kombinované řetězce

Pokud funkci použijete uniqueString() jenom k nastavení názvů prostředků, pravděpodobně získáte jedinečné názvy, ale nebudou smysluplné. Dobrý název prostředku by měl být také popisný, aby bylo jasné, k čemu prostředek slouží. Často budete chtít vytvořit název zkombinováním smysluplného slova nebo řetězce s jedinečnou hodnotou. Tímto způsobem budete mít prostředky, které mají smysluplné i jedinečné názvy.

Bicep má funkci označovanou jako interpolace řetězců, která umožňuje kombinovat řetězce. Pojďme se podívat, jak to funguje:

param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'

Výchozí hodnota parametru storageAccountName má teď dvě části:

  • toylaunch je pevně zakódovaný řetězec, který pomáhá každému, kdo se podívá na nasazený prostředek v Azure, aby porozuměl účelu účtu úložiště.
  • ${uniqueString(resourceGroup().id)} je způsob, jak bicep instruovat, aby vyhodnotil výstup uniqueString(resourceGroup().id) funkce, a pak ho zřetězením do řetězce.

Návod

uniqueString() Někdy funkce vytvoří řetězce, které začínají číslem. Některé prostředky Azure, jako jsou účty úložiště, neumožňují jejich názvy začínat čísly. To znamená, že je vhodné použít interpolaci řetězců k vytvoření názvů prostředků, jako je v předchozím příkladu.

Výběr skladových položek pro prostředky

Ostatní členové vašeho týmu jsou ohromeni kódem Bicep, který jste zatím vytvořili. Rozhodli jste se, že společně použijete soubor Bicep k nasazení prostředků pro podporu všech nových uvedení hraček na trh.

Jeden z vašich kolegů navrhl, abyste pro každé uvedení produktů vytvořili neprodukční prostředí, aby marketingovému týmu pomohli weby otestovat, než budou zákazníkům k dispozici. Chcete se ale ujistit, že netratíte příliš mnoho peněz na neprodukční prostředí, takže se rozhodnete o některých zásadách společně:

  • V produkčních prostředích se účty úložiště nasadí na Standard_GRS skladovou položku (geograficky redundantní úložiště) pro zajištění vysoké odolnosti. Plány služby App Service se nasadí na skladovou P2v3 položku pro zajištění vysokého výkonu.
  • V neprodukčním prostředí se účty úložiště nasadí na skladovou Standard_LRS položku (místně redundantní úložiště). Plány služby App Service se nasadí na bezplatnou F1 skladovou položku.

Jedním ze způsobů implementace těchto obchodních požadavků je použití parametrů k určení jednotlivých skladových položek. Zadávání každé skladové položky jako parametru ale může být obtížné spravovat, zejména pokud máte větší soubory Bicep. Další možností je vložit obchodní pravidla do souboru pomocí kombinace parametrů, proměnných a výrazů.

Nejprve můžete zadat parametr, který určuje, jestli je nasazení určené pro produkční nebo neprodukční prostředí:

@allowed([
  'nonprod'
  'prod'
])
param environmentType string

Všimněte si, že tento kód používá k zadání seznamu povolených hodnot parametru environmentType novou syntaxi. Bicep nedovolí, aby někdo nasadil soubor Bicep, pokud nezadá některou z těchto hodnot.

Dále můžete vytvořit proměnné, které určují skladové položky, které se mají použít pro účet úložiště a plán služby App Service na základě prostředí:

var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2V3' : 'F1'

Všimněte si také nové syntaxe. Pojďme si ho rozdělit:

  • (environmentType == 'prod') v závislosti na tom, která povolená hodnota se používá pro environmentType parametr, se vyhodnotí jako logická hodnota (pravda nebo nepravda).
  • ? se nazývá ternární operátor a vyhodnocuje if/then příkaz. Hodnota za operátorem ? se použije, pokud je výraz pravdivý. Pokud se výraz vyhodnotí jako nepravda, použije se hodnota za dvojtečku (:).

Tato pravidla můžeme přeložit na:

  • Pro proměnnou storageAccountSkuName , pokud environmentType je parametr nastaven na prod, pak použijte skladovou Standard_GRS položku. V opačném případě použijte skladovou Standard_LRS položku.
  • Pro proměnnou appServicePlanSkuName , pokud environmentType je parametr nastaven na prod, pak použijte skladovou P2V3 položku a PremiumV3 úroveň. V opačném případě použijte skladovou F1 položku.

Návod

Když vytváříte výrazy s více částmi, je vhodné místo vložení výrazů přímo do vlastností prostředku použít proměnné. Díky tomu jsou vaše soubory Bicep přehlednější a srozumitelnější, protože nezahlcuje definice prostředků zbytečnou logikou.

Při použití parametrů, proměnných a výrazů v souboru Bicep můžete znovu použít soubor a rychle nasadit novou sadu prostředků. Například pokaždé, když marketingové oddělení požádá o nasazení nového webu pro další spuštění toy, zadáte nové hodnoty parametrů pro každé prostředí, které nasadíte, a budete nastaveni.