Поделиться через


Определяемые пользователем функции в шаблоне ARM

Определяемые пользователем функции помогают упростить и повторно использовать сложные выражения в шаблонах ARM. Инкапсулируя логику в пользовательских функциях, вы можете улучшить удобочитаемость шаблона, удобство обслуживания и масштабируемость, особенно если одна и та же логика отображается в нескольких местах. Эти функции отличаются от встроенных функций шаблона , которые всегда доступны. Сведения о том, как определить функции, определяемые пользователем в Bicep, см. в разделе "Определяемые пользователем функции в Bicep".

Определение функции

Ваши функции требуют указания значения пространства имен, чтобы избежать конфликтов имен с шаблонными функциями. В следующем примере показана функция, которая возвращает уникальное имя:

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

Использование функции

В следующем примере показан шаблон, включающий определяемую пользователем функцию для получения уникального имени учетной записи хранения. Шаблон имеет параметр с именем storageNamePrefix , который передается в качестве параметра функции.

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

Во время развертывания storageNamePrefix параметр передается функции:

  • Шаблон определяет параметр с именем storageNamePrefix.
  • Функция используется namePrefix , так как можно использовать только параметры, определенные в функции. Дополнительные сведения см. в разделе "Ограничения".
  • В разделе resources шаблона элемент name использует функцию и передает значение storageNamePrefix в namePrefix функции.

Ограничения

При определении пользовательской функции есть несколько ограничений:

  • Функция не может обращаться к переменным.
  • Функция может использовать только параметры, определенные в самой функции. При использовании функции параметров в определяемой пользователем функции вы ограничиваетесь параметрами этой функции.
  • Функция не может вызывать другие функции, определяемые пользователем.
  • Функция не может использовать эталонную функцию или какие-либо функции списка .
  • Для параметров этой функции нельзя задавать значения по умолчанию.

Дальнейшие шаги