المتغيرات في قوالب ARM

توضح هذه المقالة كيفية تعريف المتغيرات واستخدامها في قالب Azure Resource Manager (قالب ARM). يمكنك استخدام المتغيرات لتبسيط القالب الخاص بك. بدلاً من تكرار التعبيرات المعقدة في القالب الخاص بك، يمكنك تحديد متغير يحتوي على تعبير معقد. بعد ذلك، يمكنك استخدام هذا المتغير حسب الحاجة في القالب الخاص بك.

يحل Resource Manager المتغيرات قبل بدء عمليات التوزيع. أينما يتم استخدام المتغير في القالب، تقوم إدارة الموارد باستبداله بالقيمة التي تم حلها.

تلميح

نوصي باستخدام Bicep لأنها تقدم نفس الإمكانات التي توفرها نماذج ARM ولأن البنية أسهل في الاستخدام. لمعرفة المزيد، راجع المتغيرات.

تقتصر على 256 متغيرا في القالب. لمزيد من المعلومات، راجع حدود القالب.

تحديد المتغير

عند تعريف متغير، لا تحدد data type للمتغير. بدلاً من ذلك، وفِّر قيمة أو تعبير قالب. يُستنتج نوع المتغير من القيمة المحلولة. المثال التالي يعين متغيراً إلى سلسلة.

"variables": {
  "stringVar": "example value"
},

لإنشاء المتغير، يمكنك استخدام القيمة من معلمة أو متغير آخر.

"parameters": {
  "inputValue": {
    "defaultValue": "deployment parameter",
    "type": "string"
  }
},
"variables": {
  "stringVar": "myVariable",
  "concatToVar": "[concat(variables('stringVar'), '-addtovar') ]",
  "concatToParam": "[concat(parameters('inputValue'), '-addtoparam')]"
}

يمكنك استخدام template functions لتكوين القيمة المتغيرة.

يقوم المثال التالي بإنشاء قيمة السلسلة لاسم حساب موقع التخزين. يستخدم العديد من وظائف القالب للحصول على قيمة معلمة، ويربطها بسلسلة فريدة.

"variables": {
  "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
},

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

استخدام المتغير

يوضح المثال التالي كيفية استخدام المتغير لخاصية مورد.

للإشارة إلى قيمة المتغير، استخدم الدالة variables.

"variables": {
  "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "name": "[variables('storageName')]",
    ...
  }
]

قالب المثال

النموذج التالي لا يوزع أي موارد. يوضح بعض طرق الإعلان عن المتغيرات من أنواع مختلفة.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "inputValue": {
      "defaultValue": "deployment parameter",
      "type": "string"
    }
  },
  "variables": {
    "stringVar": "myVariable",
    "concatToVar": "[concat(variables('stringVar'), '-addtovar') ]",
    "concatToParam": "[concat(parameters('inputValue'), '-addtoparam')]",
    "arrayVar": [
      1,
      2,
      3,
      4
    ],
    "objectVar": {
      "property1": "value1",
      "property2": "value2"
    },
    "copyWithinVar": {
      "copy": [
        {
          "name": "disks",
          "count": 5,
          "input": {
            "name": "[concat('myDataDisk', copyIndex('disks', 1))]",
            "diskSizeGB": "1",
            "diskIndex": "[copyIndex('disks')]"
          }
        },
        {
          "name": "diskNames",
          "count": 5,
          "input": "[concat('myDataDisk', copyIndex('diskNames', 1))]"
        }
      ]
    },
    "copy": [
      {
        "name": "topLevelCopy1",
        "count": 5,
        "input": {
          "name": "[concat('oneDataDisk', copyIndex('topLevelCopy1', 1))]",
          "diskSizeGB": "1",
          "diskIndex": "[copyIndex('topLevelCopy1')]"
        }
      },
      {
        "name": "topLevelCopy2",
        "count": 3,
        "input": {
          "name": "[concat('twoDataDisk', copyIndex('topLevelCopy2', 1))]",
          "diskSizeGB": "1",
          "diskIndex": "[copyIndex('topLevelCopy2')]"
        }
      },
      {
        "name": "topLevelCopy3",
        "count": 4,
        "input": "[concat('stringValue', copyIndex('topLevelCopy3'))]"
      },
      {
        "name": "topLevelCopy4",
        "count": 4,
        "input": "[copyIndex('topLevelCopy4')]"
      }
    ]
  },
  "resources": [],
  "outputs": {
    "stringOutput": {
      "type": "string",
      "value": "[variables('stringVar')]"
    },
    "concatToVariableOutput": {
      "type": "string",
      "value": "[variables('concatToVar')]"
    },
    "concatToParameterOutput": {
      "type": "string",
      "value": "[variables('concatToParam')]"
    },
    "arrayOutput": {
      "type": "array",
      "value": "[variables('arrayVar')]"
    },
    "arrayElementOutput": {
      "type": "int",
      "value": "[variables('arrayVar')[0]]"
    },
    "objectOutput": {
      "type": "object",
      "value": "[variables('objectVar')]"
    },
    "copyWithinVariableOutput": {
      "type": "object",
      "value": "[variables('copyWithinVar')]"
    },
    "topLevelCopyOutput1": {
      "type": "array",
      "value": "[variables('topLevelCopy1')]"
    },
    "topLevelCopyOutput2": {
      "type": "array",
      "value": "[variables('topLevelCopy2')]"
    },
    "topLevelCopyOutput3": {
      "type": "array",
      "value": "[variables('topLevelCopy3')]"
    },
    "topLevelCopyOutput4": {
      "type": "array",
      "value": "[variables('topLevelCopy4')]"
    }
  }
}

متغيرات التكوين

يمكنك تحديد المتغيرات التي تحتوي على قيم ذات صلة لتكوين بيئة. يمكنك تحديد المتغير ككائن مع القيم. يوضح المثال التالي كائناً يحمل قيماً لبيئتين - اختبار وإنتاج. قم بتمرير إحدى هذه القيم أثناء التوزيع.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "environmentName": {
      "type": "string",
      "allowedValues": [
        "test",
        "prod"
      ],
      "metadata": {
        "description": "Specify either test or prod for configuration values."
      }
    }
  },
  "variables": {
    "environmentSettings": {
      "test": {
        "instanceSize": "Small",
        "instanceCount": 1
      },
      "prod": {
        "instanceSize": "Large",
        "instanceCount": 4
      }
    }
  },
  "resources": [],
  "outputs": {
    "instanceSize": {
      "value": "[variables('environmentSettings')[parameters('environmentName')].instanceSize]",
      "type": "string"
    },
    "instanceCount": {
      "value": "[variables('environmentSettings')[parameters('environmentName')].instanceCount]",
      "type": "int"
    }
  }
}

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