Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se muestra cómo crear más de un valor para una variable en la plantilla de Azure Resource Manager (plantilla de ARM). Al agregar el copy
elemento a la sección variables de la plantilla, puede establecer dinámicamente el número de elementos de una variable durante la implementación. También se evita tener que repetir la sintaxis de la plantilla.
También puede utilizar el elemento copy con recursos, propiedades de un recurso y salidas.
Sugerencia
Se recomienda Bicep porque ofrece las mismas funcionalidades que las plantillas de ARM y la sintaxis es más fácil de usar. Para obtener más información, consulte bucles.
Sintaxis
El elemento copy tiene el siguiente formato general:
"copy": [
{
"name": "<name-of-loop>",
"count": <number-of-iterations>,
"input": <values-for-the-variable>
}
]
La name
propiedad es cualquier valor que identifica el bucle. La count
propiedad especifica el número de iteraciones que desea para la variable.
La input
propiedad especifica las propiedades que desea repetir. Se crea una matriz de elementos construidos a partir del valor de la input
propiedad . Puede ser una sola propiedad (como una cadena) o un objeto con varias propiedades.
Límites de copia
El recuento no puede superar los 800.
El recuento no puede ser un número negativo. Puede ser cero si implementa la plantilla con una versión reciente de la CLI de Azure, PowerShell o la API REST. Específicamente, debe utilizar:
- Azure PowerShell 2.6 o posterior
- Azure CLI 2.0.74 o posterior
- API REST versión 2019-05-10 o posterior
- Las implementaciones vinculadas deben usar la versión de API 2019-05-10 o posterior para el tipo de recurso de implementación.
Las versiones anteriores de PowerShell, la CLI y la API REST no admiten un recuento de cero.
Iteración de variables
En el ejemplo siguiente se muestra cómo crear una matriz de valores de cadena:
{
"$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')]"
}
}
}
La plantilla anterior devuelve una matriz con los valores siguientes:
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
En el ejemplo siguiente se muestra cómo crear una matriz de objetos con tres propiedades: name
, diskSizeGB
y 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')]"
}
}
}
En el ejemplo anterior se devuelve una matriz con los valores siguientes:
[
{
"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
}
]
Nota:
La iteración de variables admite un argumento offset. El desplazamiento debe aparecer después del nombre de la iteración, por ejemplo, copyIndex('diskNames', 1)
. Si no proporciona un valor de desplazamiento, este se establece en 0 de forma predeterminada en la primera instancia.
También puede usar el copy
elemento dentro de una variable. En el ejemplo siguiente se crea un objeto que tiene una matriz como uno de sus valores.
{
"$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')]"
}
}
}
En el ejemplo anterior se devuelve un objeto con los siguientes valores:
{
"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
}
]
}
En el ejemplo siguiente se muestran las distintas formas de usar copy
con variables.
{
"$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"
}
}
}
Plantillas de ejemplo
En los ejemplos siguientes se muestran escenarios comunes para crear más de un valor para una variable.
Plantilla | Descripción |
---|---|
Copiar variables | Muestra las diferentes maneras de efectuar una iteración en las variables. |
Varias reglas de seguridad | Implementa varias reglas de seguridad en un grupo de seguridad de red. Construye las reglas de seguridad a partir de un parámetro . Para el parámetro, consulte el archivo de parámetros múltiples de NSG. |
Copiar almacenamiento con variables | Ejemplo de cómo iterar una variable y crear varias cuentas de almacenamiento. |
Pasos siguientes
- Para ver un tutorial, consulte Tutorial: Creación de varias instancias de recursos con plantillas de ARM.
- Para otros usos del elemento copy, consulte:
- Si desea obtener información sobre las secciones de una plantilla, consulte Descripción de la estructura y la sintaxis de las plantillas de ARM.
- Para obtener información sobre cómo implementar la plantilla, consulte Implementación de recursos con plantillas de ARM y Azure PowerShell.