Användardefinierade funktioner i ARM-mall

I mallen kan du skapa egna funktioner. De här funktionerna är tillgängliga för användning i mallen. Användardefinierade funktioner är separata från de standardmallfunktioner som automatiskt är tillgängliga i mallen. Skapa dina egna funktioner när du har komplicerade uttryck som används upprepade gånger i mallen.

Den här artikeln beskriver hur du lägger till användardefinierade funktioner i din Azure Resource Manager-mall (ARM-mall).

Definiera funktionen

Dina funktioner kräver ett namnområdesvärde för att undvika namngivningskonflikter med mallfunktioner. I följande exempel visas en funktion som returnerar ett unikt namn:

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

Använda funktionen

I följande exempel visas en mall som innehåller en användardefinierad funktion för att hämta ett unikt namn för ett lagringskonto. Mallen har en parameter med namnet storageNamePrefix som skickas som en parameter till funktionen.

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

Under distributionen skickas parametern storageNamePrefix till funktionen:

  • Mallen definierar en parameter med namnet storageNamePrefix.
  • Funktionen använder namePrefix eftersom du bara kan använda parametrar som definierats i funktionen. Mer information finns i Begränsningar.
  • I mallavsnittet resources använder elementet name funktionen och skickar storageNamePrefix värdet till funktionens namePrefix.

Begränsningar

När du definierar en användarfunktion finns det vissa begränsningar:

  • Funktionen kan inte komma åt variabler.
  • Funktionen kan bara använda parametrar som definieras i funktionen. När du använder parameterfunktionen i en användardefinierad funktion är du begränsad till parametrarna för den funktionen.
  • Funktionen kan inte anropa andra användardefinierade funktioner.
  • Funktionen kan inte använda referensfunktionen eller någon av listfunktionerna .
  • Parametrar för funktionen kan inte ha standardvärden.

Nästa steg