Fungsi yang ditentukan pengguna dalam templat ARM
Dalam templat Anda, Anda dapat membuat fungsi Anda sendiri. Fungsi-fungsi ini tersedia untuk digunakan dalam templat Anda. Fungsi yang ditentukan pengguna terpisah dari fungsi templat standar yang secara otomatis tersedia dalam templat Anda. Membuat fungsi Anda sendiri ketika Anda memiliki ekspresi rumit yang digunakan berulang kali di templat Anda.
Artikel ini Menjelaskan cara menambahkan fungsi yang ditentukan pengguna dalam templat Azure Resource Manager (templat ARM).
Menentukan fungsi
Fungsi Anda memerlukan nilai namespace untuk menghindari konflik penamaan dengan fungsi templat. Contoh berikut memperlihatkan fungsi yang mengembalikan nama unik:
"functions": [
{
"namespace": "contoso",
"members": {
"uniqueName": {
"parameters": [
{
"name": "namePrefix",
"type": "string"
}
],
"output": {
"type": "string",
"value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
}
}
}
}
],
Menggunakan fungsi
Contoh berikut memperlihatkan templat yang menyertakan fungsi yang ditentukan pengguna untuk mendapatkan nama unik untuk akun penyimpanan. Template memiliki paramete bernama storageNamePrefix
yang diteruskan sebagai parameter ke fungsi.
{
"$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
}
}
]
}
Selama penyebaran, parameter storageNamePrefix
diteruskan ke fungsi:
- Templat mendefinisikan parameter yang bernama
storageNamePrefix
. - Fungsi menggunakan
namePrefix
karena Anda hanya dapat menggunakan parameter yang ditentukan dalam fungsi. Untuk informasi selengkapnya, lihat Batasan. - Di bagian
resources
templat, elemenname
menggunakan fungsi dan meneruskan nilaistorageNamePrefix
ke fungsinamePrefix
.
Batasan
Saat mendefinisikan fungsi pengguna, ada beberapa batasan:
- Fungsi tidak dapat mengakses variabel.
- Fungsi ini hanya dapat menggunakan parameter yang didefinisikan dalam fungsi. Saat Anda menggunakan fungsi parameter dalam fungsi yang ditentukan pengguna, Anda dibatasi pada parameter untuk fungsi tersebut.
- Fungsi ini tidak dapat memanggil fungsi lain yang ditentukan pengguna.
- Fungsi ini tidak dapat menggunakan fungsi referensi atau fungsi daftar apapun.
- Parameter untuk fungsi tidak dapat memiliki nilai default.
Langkah berikutnya
- Untuk mempelajari properti yang tersedia untuk fungsi yang ditentukan pengguna, lihat Memahami struktur dan sintaksis templat ARM.
- Untuk daftar fungsi templat yang tersedia, lihat fungsi templat ARM.