Přidání flexibility pomocí parametrů a proměnných
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. -
appServiceAppNameje 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ů. -
stringje typ parametru. Pro parametry Bicep můžete zadat několik různých typů, včetněstringtextu,intčísel aboollogických hodnot true nebo false. Složitější parametry můžete předat také pomocí aarrayobjecttypů.
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
varslova ř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. FunkceuniqueString()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().idprotože ID předplatného Azure se bude lišit. FunkceuniqueString()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:
-
toylaunchje 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ýstupuniqueString(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_GRSskladovou položku (geograficky redundantní úložiště) pro zajištění vysoké odolnosti. Plány služby App Service se nasadí na skladovouP2v3položku pro zajištění vysokého výkonu. - V neprodukčním prostředí se účty úložiště nasadí na skladovou
Standard_LRSpoložku (místně redundantní úložiště). Plány služby App Service se nasadí na bezplatnouF1skladovou 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á proenvironmentTypeparametr, se vyhodnotí jako logická hodnota (pravda nebo nepravda). -
?se nazývá ternární operátor a vyhodnocujeif/thenpří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, pokudenvironmentTypeje parametr nastaven naprod, pak použijte skladovouStandard_GRSpoložku. V opačném případě použijte skladovouStandard_LRSpoložku. - Pro proměnnou
appServicePlanSkuName, pokudenvironmentTypeje parametr nastaven naprod, pak použijte skladovouP2V3položku aPremiumV3úroveň. V opačném případě použijte skladovouF1polož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.