Udostępnij przez


Funkcje zdefiniowane przez użytkownika w szablonie ARM

Funkcje zdefiniowane przez użytkownika upraszczają proces ponownego używania złożonych wyrażeń w szablonach ARM. Hermetyzując logikę w funkcjach niestandardowych, można zwiększyć czytelność szablonu, łatwość konserwacji i skalowalność, szczególnie gdy ta sama logika pojawia się w wielu miejscach. Te funkcje różnią się od wbudowanych funkcji szablonu , które są zawsze dostępne. Aby zdefiniować funkcje zdefiniowane przez użytkownika w aplikacji Bicep, zobacz Funkcje zdefiniowane przez użytkownika w Bicep.

Definiowanie funkcji

Funkcje wymagają wartości przestrzeni nazw, aby uniknąć konfliktów nazewnictwa z szablonowymi funkcjami. W poniższym przykładzie przedstawiono funkcję zwracającą unikatową nazwę:

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

Korzystanie z funkcji

W poniższym przykładzie przedstawiono szablon, który zawiera funkcję zdefiniowaną przez użytkownika do uzyskania unikalnej nazwy konta pamięci masowej. Szablon ma parametr o nazwie storageNamePrefix , który jest przekazywany jako parametr do funkcji.

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

Podczas wdrażania storageNamePrefix parametr jest przekazywany do funkcji:

  • Szablon definiuje parametr o nazwie storageNamePrefix.
  • Funkcja używa namePrefix, ponieważ można używać tylko parametrów zdefiniowanych w niej. Aby uzyskać więcej informacji, zobacz Ograniczenia.
  • W sekcji resources szablonu element name używa funkcji i przekazuje wartość storageNamePrefix do namePrefix funkcji.

Ograniczenia

Podczas definiowania funkcji użytkownika istnieją pewne ograniczenia:

  • Funkcja nie może uzyskać dostępu do zmiennych.
  • Funkcja może używać tylko parametrów zdefiniowanych w funkcji. Jeśli używasz funkcji parameters w funkcji zdefiniowanej przez użytkownika, ograniczasz się do parametrów tej funkcji.
  • Funkcja nie może wywoływać innych funkcji zdefiniowanych przez użytkownika.
  • Funkcja nie może używać funkcji reference ani żadnej z funkcji listy .
  • Parametry funkcji nie mogą mieć wartości domyślnych.

Dalsze kroki