وظائف محددة من قِبل المستخدم في قالب ARM

ضمن القالب الخاص بك، يمكنك إنشاء الوظائف الخاصة بك. هذه الوظائف متاحة للاستخدام في القالب الخاص بك. الوظائف التي يحددها المستخدم منفصلة عن وظائف النموذج القياسية المتوفرة تلقائياً داخل النموذج الخاص بك. قم بإنشاء الوظائف الخاصة بك عندما يكون لديك تعبيرات معقدة يتم استخدامها بشكل متكرر في القالب الخاص بك.

توضح هذه المقالة كيفية إضافة وظائف معرّفة من قِبل المستخدم في قالب Azure Resource Manager (قالب ARM).

حدد الوظيفة

تتطلب وظائفك قيمة مساحة الاسم لتجنب تعارض التسمية مع وظائف القالب. يُظهر المثال التالي دالة تُرجع اسماً فريداً:

"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": "[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
     }
   }
 ]
}

أثناء التوزيع، يتم تمرير المعلمة storageNamePrefix إلى الوظيفة:

  • يعرّف القالب معلمة باسم storageNamePrefix.
  • تستخدم الوظيفة namePrefix لأنه يمكنك فقط استخدام المعلمات المحددة في الوظيفة. لمزيد من المعلومات، راجع القيود.
  • في قسم resources القالب، يستخدم العنصر name الوظيفة ويمرر قيمة storageNamePrefix إلى namePrefixالدالة.

التقييدات

عند تحديد وظيفة المستخدم، هناك بعض القيود:

  • لا يمكن للدالة الوصول إلى المتغيرات.
  • يمكن للوظيفة فقط استخدام المعلمات التي تم تحديدها في الوظيفة. عندما تستخدم وظيفة المعلمات ضمن وظيفة محددة بواسطة المستخدم، فأنت مقيد بمعلمات هذه الوظيفة.
  • لا يمكن للوظيفة استدعاء وظائف أخرى يحددها المستخدم.
  • لا يمكن للدالة استخدام الوظيفة reference أو أي من وظائف list.
  • لا يمكن أن تحتوي معلمات الوظيفة على قيم افتراضية.

الخطوات التالية