Zvýšení flexibility šablony Azure Resource Manageru pomocí funkcí šablon
V tomto scénáři chcete, aby nasazení šablony Azure Resource Manageru (ARM) do různých prostředí probíhalo co nejjednodušeji. Problematickou oblastí je jedinečný název účtu úložiště Azure.
Rozhodnete se problém vyřešit vytvořením výrazu pomocí funkcí šablony ARM.
Co jsou funkce šablony ARM?
Funkce šablony ARM zvyšují flexibilitu šablony ARM pomocí dynamického získávání hodnot během nasazení.
Pokud chcete porozumět funkcím, musíte nejdřív porozumět výrazům. Výrazy jsou hodnoty, které se vyhodnocují, když je šablona nasazená. Začínají a končí hranatými závorkami []
a můžou vrátit řetězec, celé číslo, logickou hodnotu, pole nebo objekt.
V předchozím modulu tohoto studijního programu jste už pracovali s výrazy v šabloně Resource Manageru. Použili jste například:
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
Výraz je hodnota atributu defaultValue:
. Všimněte si, že tento výraz obsahuje funkci šablony ARM resourceGroup()
. Tato funkce vrátí informace o skupině prostředků, do které se tato šablona nasazuje. .location
načte jednu vlastnost z objektu vráceného touto funkcí. Funkce umožňují dynamicky vytvářet hodnoty, které potřebujete.
Jak pracovat s funkcemi šablony ARM?
Při práci s funkcemi platí několik pravidel:
Při předávání řetězcové hodnoty do funkce používejte jednoduché uvozovky. Následuje příklad:
concat('storage',uniqueString(resourceGroup().id))
. Funkce jeconcat
a řetězec, který funkci předáváte, je'storage'
.Pro práci s hodnotami literálů ve funkcích šablony potřebujete řídicí znaky. Řídicí znak se liší v závislosti na tom, co řídíte.
Pokud chcete nastavit vlastnost na hodnotu null, můžete použít
null
nebo[json('null')]
. Když jako parametr zadáte hodnotu null, funkce JSON vrátí prázdný objekt."stringValue": null, "objectValue": "[json('null')]"
Resource Manager vám poskytuje několik funkcí šablony ARM. Funkce jsou uvedené ve skupinách podle svých typů:
- Funkce polí pro práci s poli. Příklad:
first
alast
. - Porovnávací funkce pro porovnávání v šablonách. Příklad:
equals
agreater
. - Funkce data pro práci s daty. Příklad:
utcNow
adateTimeAdd
. - Funkce hodnot nasazení pro získání hodnot z oddílů šablony a hodnot souvisejících s nasazením. Příklad:
environment
aparameters
. - Logické funkce pro práci s logickými podmínkami. Příklad:
if
anot
. - Číselné funkce pro práci s celými čísly. Příklad:
max
amod
. - Funkce objektů pro práci s objekty. Příklad:
contains
alength
. - Funkce prostředků pro získání hodnot prostředků. Příklad:
resourceGroup
asubscription
. - Funkce řetězců pro práci s řetězci. Příklad:
length
astartsWith
.
Jak použít několik funkcí v jednom výrazu?
K vytvoření vlastních výrazů můžete použít několik funkcí šablony dohromady. V tomto scénáři potřebujete sestavit výraz, který vytvoří jedinečný název pro každou skupinu prostředků tím, že sloučí vstup ve formě předpony s hodnotou hash ID skupiny prostředků. Výsledkem výrazu jsou názvy účtů úložiště jako dev2hu6fktr577wh
a staging5his8hgr67tt5
. K vytvoření této řetězcové hodnoty můžete použít čtyři funkce. Příklad:
"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"
Pojďme si tento výraz projít.
Počínaje zřetězením přebírá tato funkce libovolný počet argumentů a pro parametry může přijímat řetězce nebo pole. Tady použijete řetězec literálu "Storage"
a zřetězíte ho s výsledkem jiné funkce, uniqueString. Funkce uniqueString
vytvoří deterministický řetězec hash na základě parametrů. V tomto výrazu vytvoříte hodnotu hash aktuálního ID skupiny prostředků pomocí jiné funkce, resourceGroup.
Tady je výstup z toho, co jsme zatím probrali:
Kvůli dodržení zásad vytváření názvů je nutné, aby byl tento řetězec malými písmeny. Tady přidáte funkci toLower jako vnější funkci.
Výsledný řetězec vypadá takto: