Iteracja właściwości w szablonach usługi ARM
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ć tylko z zasobami najwyższego poziomu, nawet w przypadku stosowania pętli 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.
Napiwek
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
copy
Dodaj element do sekcji resources szablonu, aby ustawić liczbę elementów 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 na podstawie wartości we input
właściwości .
Limity kopiowania
Liczba nie może przekroczyć 800.
Liczba nie może być liczbą ujemną. Wdrożenie szablonu przy użyciu najnowszej wersji interfejsu wiersza polecenia platformy Azure, programu PowerShell lub interfejsu API REST może być zerowe. W szczególności należy użyć:
- Program Azure PowerShell 2.6 lub nowszy
- Interfejs wiersza polecenia platformy Azure w wersji 2.0.74 lub nowszej
- Interfejs API REST w wersji 2019-05-10 lub nowszej
- 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 pochodzić 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 failover 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żna używać iteracji zasobów i właściwości razem. 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 tworzenia więcej niż jednej wartości dla właściwości.
Szablon | opis |
---|---|
Wdrażanie maszyny wirtualnej ze zmienną liczbą dysków danych | Wdraża kilka dysków danych z maszyną wirtualną. |
Następne kroki
- Aby zapoznać się z samouczkiem, zobacz Samouczek: tworzenie wielu wystąpień zasobów przy użyciu szablonów usługi ARM.
- Aby uzyskać informacje o innych zastosowaniach pętli kopiowania, zobacz:
- Jeśli chcesz dowiedzieć się więcej o sekcjach szablonu, zobacz Omówienie struktury i składni szablonów usługi 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.