Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak utworzyć więcej niż jedno wystąpienie właściwości w szablonie usługi Azure Resource Manager (szablon arm). Dodając pętlę kopiowania do sekcji właściwości zasobu w szablonie, można dynamicznie ustawić liczbę elementów dla właściwości podczas wdrażania. Należy również unikać konieczności powtarzania składni szablonu.
Pętlę kopiowania można używać wyłącznie z zasobami najwyższego poziomu, nawet gdy stosuje się pętlę kopiowania do właściwości. Aby dowiedzieć się więcej o zmianie zasobu podrzędnego na zasób najwyższego poziomu, zobacz Iteracja zasobu podrzędnego.
Możesz również użyć pętli kopiowania z zasobami, zmiennymi i danymi wyjściowymi.
Wskazówka
Zalecamy Bicep, ponieważ oferuje te same możliwości co szablony ARM, a składnia jest łatwiejsza do użycia. Aby dowiedzieć się więcej, zobacz pętle.
Składnia
Dodaj element copy
do sekcji zasobów szablonu, aby ustawić liczbę pozycji dla właściwości. Element copy ma następujący format ogólny:
"copy": [
{
"name": "<name-of-property>",
"count": <number-of-iterations>,
"input": <values-for-the-property>
}
]
W polu name
podaj nazwę właściwości zasobu, którą chcesz utworzyć.
Właściwość count
określa liczbę iteracji, które chcesz wykonać dla właściwości.
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
.
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 właściwości
W poniższym przykładzie pokazano, jak zastosować pętlę kopiowania do dataDisks
właściwości na maszynie wirtualnej:
{
"$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
}
}
]
}
...
}
}
]
}
Zwróć uwagę, że w przypadku korzystania z funkcji copyIndex wewnątrz iteracji właściwości należy podać nazwę iteracji. Iteracja właściwości obsługuje również argument przesunięcia. Przesunięcie musi następować po nazwie iteracji, takiej jak copyIndex('dataDisks', 1)
.
Wdrożony szablon staje się:
{
"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
}
],
...
Operacja kopiowania jest przydatna podczas pracy z tablicami, ponieważ można iterować poszczególne elementy w tablicy. Użyj funkcji length w tablicy, aby określić liczbę iteracji i copyIndex
pobrać bieżący indeks w tablicy.
Poniższy przykładowy szablon tworzy grupę trybu awaryjnego dla baz danych, które są przekazywane jako tablica.
{
"$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": {
}
}
Element copy
jest tablicą, dzięki czemu można określić więcej niż jedną właściwość zasobu.
{
"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": {
...
}
}
]
}
}
Możesz używać iteracji zasobów i właściwości jednocześnie. Odwołuj się do iteracji właściwości według nazwy.
{
"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')]]"
}
}
}
]
}
}
Przykładowe szablony
W poniższym przykładzie przedstawiono typowy scenariusz utworzenia więcej niż jednej wartości właściwości.
Szablon | Opis |
---|---|
Wdrażanie maszyny wirtualnej ze zmienną liczbą dysków danych | Wdraża kilka dysków danych razem z maszyną wirtualną. |
Dalsze kroki
- Aby zapoznać się z samouczkiem, zobacz Samouczek: Tworzenie wielu wystąpień zasobów przy użyciu szablonów ARM.
- Aby uzyskać informacje o innych zastosowaniach pętli kopiowania, 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.