Sdílet prostřednictvím


Uživatelem definované funkce v šabloně ARM

Uživatelem definované funkce pomáhají zjednodušit a opakovaně používat složité výrazy v šablonách ARM. Zapouzdřením logiky ve vlastních funkcích můžete zlepšit čitelnost šablon, udržovatelnost a škálovatelnost, a to zejména v případě, že se stejná logika vyskytuje na více místech. Tyto funkce se liší od předdefinovaných funkcí šablon , které jsou vždy k dispozici. Pokud chcete definovat uživatelem definované funkce v Bicep, přečtěte si téma Uživatelem definované funkce v Bicep.

Definování funkce

Vaše funkce vyžadují hodnotu oboru názvů, aby nedocházelo ke konfliktům názvů s funkcemi šablony. Následující příklad ukazuje funkci, která vrací jedinečný název:

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

Použití funkce

Následující příklad ukazuje šablonu, která obsahuje uživatelem definovanou funkci pro získání jedinečného názvu účtu úložiště. Šablona má parametr s názvem storageNamePrefix , který se předá funkci jako parametr.

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

Během nasazení storageNamePrefix se parametr předá funkci:

  • Šablona definuje parametr s názvem storageNamePrefix.
  • Funkce používá namePrefix , protože můžete použít pouze parametry definované ve funkci. Další informace najdete v tématu Omezení.
  • V části šablony resources používá element name funkci a předává hodnotu storageNamePrefix do namePrefix této funkce.

Omezení

Při definování uživatelské funkce existují určitá omezení:

  • Funkce nemá přístup k proměnným.
  • Funkce může používat pouze parametry definované ve funkci. Pokud použijete funkci parametrů v rámci uživatelem definované funkce, budete omezeni na parametry této funkce.
  • Funkce nemůže volat jiné uživatelem definované funkce.
  • Funkce nemůže použít referenční funkci ani žádnou funkci seznamu .
  • Parametry pro funkci nemůžou mít výchozí hodnoty.

Další kroky