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


Erőforrás-iteráció ARM-sablonokban

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

A másolási ciklust tulajdonságokkal, változókkal és kimenetekkel is használhatja.

Ha meg kell adnia, hogy egy erőforrás egyáltalán telepítve van-e, tekintse meg a feltételelemet.

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 az erőforrás több példányának üzembe helyezéséhez. Az copy elem általános formátuma a következő:

"copy": {
  "name": "<name-of-loop>",
  "count": <number-of-iterations>,
  "mode": "serial" <or> "parallel",
  "batchSize": <number-to-deploy-serially>
}

A name tulajdonság minden olyan érték, amely azonosítja a hurkot. A count tulajdonság megadja az erőforrástípushoz használni kívánt iterációk számát.

Az és batchSize a mode tulajdonságok segítségével megadhatja, hogy az erőforrások párhuzamosan vagy sorrendben vannak-e üzembe helyezve. Ezeket a tulajdonságokat soros vagy párhuzamos leírásban ismertetjük.

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.

Legyen óvatos a teljes módú üzembe helyezés másolási ciklus használatával. Ha teljes módban újra üzembe helyezi egy erőforráscsoportot, a sablonban a másolási ciklus feloldása után nem megadott erőforrások törlődnek.

Erőforrás-iteráció

Az alábbi példa a paraméterben storageCount megadott tárfiókok számát hozza létre.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "storageCount": {
      "type": "int",
      "defaultValue": 3
    }
  },
  "resources": [
    {
      "copy": {
        "name": "storagecopy",
        "count": "[length(range(0, parameters('storageCount')))]"
      },
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[format('{0}storage{1}', range(0, parameters('storageCount'))[copyIndex()], uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  ]
}

Figyelje meg, hogy az egyes erőforrások neve tartalmazza a copyIndex() függvényt, amely a ciklus aktuális iterációját adja vissza. A copyIndex() nulla alapú. Tehát a következő példa:

"name": "[format('storage{0}', copyIndex())]",

A következő neveket hozza létre:

  • storage0
  • storage1
  • storage2

Az indexérték eltolásához átadhat egy értéket a copyIndex() függvényben. Az iterációk száma továbbra is meg van adva a másolási elemben, de az érték eltolása copyIndex a megadott értékkel történik. Tehát a következő példa:

"name": "[format('storage{0}', copyIndex(1))]",

A következő neveket hozza létre:

  • storage1
  • storage2
  • storage3

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 függvényével length 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élda egy tárfiókot hoz létre a paraméterben megadott nevekhez.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageNames": {
      "type": "array",
      "defaultValue": [
        "contoso",
        "fabrikam",
        "coho"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "copy": {
        "name": "storagecopy",
        "count": "[length(parameters('storageNames'))]"
      },
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[format('{0}{1}', parameters('storageNames')[copyIndex()], uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  ]
}

Ha az üzembe helyezett erőforrások értékeit szeretné visszaadni, használhatja a másolást a kimenetek szakaszban.

Szimbolikus név használata

Szimbolikus név lesz hozzárendelve az erőforrás-másolási hurkokhoz. A hurokindex nulla alapú. Az alábbi példában myStorages[1] az erőforráshurok második erőforrására hivatkozik.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "storageCount": {
      "type": "int",
      "defaultValue": 2
    }
  },
  "resources": {
    "myStorages": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[format('{0}storage{1}', copyIndex(), uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {},
      "copy": {
        "name": "storagecopy",
        "count": "[parameters('storageCount')]"
      }
    }
  },
  "outputs": {
    "storageEndpoint":{
      "type": "object",
      "value": "[reference('myStorages[1]').primaryEndpoints]"
    }
  }
}

Ha az index futásidejű érték, saját maga formázza a hivatkozást. Példa:

"outputs": {
  "storageEndpoint":{
    "type": "object",
    "value": "[reference(format('myStorages[{0}]', variables('runtimeIndex'))).primaryEndpoints]"
  }
}

A szimbolikus nevek a dependsOn tömbökben használhatók. Ha egy szimbolikus név egy másolási ciklushoz tartozik, a ciklusban lévő összes erőforrás függőségként lesz hozzáadva. További információ: A ciklusban lévő erőforrásoktól függ.

Soros vagy párhuzamos

Alapértelmezés szerint a Resource Manager párhuzamosan hozza létre az erőforrásokat. Nem korlátozza a párhuzamosan üzembe helyezett erőforrások számát, kivéve a sablonban lévő 800 erőforrás teljes korlátját. A létrehozásuk sorrendje nem garantált.

Előfordulhat azonban, hogy meg szeretné adni, hogy az erőforrások egymás után legyenek üzembe helyezve. Éles környezet frissítésekor például érdemes lehet a frissítéseket átmeneti állapotba helyezni, hogy egyszerre csak egy bizonyos szám legyen frissítve.

Egy erőforrás egynél több példányának soros üzembe helyezéséhez állítsa be mode a soros és batchSize az egyszerre üzembe helyezendő példányok számát. Soros mód esetén a Resource Manager függőséget hoz létre a ciklus korábbi példányaihoz, így az nem indít el egy köteget, amíg az előző köteg be nem fejeződik.

Az érték batchSize nem haladhatja meg a másolási elem értékét count .

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "copy": {
        "name": "storagecopy",
        "count": 4,
        "mode": "serial",
        "batchSize": 2
      },
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[format('{0}storage{1}', range(0, 4)[copyIndex()], uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  ]
}

A mode tulajdonság a párhuzamos értéket is elfogadja, amely az alapértelmezett érték.

Gyermekerőforrás iterációja

Nem használhat másolási hurkot gyermekerőforráshoz. Ha egy erőforrásnak egynél több olyan példányát szeretné létrehozni, amelyet általában egy másik erőforrásba ágyazottként definiál, akkor ezt az erőforrást legfelső szintű erőforrásként kell létrehoznia. A szülőerőforrással való kapcsolatot a típus- és névtulajdonságokon keresztül határozhatja meg.

Tegyük fel például, hogy egy adathalmazt általában gyermekerőforrásként definiál egy adat-előállítóban.

{
  "resources": [
    {
      "type": "Microsoft.DataFactory/factories",
      "name": "exampleDataFactory",
      ...
      "resources": [
        {
          "type": "datasets",
          "name": "exampleDataSet",
          "dependsOn": [
            "exampleDataFactory"
          ],
          ...
        }
      ]
      ...
    }
  ]
}

Ha több adatkészletet szeretne létrehozni, helyezze át az adat-előállítón kívülre. Az adathalmaznak az adat-előállítóval azonos szinten kell lennie, de továbbra is az adat-előállító gyermekerőforrása. Az adatkészlet és az adat-előállító közötti kapcsolatot a típus- és névtulajdonságok segítségével őrizheti meg. Mivel a típus már nem vonható ki a sablonban elfoglalt pozíciójából, a teljes típust a következő formátumban kell megadnia: {resource-provider-namespace}/{parent-resource-type}/{child-resource-type}.

Ha szülő-gyermek kapcsolatot szeretne létesíteni az adat-előállító egy példányával, adja meg a szülőerőforrás nevét tartalmazó adatkészlet nevét. Használja a következő formátumot: {parent-resource-name}/{child-resource-name}.

Az alábbi példa a megvalósítást mutatja be.

"resources": [
{
  "type": "Microsoft.DataFactory/factories",
  "name": "exampleDataFactory",
  ...
},
{
  "type": "Microsoft.DataFactory/factories/datasets",
  "name": "[format('exampleDataFactory/exampleDataSet{0}', copyIndex())]",
  "dependsOn": [
    "exampleDataFactory"
  ],
  "copy": {
    "name": "datasetcopy",
    "count": "3"
  },
  ...
}]

Példasablonok

Az alábbi példák egy erőforrás vagy tulajdonság egynél több példányának létrehozására vonatkozó gyakori forgatókönyveket mutatnak be.

Sablon Leírás
Tárterület másolása Egynél több tárfiókot helyez üzembe a névben szereplő indexszámmal.
Soros másolási tároló Egyszerre több tárfiókot is üzembe helyez. A név tartalmazza az indexszámot.
Tárterület másolása tömbbel Több tárfiókot helyez üzembe. A név egy tömbből származó értéket tartalmaz.
Erőforráscsoport másolása Több erőforráscsoportot helyez üzembe.

Következő lépések