Sdílet prostřednictvím


Uživatelem definované funkce v šabloně ARM

V rámci šablony můžete vytvářet vlastní funkce. Tyto funkce jsou k dispozici pro použití v šabloně. Uživatelem definované funkce jsou oddělené od standardních funkcí šablon , které jsou automaticky dostupné v rámci šablony. Pokud máte složité výrazy, které se opakovaně používají v šabloně, můžete vytvářet vlastní funkce.

Tento článek popisuje, jak přidat uživatelem definované funkce do šablony Azure Resource Manager (šablona ARM).

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 funkci předá 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": "[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
     }
   }
 ]
}

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

  • Š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 oddílu šablony resources element použije funkci a předá storageNamePrefix hodnotu do objektu namePrefix.name

Omezení

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

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

Další kroky