Bagikan melalui


Fungsi yang ditentukan pengguna dalam templat ARM

Fungsi yang ditentukan pengguna membantu menyederhanakan dan menggunakan kembali ekspresi kompleks di templat ARM Anda. Dengan merangkum logika dalam fungsi kustom, Anda dapat meningkatkan keterbacaan templat, keberlanjutan, dan skalabilitas-terutama ketika logika yang sama muncul di beberapa tempat. Fungsi-fungsi ini berbeda dari fungsi templat bawaan yang selalu tersedia. Untuk menentukan fungsi yang ditentukan pengguna di Bicep, lihat Fungsi yang ditentukan pengguna di Bicep.

Tentukan fungsi

Fungsi Anda memerlukan nilai namespace untuk menghindari konflik penamaan dengan fungsi template. Contoh berikut menunjukkan 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))]"
        }
      }
    }
  }
],

Gunakan fungsi

Contoh berikut menunjukkan templat yang menyertakan fungsi yang ditentukan pengguna untuk mendapatkan nama unik untuk akun penyimpanan. Templat memiliki parameter 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": "[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
     }
   }
 ]
}

Selama penyebaran, storageNamePrefix parameter diteruskan ke fungsi:

  • Templat mendefinisikan parameter bernama storageNamePrefix.
  • Fungsi ini digunakan namePrefix karena Anda hanya dapat menggunakan parameter yang ditentukan dalam fungsi. Untuk informasi selengkapnya, lihat Batasan.
  • Di bagian templat resources , elemen menggunakan name fungsi dan meneruskan storageNamePrefix nilai ke fungsi namePrefix.

Keterbatasan

Saat mendefinisikan fungsi pengguna, ada beberapa batasan:

  • Fungsi tidak dapat mengakses variabel.
  • Fungsi tersebut hanya dapat menggunakan parameter yang ditentukan 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 selanjutnya