Fonctions définies par l'utilisateur dans un modèle Azure Resource Manager

Dans votre modèle, vous pouvez créer vos propres fonctions. Ces fonctions peuvent être utilisées dans votre modèle. Les fonctions définies par l’utilisateur sont distinctes des fonctions de modèles standard qui sont automatiquement disponibles dans votre modèle. Créez vos propres fonctions quand vous avez des expressions complexes qui sont utilisées de manière répétitive dans votre modèle.

Cet article vous explique comment ajouter des fonctions définies par l'utilisateur dans votre modèle Azure Resource Manager.

Définir la fonction

Vos fonctions requièrent une valeur pour l’espace de noms afin d’éviter tout conflit avec les fonctions de modèle. L'exemple suivant illustre une fonction qui renvoie un nom unique :

"functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],

Utiliser la fonction

L’exemple suivant montre un modèle qui comprend une fonction définie par l’utilisateur pour obtenir un nom unique pour un compte de stockage. Le modèle comprend un paramètre storageNamePrefix qu’il transmet à la fonction sous forme de paramètre.

{
 "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
 "contentVersion": "1.0.0.0",
 "parameters": {
   "storageNamePrefix": {
     "type": "string",
     "maxLength": 11
   }
 },
 "functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],
 "resources": [
   {
     "type": "Microsoft.Storage/storageAccounts",
     "apiVersion": "2022-09-01",
     "name": "[contoso.uniqueName(parameters('storageNamePrefix'))]",
     "location": "South Central US",
     "sku": {
       "name": "Standard_LRS"
     },
     "kind": "StorageV2",
     "properties": {
       "supportsHttpsTrafficOnly": true
     }
   }
 ]
}

Pendant le déploiement, le paramètre storageNamePrefix est transmis à la fonction :

  • Le modèle définit un paramètre storageNamePrefix.
  • La fonction utilise namePrefix parce que vous ne pouvez utiliser que des paramètres définis dans la fonction. Pour plus d’informations, consultez Limitations.
  • Dans la section resources du modèle, l’élément name utilise la fonction et transmet la valeur storageNamePrefix au paramètre namePrefix de la fonction.

Limites

La définition d’une fonction utilisateur est soumise à certaines restrictions :

  • La fonction ne peut pas accéder aux variables.
  • La fonction ne peut utiliser que des paramètres définis dans l’autre fonction. Quand vous utilisez la fonction parameters dans une fonction définie par l’utilisateur, vous êtes limité aux paramètres de cette fonction.
  • La fonction ne peut pas appeler d’autres fonctions définies par l’utilisateur.
  • La fonction ne peut pas utiliser la fonction reference ni aucune des fonctions list.
  • Les paramètres de la fonction ne peuvent pas avoir de valeur par défaut.

Étapes suivantes