Funzioni definite dall'utente nel modello di ARM

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

Questo articolo descrive come aggiungere funzioni definite dall'utente nel modello di Azure Resource Manager (modello di 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 è 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 è 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 che viene 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 parametro storageNamePrefix 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 resources del modello l'elemento name usa la funzione e passa il valore storageNamePrefix alla funzione namePrefix.

Limiti

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 parametri in una funzione definita dall'utente, è possibile usare solo i parametri per quella funzione.
  • La funzione non può chiamare altre funzioni definite dall'utente.
  • La funzione non può usare la funzione riferimento né una qualsiasi delle funzioni dielenco.
  • I parametri della funzione non possono avere valori predefiniti.

Passaggi successivi