Megosztás a következőn keresztül:


Tulajdonság iterációja ARM-sablonokban

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

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

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

Tipp.

A Bicep használatát javasoljuk, mert ugyanazokkal a képességekkel rendelkezik, mint az ARM-sablonok, és a szintaxis használata egyszerűbb. További információkért tekintse meg a hurkokat.

Syntax

Adja hozzá az copy elemet a sablon erőforrások szakaszához a tulajdonság elemeinek szá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>
  }
]

Adja namemeg a létrehozni kívánt erőforrástulajdonság nevét.

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

A input tulajdonság megadja az ismétlődni kívánt tulajdonságokat. A tulajdonság értékéből input létrehozott elemekből álló tömböt hozhat létre.

Másolási korlátok

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

A szám nem lehet negatív szám. Nulla is lehet, ha a sablont az Azure CLI, a PowerShell vagy a REST API legújabb verziójával telepíti. Konkrétan a következőt kell használnia:

  • Azure PowerShell 2.6 vagy újabb
  • Azure CLI 2.0.74 vagy újabb
  • A REST API 2019-05-10-es vagy újabb verziója
  • A csatolt üzemelő példányoknak az 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 egy dataDisks virtuális gép tulajdonságára:

{
  "$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ón belüli használatakor meg kell adnia az iteráció nevét. A tulajdonság iterációja egy eltolás argumentumot is támogat. Az eltolásnak az iteráció neve után kell érkeznie, 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én végigfuttathatja azokat. A tömb hosszfüggvényével adja meg az iterációk számát, és copyIndex kérje le a tömb aktuális indexét.

Az alábbi példasablon egy 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ó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 olyan gyakori forgatókönyvet mutat be, amely egynél több értéket hoz létre egy tulajdonsághoz.

Sablon Leírás
Virtuális gép üzembe helyezése változó számú adatlemezzel Több adatlemezt helyez üzembe egy virtuális géppel.

Következő lépések