Freigeben über


Eigenschafteniteration in ARM-Vorlagen

In diesem Artikel erfahren Sie, wie Sie mehr als eine Instanz einer Eigenschaft in Ihrer Azure Resource Manager-Vorlage (ARM-Vorlage) erstellen. Durch Hinzufügen einer Kopierschleife zum Eigenschaftenabschnitt einer Ressource in Ihrer Vorlage können Sie die Anzahl der Elemente für eine Eigenschaft während der Bereitstellung dynamisch festlegen. Sie müssen auch keine Vorlagensyntax wiederholen.

Sie können die copy-Schleife nur mit Ressourcen der obersten Ebene verwenden, auch wenn Sie eine copy-Schleife auf eine Eigenschaft anwenden. Weitere Informationen zum Ändern einer untergeordneten Ressource in eine Ressource der obersten Ebene finden Sie unter Iterationen für eine untergeordnete Ressource.

Sie können auch kopierschleifen mit Ressourcen, Variablen 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

Fügen Sie das copy Element zum Ressourcenabschnitt Ihrer Vorlage hinzu, um die Anzahl der Elemente für eine Eigenschaft festzulegen. Das Kopierelement weist das folgende allgemeine Format auf:

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

Geben Sie für name den Namen der Ressourceneigenschaft an, die Sie erstellen möchten.

Die count Eigenschaft gibt die gewünschte Anzahl von Iterationen für die Eigenschaft an.

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.

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.

Iteration von Eigenschaften

Im folgenden Beispiel wird veranschaulicht, wie die copy-Schleife auf die dataDisks-Eigenschaft auf einer VM angewandt wird:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "numberOfDataDisks": {
      "type": "int",
      "minValue": 0,
      "maxValue": 16,
      "defaultValue": 3,
      "metadata": {
        "description": "The number of dataDisks to create."
      }
    },
    ...
  },
  "resources": [
    {
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2025-04-01",
      ...
      "properties": {
        "storageProfile": {
          ...
          "copy": [
            {
              "name": "dataDisks",
              "count": "[parameters('numberOfDataDisks')]",
              "input": {
                "lun": "[copyIndex('dataDisks')]",
                "createOption": "Empty",
                "diskSizeGB": 1023
              }
            }
          ]
        }
        ...
      }
    }
  ]
}

Beachten Sie, dass Sie beim Verwenden von copyIndex innerhalb einer Eigenschaftsiteration den Namen der Iteration angeben müssen. Von der Eigenschafteniteration wird auch ein Offsetargument unterstützt. Der Offset muss nach dem Namen der Iteration angegeben werden, z. B. mit copyIndex('dataDisks', 1).

Die bereitgestellte Vorlage sieht wie folgt aus:

{
  "name": "examplevm",
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2025-04-01",
  "properties": {
    "storageProfile": {
      "dataDisks": [
        {
          "lun": 0,
          "createOption": "Empty",
          "diskSizeGB": 1023
        },
        {
          "lun": 1,
          "createOption": "Empty",
          "diskSizeGB": 1023
        },
        {
          "lun": 2,
          "createOption": "Empty",
          "diskSizeGB": 1023
        }
      ],
      ...

Der Kopiervorgang ist beim Arbeiten mit Arrays hilfreich, da Sie jedes Element im Array durchlaufen können. Verwenden Sie die Längenfunktion im Array, um die Anzahl für Iterationen anzugeben und copyIndex den aktuellen Index im Array abzurufen.

Die folgende Beispielvorlage erstellt eine Failovergruppe für Datenbanken, die als Array übergeben werden.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "primaryServerName": {
      "type": "string"
    },
    "secondaryServerName": {
      "type": "string"
    },
    "databaseNames": {
      "type": "array",
      "defaultValue": [
        "mydb1",
        "mydb2",
        "mydb3"
      ]
    }
  },
  "variables": {
    "failoverName": "[format('{0}/{1}failovergroups', parameters('primaryServerName'), parameters('primaryServerName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Sql/servers/failoverGroups",
      "apiVersion": "2015-05-01-preview",
      "name": "[variables('failoverName')]",
      "properties": {
        "readWriteEndpoint": {
          "failoverPolicy": "Automatic",
          "failoverWithDataLossGracePeriodMinutes": 60
        },
        "readOnlyEndpoint": {
          "failoverPolicy": "Disabled"
        },
        "partnerServers": [
          {
            "id": "[resourceId('Microsoft.Sql/servers', parameters('secondaryServerName'))]"
          }
        ],
        "copy": [
          {
            "name": "databases",
            "count": "[length(parameters('databaseNames'))]",
            "input": "[resourceId('Microsoft.Sql/servers/databases', parameters('primaryServerName'), parameters('databaseNames')[copyIndex('databases')])]"
          }
        ]
      }
    }
  ],
  "outputs": {
  }
}

Das copy Element ist ein Array, sodass Sie mehrere Eigenschaften für die Ressource angeben können.

{
  "type": "Microsoft.Network/loadBalancers",
  "apiVersion": "2025-01-01",
  "name": "exampleLB",
  "properties": {
    "copy": [
      {
        "name": "loadBalancingRules",
        "count": "[length(parameters('loadBalancingRules'))]",
        "input": {
          ...
        }
      },
      {
        "name": "probes",
        "count": "[length(parameters('loadBalancingRules'))]",
        "input": {
          ...
        }
      }
    ]
  }
}

Sie können die Ressourcen- und die Eigenschafteniterationen zusammen verwenden. Verweisen Sie anhand des Namens auf die Eigenschafteniteration.

{
  "type": "Microsoft.Network/virtualNetworks",
  "apiVersion": "2025-01-01",
  "name": "[format('{0}{1}', parameters('vnetname'), copyIndex())]",
  "copy":{
    "count": 2,
    "name": "vnetloop"
  },
  "location": "[resourceGroup().location]",
  "properties": {
    "addressSpace": {
      "addressPrefixes": [
        "[parameters('addressPrefix')]"
      ]
    },
    "copy": [
      {
        "name": "subnets",
        "count": 2,
        "input": {
          "name": "[format('subnet-{0}', copyIndex('subnets'))]",
          "properties": {
            "addressPrefix": "[variables('subnetAddressPrefix')[copyIndex('subnets')]]"
          }
        }
      }
    ]
  }
}

Beispielvorlagen

Das folgende Beispiel zeigt ein gängiges Szenario für die Erstellung mehrerer Werte für eine Eigenschaft:

Schablone BESCHREIBUNG
VM-Bereitstellung mit einer variablen Anzahl von Datenträgern Stellt mehrere Datenträger mit einem virtuellen Computer bereit.

Nächste Schritte