Bagikan melalui


Variabel dalam templat ARM

Artikel ini menjelaskan cara menentukan dan menggunakan variabel di templat Azure Resource Manager (templat ARM) Anda. Anda menggunakan variabel untuk menyederhanakan templat Anda. Daripada mengulangi ekspresi rumit di seluruh templat, Anda menentukan variabel yang berisi ekspresi rumit. Kemudian, Anda menggunakan variabel tersebut sesuai kebutuhan di seluruh templat Anda.

Resource Manager menyelesaikan variabel sebelum memulai operasi penyebaran. Di mana pun variabel digunakan dalam templat, Resource Manager menggantinya dengan nilai yang sudah ditentukan.

Petunjuk / Saran

Bicep direkomendasikan karena menawarkan kemampuan yang sama dengan templat ARM, dan sintaksnya lebih mudah digunakan. Untuk mempelajari lebih lanjut, lihat variabel.

Anda dibatasi hingga 256 variabel dalam templat. Untuk informasi selengkapnya, lihat batas templat.

Tentukan variabel

Saat menentukan variabel, Anda tidak menentukan jenis data untuk variabel tersebut. Sebagai gantinya, berikan nilai atau ekspresi templat. Jenis variabel disimpulkan dari nilai yang diselesaikan. Contoh berikut mengatur variabel ke string:

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

Untuk membuat variabel, gunakan nilai dari parameter atau variabel lain:

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

Anda dapat menggunakan template fungsi untuk membangun nilai variabel.

Contoh berikut membuat nilai string untuk nama akun penyimpanan. Ini menggunakan beberapa template fungsi untuk mendapatkan nilai parameter dan menggabungkannya ke string unik:

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

Anda tidak dapat menggunakan reference fungsi atau fungsi apa pun list dalam deklarasi variabel. Fungsi-fungsi ini mendapatkan status runtime sumber daya dan tidak dapat dijalankan sebelum penyebaran ketika variabel diselesaikan.

Gunakan variabel

Contoh berikut menunjukkan cara menggunakan variabel untuk properti sumber daya.

Untuk mereferensikan nilai untuk variabel, gunakan variables fungsi :

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

Contoh templat

Templat berikut ini tidak menyebarkan sumber daya apa pun. Ini menunjukkan beberapa cara untuk mendeklarasikan berbagai jenis variabel:

{
  "$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')]"
    }
  }
}

Variabel konfigurasi

Anda dapat menentukan variabel yang menyimpan nilai terkait untuk mengonfigurasi lingkungan. Anda menentukan variabel sebagai objek dengan nilai . Contoh berikut menunjukkan objek yang menyimpan nilai untuk dua lingkungan - uji dan prod. Berikan salah satu nilai ini selama penyebaran:

{
  "$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"
    }
  }
}

Langkah selanjutnya