Tulajdonság iterációja ARM-sablonokban

Ez a cikk bemutatja, hogyan hozhat létre egy tulajdonság egynél több példányát az Azure Resource Manager-sablonban (ARM-sablonban). Ha másolási hurkot ad hozzá egy erőforrás tulajdonságok szakaszához a sablonban, dinamikusan beállíthatja egy tulajdonság elemeinek számát az üzembe helyezés során. A sablonszintaxis megismétlését is elkerülheti.

A másolási hurkot csak legfelső szintű erőforrásokkal használhatja, még akkor is, ha másolási hurkot alkalmaz egy tulajdonságra. A gyermekerőforrás legfelső szintű erőforrásra való módosításáról további információt a Gyermekerőforrás iterációja című témakörben talál.

A másolási hurkot erőforrásokkal, változókkal és kimenetekkel is használhatja.

Tipp

A Bicep használatát javasoljuk, mert ugyanazokat a képességeket kínálja, mint az ARM-sablonok, és a szintaxis használata is egyszerűbb. További információ: hurkok.

Syntax

Adja hozzá az copy elemet a sablon erőforrások szakaszához egy tulajdonság elemszámának beállításához. A másolási elem formátuma a következő:

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

A mezőben nameadja meg a létrehozni kívánt erőforrás-tulajdonság nevét.

A count tulajdonság határozza meg a tulajdonsághoz használni kívánt iterációk számát.

A input tulajdonság határozza meg az megismételni kívánt tulajdonságokat. A tulajdonság értékéből létrehozott elemek tömbje input .

Másolási korlátok

A szám nem haladhatja meg a 800-t.

A szám nem lehet negatív szám. Ez nulla lehet, ha a sablont az Azure CLI, a PowerShell vagy a REST API legújabb verziójával helyezi üzembe. Konkrétan a következőket kell használnia:

  • Azure PowerShell 2.6-os vagy újabb verzió
  • Azure CLI 2.0.74 vagy újabb
  • A REST API 2019-05-10-es vagy újabb verziója
  • A csatolt üzemelő példányoknakaz API 2019-05-10-es vagy újabb verzióját kell használniuk az üzembehelyezési erőforrástípushoz

A PowerShell, a CLI és a REST API korábbi verziói nem támogatják a nullát a számláláshoz.

Tulajdonság iterációja

Az alábbi példa bemutatja, hogyan alkalmazhat másolási hurkot a dataDisks tulajdonságra egy virtuális gépen:

{
  "$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": "2022-11-01",
      ...
      "properties": {
        "storageProfile": {
          ...
          "copy": [
            {
              "name": "dataDisks",
              "count": "[parameters('numberOfDataDisks')]",
              "input": {
                "lun": "[copyIndex('dataDisks')]",
                "createOption": "Empty",
                "diskSizeGB": 1023
              }
            }
          ]
        }
        ...
      }
    }
  ]
}

Figyelje meg, hogy a copyIndex tulajdonság iterációban való használatakor meg kell adnia az iteráció nevét. A tulajdonság-iteráció az eltolás argumentumot is támogatja. Az eltolásnak az iteráció neve után kell lennie, például copyIndex('dataDisks', 1): .

Az üzembe helyezett sablon a következő lesz:

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

A másolási művelet hasznos lehet a tömbök használatakor, mivel a tömb minden elemét végig tudja iterálni. A tömb hossz függvénnyel adja meg az iterációk számát, és copyIndex kérje le az aktuális indexet a tömbben.

Az alábbi példasablon feladatátvételi csoportot hoz létre a tömbként átadott adatbázisokhoz.

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

Az copy elem egy tömb, így több tulajdonságot is megadhat az erőforráshoz.

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

Az erőforrás- és tulajdonság-iterációkat együtt használhatja. Hivatkozzon a tulajdonság iterációjára név alapján.

{
  "type": "Microsoft.Network/virtualNetworks",
  "apiVersion": "2018-04-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')]]"
          }
        }
      }
    ]
  }
}

Példasablonok

Az alábbi példa egy gyakori forgatókönyvet mutat be egy tulajdonság több értékének létrehozására.

Sablon Description
Virtuális gépek üzembe helyezése változó számú adatlemezzel Több adatlemezt helyez üzembe egy virtuális géppel.

Következő lépések