Ajouter de la flexibilité à votre modèle Azure Resource Manager à l’aide de fonctions de modèle

Effectué

Dans ce scénario, vous voulez déployer votre modèle Azure Resource Manager (ARM) dans différents environnements aussi facilement que possible. Un des problèmes bloquants est d’avoir un nom unique pour le compte de stockage Azure.

Pour résoudre ce problème, vous décidez de créer une expression en utilisant des fonctions de modèle ARM.

Qu’est-ce que les fonctions de modèle ARM ?

Les fonctions du modèle ARM offrent une certaine flexibilité à votre modèle ARM en obtenant dynamiquement des valeurs pendant le déploiement.

Pour comprendre les fonctions, vous devez d’abord comprendre les expressions. Les expressions sont des valeurs qui sont évaluées quand le modèle est déployé. Elles commencent et se terminent par des crochets [], et peuvent retourner une chaîne, un entier, une valeur booléenne, un tableau ou un objet.

Dans le module précédent de ce parcours d’apprentissage, vous avez déjà travaillé avec des expressions dans votre modèle Resource Manager. Par exemple, vous avez utilisé :

"parameters": {
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},

L’expression est la valeur de l'attribut defaultValue:. Notez que cette expression contient la fonction du modèle ARMresourceGroup(). Cette fonction retourne des informations sur le groupe de ressources sur lequel ce modèle est déployé. .location récupère une propriété de l’objet retourné par cette fonction. Les fonctions vous permettent de construire dynamiquement des valeurs dont vous avez besoin.

Comment utiliser des fonctions de modèle ARM ?

Il existe quelques règles à suivre quand vous utilisez des fonctions :

  • Utilisez des guillemets simples quand vous passez une valeur de chaîne à une fonction. Voici un exemple : concat('storage',uniqueString(resourceGroup().id)). La fonction est concat, et la chaîne que vous passez à la fonction est 'storage'.

  • Pour utiliser des valeurs littérales dans les fonctions de modèle, vous avez besoin de caractères d’échappement. Le caractère d’échappement varie selon ce que vous placez en échappement.

  • Pour affecter la valeur Null à une propriété, vous pouvez utiliser null ou [json('null')]. La fonction JSON retourne un objet vide quand vous fournissez Null comme paramètre.

    "stringValue": null,
    "objectValue": "[json('null')]"
    

Resource Manager fournit plusieurs fonctions de modèle ARM pour vous. Les fonctions sont listées par groupes en fonction de leur type :

  • Les fonctions de tableau pour l’utilisation de tableaux. Par exemple : first et last.
  • Les fonctions de comparaison pour effectuer des comparaisons dans vos modèles. Par exemple : equals et greater.
  • Les fonctions de date pour l’utilisation de dates. Par exemple : utcNow et dateTimeAdd.
  • Les fonctions de valeur de déploiement pour obtenir des valeurs à partir des sections du modèle et des valeurs associées au déploiement. Par exemple : environment et parameters.
  • Les fonctions logiques pour l’utilisation de conditions logiques. Par exemple : if et not.
  • Les fonctions numériques pour l’utilisation d’entiers. Par exemple : max et mod.
  • Fonctions d’objet pour travailler avec des objets. Par exemple : contains et length.
  • Les fonctions de ressource pour obtenir les valeurs des ressources. Par exemple : resourceGroup et subscription.
  • Les fonctions de chaîne pour l’utilisation de chaînes. Par exemple : length et startsWith.

Comment utiliser plusieurs fonctions dans une même expression ?

Vous pouvez utiliser plusieurs fonctions de modèle ensemble pour créer vos propres expressions. Dans ce scénario, vous devez créer une expression qui crée un nom unique pour chaque groupe de ressources en combinant une entrée de préfixe avec un hachage de l’ID du groupe de ressources. Cette expression produit des noms de compte de stockage comme dev2hu6fktr577wh et staging5his8hgr67tt5. Vous pouvez utiliser quatre fonctions pour construire cette valeur de chaîne. Par exemple :

"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"

Passons en revue cette expression.

À partir de Concat, cette fonction accepte un nombre quelconque d’arguments et peut accepter des chaînes ou des tableaux pour les paramètres. Ici, vous utilisez une chaîne littérale "Storage" et vous la concaténez avec le résultat d’une autre fonction, uniqueString. La fonction uniqueString crée une chaîne de hachage déterministe basée sur les paramètres. Dans cette expression, vous créez un hachage de l’ID de groupe de ressources actuel en utilisant une autre fonction, resourceGroup.

Voici le résultat de ce que nous avons expliqué jusqu’à présent :

Image d’une chaîne créée en concaténant le mot Storage avec un hachage de 13 caractères qui contient à la fois des lettres majuscules et minuscules.

Pour se conformer aux conventions de nommage, cette chaîne doit être entièrement en minuscules. Ici, vous ajoutez la fonction toLower en tant que fonction externe.

La chaîne qui en résulte se présente comme ceci :

Image d’une chaîne créée en concaténant le mot Stockage avec un hachage à 13 caractères, puis en convertissant toutes les lettres en minuscules.