Пользовательские функции в шаблоне ARM
В шаблоне можно создать свои собственные функции. Эти функции доступны для использования в шаблоне. Пользовательские функции отделены от стандартных функций шаблонов, которые автоматически доступны в шаблоне. Создавайте собственные функции при наличии сложных выражений, которые многократно используются в шаблоне.
В этой статье описано, как добавлять пользовательские функции в шаблон Azure Resource Manager (шаблон ARM).
Определение функции
Для функции требуется значение пространства имен, чтобы избежать конфликтов именования с функциями шаблона. В следующем примере показана функция, которая возвращает уникальное имя.
"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": "[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
}
}
]
}
Во время развертывания параметр storageNamePrefix
передается в функцию.
- В шаблоне определен параметр с именем
storageNamePrefix
. - Функция использует
namePrefix
, поскольку можно использовать только параметры, определенные в самой функции. Дополнительные сведения см. в статье Ограничения. - В разделе шаблона
resources
элементname
использует функцию и передает значениеstorageNamePrefix
вnamePrefix
функции.
Ограничения
При определении пользовательской функции есть несколько ограничений:
- Функция не может обращаться к переменным.
- Функция может использовать только параметры, определенные в самой функции. При использовании функции parameters вместе с пользовательской функцией можно лишь применять параметры только этой функции.
- Функция не может вызывать другие функции, определяемые пользователем.
- Функция не может использовать эталонную функцию или любую функцию из списка функций.
- Для параметров этой функции нельзя задавать значения по умолчанию.
Дальнейшие действия
- Дополнительные сведения о доступных свойствах для пользовательских функций см. в статье Общие сведения о структуре и синтаксисе шаблонов ARM.
- Список доступных шаблонов функций см. в статье о Функции шаблонов ARM.