Freigeben über


Benutzerdefinierte Funktionen in der ARM-Vorlage

Benutzerdefinierte Funktionen vereinfachen und wiederverwenden komplexe Ausdrücke in Ihren ARM-Vorlagen. Durch Kapselung von Logik in benutzerdefinierten Funktionen können Sie die Lesbarkeit, Wartung und Skalierbarkeit von Vorlagen verbessern, insbesondere, wenn die gleiche Logik an mehreren Stellen angezeigt wird. Diese Funktionen unterscheiden sich von den integrierten Vorlagenfunktionen , die immer verfügbar sind. Informationen zum Definieren benutzerdefinierter Funktionen in Bicep finden Sie unter Benutzerdefinierte Funktionen in Bicep.

Definieren der Funktion

Ihre Funktionen erfordern einen Namespacewert, um Namenskonflikte mit Vorlagenfunktionen zu vermeiden. Das folgende Beispiel zeigt eine Funktion, die einen eindeutigen Namen zurückgibt:

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

Verwenden der Funktion

Das folgende Beispiel zeigt eine Vorlage, die eine benutzerdefinierte Funktion enthält, um einen eindeutigen Namen für ein Speicherkonto abzurufen. Die Vorlage hat einen Parameter namens storageNamePrefix , der als Parameter an die Funktion übergeben wird.

{
 "$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-06-01",
     "name": "[contoso.uniqueName(parameters('storageNamePrefix'))]",
     "location": "South Central US",
     "sku": {
       "name": "Standard_LRS"
     },
     "kind": "StorageV2",
     "properties": {
       "supportsHttpsTrafficOnly": true
     }
   }
 ]
}

Während der Bereitstellung wird der storageNamePrefix Parameter an die Funktion übergeben:

  • Die Vorlage definiert einen Parameter mit dem Namen storageNamePrefix.
  • Die Funktion verwendet namePrefix , da Sie nur parameter verwenden können, die in der Funktion definiert sind. Weitere Informationen finden Sie unter Einschränkungen.
  • Im Abschnitt der Vorlage resources verwendet das name Element die Funktion und übergibt den storageNamePrefix Wert an die Funktion namePrefix.

Einschränkungen

Beim Definieren einer benutzerdefinierten Funktion gelten einige Einschränkungen:

  • Die Funktion kann nicht auf Variablen zugreifen.
  • Die Funktion kann nur Parameter verwenden, die in der Funktion definiert sind. Wenn Sie die Parameterfunktion in einer benutzerdefinierten Funktion verwenden, sind Sie auf die Parameter für diese Funktion beschränkt.
  • Die Funktion kann keine anderen benutzerdefinierten Funktionen aufrufen.
  • Die Funktion kann nicht die reference-Funktion oder eine der list-Funktionen verwenden.
  • Für die Parameter der Funktion können keine Standardwerte verwendet werden.

Nächste Schritte