Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo mostra como criar mais de um valor para uma variável no seu modelo do Azure Resource Manager (modelo ARM). Ao adicionar o copy
elemento à seção de variáveis do seu modelo, você pode definir dinamicamente o número de itens para uma variável durante a implantação. Você também evita ter que repetir a sintaxe do modelo.
Você também pode usar copiar com recursos, propriedades em um recurso e saídas.
Gorjeta
Recomendamos o Bicep porque ele oferece os mesmos recursos que os modelos ARM e a sintaxe é mais fácil de usar. Para saber mais, consulte loops.
Sintaxe
O elemento copy tem o seguinte formato geral:
"copy": [
{
"name": "<name-of-loop>",
"count": <number-of-iterations>,
"input": <values-for-the-variable>
}
]
A name
propriedade é qualquer valor que identifique o loop. A count
propriedade especifica o número de iterações que você deseja para a variável.
A input
propriedade especifica as propriedades que você deseja repetir. Você cria uma matriz de elementos construídos a partir do valor na input
propriedade. Pode ser uma única propriedade (como uma cadeia de caracteres) ou um objeto com várias propriedades.
Limites de cópia
A contagem não pode exceder 800.
A contagem não pode ser um número negativo. Pode ser zero se você implantar o modelo com uma versão recente da CLI do Azure, PowerShell ou API REST. Especificamente, você deve usar:
- Azure PowerShell 2.6 ou posterior
- Azure CLI 2.0.74 ou posterior
- API REST versão 2019-05-10 ou posterior
- As implantações vinculadas devem usar a API versão 2019-05-10 ou posterior para o tipo de recurso de implantação
As versões anteriores do PowerShell, CLI e da API REST não suportam zero para contagem.
Iteração variável
O exemplo a seguir mostra como criar uma matriz de valores de cadeia de caracteres:
{
"$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')]"
}
}
}
O modelo anterior retorna uma matriz com os seguintes valores:
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
O próximo exemplo mostra como criar uma matriz de objetos com três propriedades - name
, diskSizeGB
, e 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')]"
}
}
}
O exemplo anterior retorna uma matriz com os seguintes valores:
[
{
"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
A iteração variável suporta um argumento de deslocamento. O deslocamento deve vir após o nome da iteração, como copyIndex('diskNames', 1)
. Se você não fornecer um valor de deslocamento, o padrão será 0 para a primeira instância.
Você também pode usar o copy
elemento dentro de uma variável. O exemplo a seguir cria um objeto que tem uma matriz como um de seus 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')]"
}
}
}
O exemplo anterior retorna um objeto com os seguintes 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
}
]
}
O próximo exemplo mostra as diferentes maneiras que você pode usar copy
com variáveis.
{
"$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"
}
}
}
Modelos de exemplo
Os exemplos a seguir mostram cenários comuns para criar mais de um valor para uma variável.
Modelo | Description |
---|---|
Copiar variáveis | Demonstra as diferentes maneiras de iterar em variáveis. |
Várias regras de segurança | Implanta várias regras de segurança em um grupo de segurança de rede. Ele constrói as regras de segurança a partir de um parâmetro. Para obter o parâmetro, consulte vários arquivos de parâmetros NSG. |
Armazenamento de cópias com variáveis | Exemplo de como iterar uma variável e criar várias contas de armazenamento. |
Próximos passos
- Para passar por um tutorial, consulte Tutorial: Criar várias instâncias de recursos com modelos ARM.
- Para outros usos do elemento copy, consulte:
- Se você quiser saber mais sobre as seções de um modelo, consulte Compreender a estrutura e a sintaxe dos modelos ARM.
- Para saber como implantar seu modelo, consulte Implantar recursos com modelos ARM e Azure PowerShell.