Zwiększanie elastyczności szablonu usługi Azure Resource Manager przy użyciu funkcji szablonu

Ukończone

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:. Zwróć uwagę, że to wyrażenie zawiera funkcjęresourceGroup() szablonu usługi ARM. 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 to concat, 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 i last.
  • Funkcje porównywania do dokonywania porównań w szablonach. Przykład: equals i greater.
  • Funkcje daty do pracy z datami. Przykład: utcNow i dateTimeAdd.
  • Funkcje wartości wdrożenia do pobierania wartości z sekcji szablonu i wartości związanych z wdrożeniem. Przykład: environment i parameters.
  • Funkcje logiczne do pracy z warunkami logicznymi. Przykład: if i not.
  • Funkcje liczbowe do pracy z liczbami całkowitymi. Przykład: max i mod.
  • Funkcje obiektów do pracy z obiektami. Przykład: contains i length.
  • Funkcje zasobów do pobierania wartości zasobów. Przykład: resourceGroup i subscription.
  • Funkcje ciągów do pracy z ciągami. Przykład: length i startsWith.

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:

Picture of a string created by concatenating the word Storage with a 13-character hash that contains both uppercase and lowercase letters.

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:

Picture of a string created by concatenating the word Storage with a 13-character hash, and then converting all letters to lowercase.