Dela via


Användardefinierade funktioner i ARM-mall

Användardefinierade funktioner förenklar och återanvänder komplexa uttryck i ARM-mallar. Genom att kapsla in logik i anpassade funktioner kan du förbättra mallens läsbarhet, underhåll och skalbarhet, särskilt när samma logik visas på flera platser. Dessa funktioner skiljer sig från de inbyggda mallfunktioner som alltid är tillgängliga. Information om hur du definierar användardefinierade funktioner i Bicep finns i Användardefinierade funktioner i Bicep.

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": "[format('{0}{1}', toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],
 "resources": [
   {
     "type": "Microsoft.Storage/storageAccounts",
     "apiVersion": "2025-01-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 mallens resources avsnitt 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