Freigeben über


Variableniteration in ARM-Vorlagen

In diesem Artikel wird erläutert, wie Sie mehrere Werte für eine Variable in Ihrer Azure Resource Manager-Vorlage (ARM-Vorlage) erstellen. Durch Hinzufügen des copy Elements zum Variablenabschnitt Ihrer Vorlage können Sie die Anzahl der Elemente für eine Variable während der Bereitstellung dynamisch festlegen. Sie müssen auch keine Vorlagensyntax wiederholen.

Sie können auch Kopierfunktionen mit Ressourcen, Eigenschaften einer Ressource und Ausgaben verwenden.

Tipp

Wir empfehlen Bicep, weil es dieselben Funktionen wie ARM-Vorlagen bietet und die Syntax einfacher zu verwenden ist. Weitere Informationen finden Sie unter Schleifen.

Syntax

Das Kopierelement weist das folgende allgemeine Format auf:

"copy": [
  {
    "name": "<name-of-loop>",
    "count": <number-of-iterations>,
    "input": <values-for-the-variable>
  }
]

Die name Eigenschaft ist ein beliebiger Wert, der die Schleife identifiziert. Die count Eigenschaft gibt die Anzahl der Iterationen an, die für die Variable benötigt werden sollen.

Die input Eigenschaft gibt die Eigenschaften an, die Sie wiederholen möchten. Sie erstellen ein Array von Elementen, die aus dem Wert in der input Eigenschaft erstellt wurden. Dabei kann es sich um eine einzelne Eigenschaft (z. B. eine Zeichenfolge) oder ein Objekt mit mehreren Eigenschaften handeln.

Kopiergrenzwerte

Die Anzahl darf 800 nicht überschreiten.

Die Anzahl kann keine negative Zahl sein. Dies kann null sein, wenn Sie die Vorlage mit einer aktuellen Version von Azure CLI, PowerShell oder REST-API bereitstellen. Insbesondere müssen Sie Folgendes verwenden:

  • Azure PowerShell 2.6 oder höher
  • Azure CLI 2.0.74 oder höher
  • REST-API Version 2019-05-10 oder höher
  • Verknüpfte Bereitstellungen müssen API-Version 2019-05-10 oder höher für den Bereitstellungsressourcentyp verwenden.

Frühere Versionen von PowerShell, CLI und der REST-API unterstützen keine Null für die Anzahl.

Variableniteration

Das folgende Beispiel zeigt, wie Sie ein Array mit Zeichenfolgenwerten erstellen:

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

Die vorangehende Vorlage gibt ein Array mit den folgenden Werten zurück:

[
  "item1",
  "item2",
  "item3",
  "item4",
  "item5"
]

Das nächste Beispiel zeigt, wie ein Array von Objekten mit drei Merkmalen - name, diskSizeGB, und diskIndex erstellt wird.

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

Im vorherigen Beispiel wird ein Array mit den folgenden Werten zurückgegeben:

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

Hinweis

Variable Iteration unterstützt ein Offset-Argument. Der Offset muss nach dem Namen der Iteration angegeben werden, z. B. mit copyIndex('diskNames', 1). Wenn Sie keinen Offsetwert angeben, wird für die erste Instanz standardmäßig 0 festgelegt.

Sie können das copy Element auch innerhalb einer Variablen verwenden. Im folgenden Beispiel wird ein Objekt erstellt, das ein Array als einen seiner Werte aufweist.

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

Im vorherigen Beispiel wird ein Objekt mit den folgenden Werten zurückgegeben:

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

Das nächste Beispiel zeigt die verschiedenen Möglichkeiten zur Verwendung copy mit Variablen.

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

Beispielvorlagen

Die folgenden Beispiele zeigen allgemeine Szenarien zum Erstellen von mehr als einem Wert für eine Variable.

Schablone BESCHREIBUNG
Kopieren von Variablen Veranschaulicht die verschiedenen Möglichkeiten zur Iteration über Variablen.
Mehrere Sicherheitsregeln Stellt mehrere Sicherheitsregeln für eine Netzwerksicherheitsgruppe bereit. Sie erstellt die Sicherheitsregeln aus einem Parameter. Informationen zum Parameter finden Sie in der Datei mit mehreren NSG-Parametern.
Kopieren des Speichers mit Variablen Beispiel, wie man eine Variable iteriert und mehrere Speicherkonten erstellt.

Nächste Schritte