Bagikan melalui


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 tersedia secara otomatis dalam templat Anda. Buat fungsi Anda sendiri ketika Anda memiliki ekspresi rumit yang digunakan berulang kali dalam templat Anda.

Artikel ini menjelaskan cara menambahkan fungsi yang ditentukan pengguna dalam templat Azure Resource Manager (templat ARM) Anda.

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": "[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, 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