Funzioni definite dall'utente nel modello di Resource Manager

Nel modello è possibile creare funzioni personalizzate. Tali funzioni sono disponibili per usare il modello. Le funzioni definite dall'utente sono separate dalle funzioni modello standard disponibili automaticamente all'interno del modello. Creare le proprie funzioni quando sono presenti espressioni complesse usate ripetutamente nel modello.

Questo articolo descrive come aggiungere funzioni definite dall'utente nel modello di Azure Resource Manager (modello ARM).

Definire la funzione

Le funzioni richiedono che sia definito un valore dello spazio dei nomi per evitare conflitti di denominazione con le funzioni del modello. Nell'esempio seguente viene illustrata una funzione che restituisce un nome univoco:

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

Usare la funzione

Nell'esempio seguente viene illustrato un modello che include una funzione definita dall'utente per ottenere un nome univoco per un account di archiviazione. Il modello ha un parametro denominato storageNamePrefix passato come parametro alla funzione.

{
 "$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
     }
   }
 ]
}

Durante la distribuzione, il storageNamePrefix parametro viene passato alla funzione:

  • Il modello definisce un parametro denominato storageNamePrefix.
  • La funzione usa namePrefix perché è possibile usare solo i parametri definiti nella funzione. Per altre informazioni, vedere Limitazioni.
  • Nella sezione del resources modello l'elemento name usa la funzione e passa il storageNamePrefix valore a namePrefix.

Limitazioni

Quando si crea una funzione definita dall'utente, è necessario tenere presente alcune restrizioni:

  • La funzione non può accedere alle variabili.
  • La funzione può usare solo i parametri definiti in essa. Quando si usa la funzione dei parametri all'interno di una funzione definita dall'utente, si è limitati ai parametri per tale funzione.
  • La funzione non può chiamare altre funzioni definite dall'utente.
  • La funzione non può usare la funzione di riferimento o una qualsiasi delle funzioni di elenco .
  • I parametri della funzione non possono avere valori predefiniti.

Passaggi successivi