Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak utworzyć więcej niż jedną wartość dla zmiennej w szablonie usługi Azure Resource Manager (szablon arm).
copy Dodając element do sekcji zmiennych szablonu, można dynamicznie ustawić liczbę elementów dla zmiennej podczas wdrażania. Należy również unikać konieczności powtarzania składni szablonu.
Możesz również użyć funkcji kopiowania z zasobami, właściwościami w zasobie i danymi wyjściowymi.
Wskazówka
Zalecamy Bicep , ponieważ oferuje te same możliwości co szablony usługi ARM, a składnia jest łatwiejsza w użyciu. Aby dowiedzieć się więcej, zobacz pętle.
Składnia
Element copy ma następujący format ogólny:
"copy": [
{
"name": "<name-of-loop>",
"count": <number-of-iterations>,
"input": <values-for-the-variable>
}
]
Właściwość name jest dowolną wartością identyfikującą pętlę. Właściwość count określa liczbę iteracji, które mają być potrzebne dla zmiennej.
Właściwość input określa właściwości, które chcesz powtórzyć. Utworzysz tablicę elementów skonstruowanych z wartości właściwości input. Może to być pojedyncza właściwość (na przykład ciąg) lub obiekt z kilkoma właściwościami.
Limity kopiowania
Liczba nie może przekroczyć 800.
Liczba nie może być liczbą ujemną. Może wynosić zero, jeśli wdrożysz szablon przy użyciu nowej wersji narzędzia Azure CLI, programu PowerShell lub interfejsu API REST. W szczególności należy użyć:
- Program Azure PowerShell 2.6 lub nowszy
- Azure CLI w wersji 2.0.74 lub nowszej
- Wersja API REST 2019-05-10 lub nowsza
- Połączone wdrożenia muszą używać interfejsu API w wersji 2019-05-10 lub nowszej dla typu zasobu wdrożenia
Wcześniejsze wersje programu PowerShell, interfejsu wiersza polecenia i interfejsu API REST nie obsługują wartości zero dla liczby.
Iteracja zmiennych
W poniższym przykładzie pokazano, jak utworzyć tablicę wartości ciągu:
{
"$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')]"
}
}
}
Powyższy szablon zwraca tablicę z następującymi wartościami:
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
W następnym przykładzie pokazano, jak utworzyć tablicę obiektów z trzema właściwościami — name, diskSizeGBi diskIndex.
{
"$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')]"
}
}
}
Powyższy przykład zwraca tablicę z następującymi wartościami:
[
{
"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
}
]
Uwaga / Notatka
Iteracja zmiennych obsługuje argument przesunięcia. Przesunięcie musi następować po nazwie iteracji, takiej jak copyIndex('diskNames', 1). Jeśli nie podasz wartości przesunięcia, wartość domyślna to 0 dla pierwszego wystąpienia.
Można również użyć copy elementu w zmiennej. Poniższy przykład tworzy obiekt, który ma tablicę jako jedną z jego wartości.
{
"$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')]"
}
}
}
Powyższy przykład zwraca obiekt z następującymi wartościami:
{
"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
}
]
}
W następnym przykładzie przedstawiono różne sposoby użycia copy z zmiennymi.
{
"$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"
}
}
}
Przykładowe szablony
W poniższych przykładach przedstawiono typowe scenariusze tworzenia więcej niż jednej wartości dla zmiennej.
| Szablon | Opis |
|---|---|
| Kopiowanie zmiennych | Demonstruje różne sposoby iteracji zmiennych. |
| Wiele reguł zabezpieczeń | Wdraża kilka reguł zabezpieczeń w sieciowej grupie zabezpieczeń. Tworzy reguły zabezpieczeń z parametru . Aby uzyskać parametr, zobacz plik parametrów wielu NSG. |
| Kopiuj pamięć ze zmiennymi | Przykład sposobu iterowania po zmiennej i tworzenia wielu kont przechowywania. |
Dalsze kroki
- Aby zapoznać się z samouczkiem, zobacz Samouczek: Tworzenie wielu wystąpień zasobów przy użyciu szablonów ARM.
- Aby uzyskać inne zastosowania elementu copy, zobacz:
- Jeśli chcesz dowiedzieć się o sekcjach szablonu, zobacz Zrozum strukturę i składnię szablonów ARM.
- Aby dowiedzieć się, jak wdrożyć szablon, zobacz Wdrażanie zasobów przy użyciu szablonów usługi ARM i programu Azure PowerShell.