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, elemen name menggunakan fungsi dan meneruskan nilai storageNamePrefix ke fungsi namePrefix.

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