ARM 範本中的變數反覆運算
本文說明如何在 Azure Resource Manager 範本 (ARM 範本) 中為一個變數建立多個值。 您可以藉由將 copy
元素新增至範本的變數區段,在部署期間動態設定變數的項目數。 您也可以避免重複範本語法。
語法
copy 元素的一般格式如下:
"copy": [
{
"name": "<name-of-loop>",
"count": <number-of-iterations>,
"input": <values-for-the-variable>
}
]
name
屬性是可識別迴圈的任何值。 count
屬性可指定您希望變數反覆運算的次數。
input
屬性可指定您想要重複的屬性。 您可以建立一個由 input
屬性中的值建構的元素陣列。 其可以是單一屬性 (例如字串),或是具有數個屬性的物件。
複製限制
次數不能超過 800。
次數不可為負數。 如果您使用最新版的 Azure CLI、PowerShell 或 REST API 來部署範本,則其可為零。 具體而言,您必須使用:
- Azure PowerShell 2.6 或更新版本
- Azure CLI 2.0.74 或更新版本
- Rest API 2019-05-10 版或更新版本
- 針對部署資源類型,連結的部署必須使用 API 2019-05-10 版或更新版本
舊版 PowerShell、CLI 和 REST API 不支援次數為零。
變數反覆項目
下列範例示範如何建立字串值的陣列:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"itemCount": {
"type": "int",
"defaultValue": 5
}
},
"variables": {
"copy": [
{
"name": "stringArray",
"count": "[parameters('itemCount')]",
"input": "[concat('item', copyIndex('stringArray', 1))]"
}
]
},
"resources": [],
"outputs": {
"arrayResult": {
"type": "array",
"value": "[variables('stringArray')]"
}
}
}
上述範本會傳回具有下列值的陣列:
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
下一個範例示範如何建立具有三個屬性的物件陣列:name
、diskSizeGB
和 diskIndex
。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"itemCount": {
"type": "int",
"defaultValue": 5
}
},
"variables": {
"copy": [
{
"name": "objectArray",
"count": "[parameters('itemCount')]",
"input": {
"name": "[concat('myDataDisk', copyIndex('objectArray', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('objectArray')]"
}
}
]
},
"resources": [],
"outputs": {
"arrayResult": {
"type": "array",
"value": "[variables('objectArray')]"
}
}
}
上述範例會傳回具有下列值的陣列:
[
{
"name": "myDataDisk1",
"diskSizeGB": "1",
"diskIndex": 0
},
{
"name": "myDataDisk2",
"diskSizeGB": "1",
"diskIndex": 1
},
{
"name": "myDataDisk3",
"diskSizeGB": "1",
"diskIndex": 2
},
{
"name": "myDataDisk4",
"diskSizeGB": "1",
"diskIndex": 3
},
{
"name": "myDataDisk5",
"diskSizeGB": "1",
"diskIndex": 4
}
]
注意
變數反覆運算支援位移引數。 位移必須在反覆運算的名稱之後,例如 copyIndex('diskNames', 1)
。 如果您未提供位移值,會將第一個執行個體預設為 0。
您也可以在變數內使用 copy
元素。 下列範例會建立一個物件,其中一個值為陣列。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"itemCount": {
"type": "int",
"defaultValue": 5
}
},
"variables": {
"topLevelObject": {
"sampleProperty": "sampleValue",
"copy": [
{
"name": "disks",
"count": "[parameters('itemCount')]",
"input": {
"name": "[concat('myDataDisk', copyIndex('disks', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('disks')]"
}
}
]
}
},
"resources": [],
"outputs": {
"objectResult": {
"type": "object",
"value": "[variables('topLevelObject')]"
}
}
}
上述範例會傳回具有下列值的物件:
{
"sampleProperty": "sampleValue",
"disks": [
{
"name": "myDataDisk1",
"diskSizeGB": "1",
"diskIndex": 0
},
{
"name": "myDataDisk2",
"diskSizeGB": "1",
"diskIndex": 1
},
{
"name": "myDataDisk3",
"diskSizeGB": "1",
"diskIndex": 2
},
{
"name": "myDataDisk4",
"diskSizeGB": "1",
"diskIndex": 3
},
{
"name": "myDataDisk5",
"diskSizeGB": "1",
"diskIndex": 4
}
]
}
下一個範例示範搭配變數使用 copy
的不同方式。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {
"disk-array-on-object": {
"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": "top-level-object-array",
"count": 5,
"input": {
"name": "[concat('myDataDisk', copyIndex('top-level-object-array', 1))]",
"diskSizeGB": "1",
"diskIndex": "[copyIndex('top-level-object-array')]"
}
},
{
"name": "top-level-string-array",
"count": 5,
"input": "[concat('myDataDisk', copyIndex('top-level-string-array', 1))]"
},
{
"name": "top-level-integer-array",
"count": 5,
"input": "[copyIndex('top-level-integer-array')]"
}
]
},
"resources": [],
"outputs": {
"exampleObject": {
"value": "[variables('disk-array-on-object')]",
"type": "object"
},
"exampleArrayOnObject": {
"value": "[variables('disk-array-on-object').disks]",
"type" : "array"
},
"exampleObjectArray": {
"value": "[variables('top-level-object-array')]",
"type" : "array"
},
"exampleStringArray": {
"value": "[variables('top-level-string-array')]",
"type" : "array"
},
"exampleIntegerArray": {
"value": "[variables('top-level-integer-array')]",
"type" : "array"
}
}
}
範本的範例
下列範例示範為變數建立多個值的常見案例。
範本 | 描述 |
---|---|
複製變數 | 示範逐一查看變數的不同方式。 |
多個安全性規則 | 將數個安全性規則部署至網路安全性群組。 從參數建構安全性規則。 如需參數,請參閱多個 NSG 參數檔案。 |
使用變數複製儲存體 | 如何反覆運算一個變數及建立多個儲存體帳戶的範例。 |
下一步
- 若要進行教學課程,請參閱教學課程:使用 ARM 範本建立多個資源執行個體。
- 如需 copy 元素的其他用途,請參閱:
- 如果您想要瞭解範本的區段,請參閱瞭解 ARM 範本的結構和語法。
- 若要瞭解如何部署範本,請參閱使用 ARM 範本和 Azure PowerShell 部署資源。