Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Определяемые пользователем функции помогают упростить и повторно использовать сложные выражения в шаблонах 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
функции.
Ограничения
При определении пользовательской функции есть несколько ограничений:
- Функция не может обращаться к переменным.
- Функция может использовать только параметры, определенные в самой функции. При использовании функции параметров в определяемой пользователем функции вы ограничиваетесь параметрами этой функции.
- Функция не может вызывать другие функции, определяемые пользователем.
- Функция не может использовать эталонную функцию или какие-либо функции списка .
- Для параметров этой функции нельзя задавать значения по умолчанию.
Дальнейшие шаги
- Сведения о доступных свойствах для определяемых пользователем функций см. в статье "Общие сведения о структуре и синтаксисе шаблонов ARM".
- Список доступных функций шаблона см. в разделе " Функции шаблона ARM".