Aracılığıyla paylaş


ARM şablonlarındaki değişkenler

Bu makalede, Azure Resource Manager şablonunuzda (ARM şablonu) değişkenleri tanımlama ve kullanma işlemleri açıklanmaktadır. Şablonunuzu basitleştirmek için değişkenleri kullanırsınız. Şablonunuzun tamamında karmaşık ifadeleri yinelemek yerine, karmaşık ifadeyi içeren bir değişken tanımlarsınız. Ardından bu değişkeni şablonunuzun tamamında gerektiği gibi kullanırsınız.

Resource Manager, dağıtım işlemlerini başlatmadan önce değişkenleri çözümler. Şablonda değişkenin kullanıldığı her yerde Resource Manager, değişkeni çözümlenen değerle değiştirir.

İpucu

ARM şablonlarıyla aynı özellikleri sunduğundan ve söz diziminin kullanımı daha kolay olduğundan Bicep önerilir. Daha fazla bilgi edinmek için bkz. değişkenler.

Şablonda 256 değişkenle sınırlısınız. Daha fazla bilgi için bkz. şablon sınırları.

Değişken tanımlama

Değişken tanımlarken, değişken için bir veri türü belirtmezsiniz. Bunun yerine bir değer veya şablon ifadesi sağlayın. Değişken türü çözümlenen değerden çıkarılır. Aşağıdaki örnek bir değişkeni bir dizeye ayarlar:

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

Değişkeni oluşturmak için bir parametreden veya başka bir değişkenden değeri kullanın:

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

Değişken değerini oluşturmak için işlevleri kullanabilirsiniz template .

Aşağıdaki örnek, depolama hesabı adı için bir dize değeri oluşturur. Parametre değeri almak için birkaç template işlev kullanır ve bunu benzersiz bir dizeyle birleştirir:

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

değişken bildiriminde reference işlevini veya işlevlerden herhangi birini list kullanamazsınız. Bu işlevler bir kaynağın çalışma zamanı durumunu alır ve değişkenler çözümlendiğinde dağıtımdan önce yürütülemez.

Değişken kullanma

Aşağıdaki örnekte, bir kaynak özelliği için değişkenin nasıl kullanılacağı gösterilmektedir.

Değişkenin değerine başvurmak için işlevini kullanın variables :

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

Örnek şablon

Aşağıdaki şablon herhangi bir kaynak dağıtmaz. Farklı değişken türlerini bildirmenin bazı yollarını gösterir:

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

Yapılandırma değişkenleri

Bir ortamı yapılandırmak için ilgili değerleri tutan değişkenler tanımlayabilirsiniz. Değişkenini değerlerle bir nesne olarak tanımlarsınız. Aşağıdaki örnekte, test ve prod olmak üzere iki ortam için değerleri tutan bir nesne gösterilmektedir. Dağıtım sırasında şu değerlerden birini geçirin:

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

Sonraki Adımlar