ARM 模板中用户定义的函数
在模板中,可以创建自己的函数。 这些函数可在模板中使用。 用户定义函数不同于模板中自动可用的标准模板函数。 当有复杂的表达式在模板中重复使用时,请创建自己的函数。
本文介绍如何在 Azure 资源管理器模板(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": "China East",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
在部署期间,storageNamePrefix
参数将传递给该函数:
- 该模板定义了一个名为
storageNamePrefix
的参数。 - 该函数使用
namePrefix
,因为只能使用函数中定义的参数。 有关详细信息,请参阅限制。 - 在此模板的
resources
节中,name
元素使用该函数并将storageNamePrefix
值传递给该函数的namePrefix
。
限制
定义用户函数时,存在一些限制:
- 该函数不能访问变量。
- 函数仅可使用函数中定义的参数。 在用户定义函数中使用 parameters 函数时,只能使用该函数的参数。
- 该函数不能调用其他用户定义的函数。
- 该函数不能使用 reference 函数或任何 list 函数。
- 该函数的参数不能具有默认值。
后续步骤
- 若要了解用户定义的函数的可用属性,请参阅了解 ARM 模板的结构和语法。
- 有关可用模板函数的列表,请参阅 ARM 模板函数。