用戶定義的函式有助於簡化和重複使用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-06-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 函式時,受限於該函式的參數。
- 此函式無法呼叫其他的使用者定義函式。
- 函式無法使用 reference 函式或任何 清單 函式。
- 函式的參數不能有預設值。
後續步驟
- 若要瞭解使用者定義函式的可用屬性,請參閱 瞭解ARM範本的結構和語法。
- 如需可用範本函式的清單,請參閱 ARM範本函式。