Zwiększanie elastyczności szablonu usługi Azure Resource Manager przy użyciu funkcji szablonu
W tym scenariuszu chcesz jak najbardziej ułatwić wdrażanie szablonu usługi Azure Resource Manager (ARM) w różnych środowiskach. Jednym z problemów do rozwiązania jest kwestia unikatowej nazwy konta usługi Azure Storage.
Aby rozwiązać ten problem, utworzysz wyrażenie przy użyciu funkcji szablonu usługi ARM.
Co to są funkcje szablonu usługi ARM?
Funkcje szablonu usługi ARM zwiększają elastyczność tego szablonu przez dynamiczne pobieranie wartości podczas wdrażania.
Aby zrozumieć, czym są funkcje, należy najpierw zrozumieć wyrażenia. Wyrażenia to wartości, które są obliczane podczas wdrażania szablonu. Rozpoczynają się i kończą nawiasami kwadratowymi []
i mogą zwracać ciąg, liczbę całkowitą, wartość logiczną, tablicę lub obiekt.
W poprzednim module w tej ścieżce szkoleniowej współpracowaliśmy już z wyrażeniami w szablonie usługi Resource Manager. Użyto na przykład następujących wyrażeń:
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
Wyrażenie ma wartość atrybutu defaultValue:
. To wyrażenie zawiera funkcję szablonu usługi ARM resourceGroup()
. Ta funkcja zwraca informacje o grupie zasobów, do której jest wdrażany ten szablon. Element .location
pobiera jedną właściwość z obiektu zwróconego przez tę funkcję. Funkcje umożliwiają konstruowanie potrzebnych wartości dynamicznie.
Jak używać funkcji szablonu usługi ARM?
Podczas pracy z funkcjami trzeba przestrzegać kilku reguł:
Przekazując wartość ciągu do funkcji, użyj pojedynczego cudzysłowu. Oto przykład:
concat('storage',uniqueString(resourceGroup().id))
. Funkcja toconcat
, a ciąg przekazywany do funkcji to'storage'
.Aby można było korzystać z wartości literałów w funkcjach szablonu, należy używać znaków ucieczki. Znak ucieczki zależy od tego, jaki literał jest potrzebny.
Aby ustawić dla właściwości wartość null, można wpisać
null
lub[json('null')]
. W przypadku podania wartości null jako parametru ta funkcja JSON zwraca pusty obiekt."stringValue": null, "objectValue": "[json('null')]"
Usługa Resource Manager udostępnia kilka funkcji szablonu usługi ARM. Funkcje są pogrupowane według typu:
- Funkcje tablic do pracy z tablicami. Przykład:
first
ilast
. - Funkcje porównywania do dokonywania porównań w szablonach. Przykład:
equals
igreater
. - Funkcje daty do pracy z datami. Przykład:
utcNow
idateTimeAdd
. - Funkcje wartości wdrożenia do pobierania wartości z sekcji szablonu i wartości związanych z wdrożeniem. Przykład:
environment
iparameters
. - Funkcje logiczne do pracy z warunkami logicznymi. Przykład:
if
inot
. - Funkcje liczbowe do pracy z liczbami całkowitymi. Przykład:
max
imod
. - Funkcje obiektów do pracy z obiektami. Przykład:
contains
ilength
. - Funkcje zasobów do pobierania wartości zasobów. Przykład:
resourceGroup
isubscription
. - Funkcje ciągów do pracy z ciągami. Przykład:
length
istartsWith
.
Jak używać kilku funkcji w jednym wyrażeniu?
Do tworzenia własnych wyrażeń można używać kilku funkcji szablonu jednocześnie. W tym scenariuszu potrzebujesz wyrażenia tworzącego unikatową nazwę dla każdej grupy zasobów przez połączenie wprowadzonego prefiksu ze skrótem identyfikatora grupy zasobów. To wyrażenie tworzy nazwy kont usługi magazynu takie jak dev2hu6fktr577wh
i staging5his8hgr67tt5
. Do skonstruowania tej wartości ciągu możesz użyć czterech funkcji. Na przykład:
"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"
Przeanalizujmy to wyrażenie.
Począwszy od concat, ta funkcja przyjmuje dowolną liczbę argumentów i może akceptować ciągi lub tablice dla parametrów. W tym miejscu używasz ciągu literału "Storage"
i łączysz go z wynikiem innej funkcji, uniqueString. Funkcja uniqueString
tworzy ciąg skrótu deterministycznego na podstawie parametrów. W tym wyrażeniu tworzysz skrót bieżącego identyfikatora grupy zasobów przy użyciu innej funkcji, resourceGroup.
Oto dane wyjściowe z omówionych do tej pory:
Aby zachować zgodność z konwencjami nazewnictwa, ten ciąg musi zawierać tylko małe litery. W tym miejscu dodajesz funkcję toLower jako funkcję zewnętrzną.
Wynikowy ciąg wygląda następująco: