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 saída em seu modelo do Azure Resource Manager (modelo ARM). Ao adicionar o loop de cópia à seção de saídas do modelo, você pode retornar dinamicamente vários itens durante a implantação.
Você também pode usar o loop de cópia com recursos, propriedades em um recurso e variáveis.
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
Adicione o copy
elemento à seção de saída do seu modelo para retornar vários itens. O elemento copy tem o seguinte formato geral:
"copy": {
"count": <number-of-iterations>,
"input": <values-for-the-output>
}
A count
propriedade especifica o número de iterações que você deseja para o valor de saída.
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 de saídas
O exemplo a seguir cria um número variável de contas de armazenamento e retorna um ponto de extremidade para cada conta de armazenamento:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageCount": {
"type": "int",
"defaultValue": 2
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"baseName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"copy": {
"name": "storagecopy",
"count": "[parameters('storageCount')]"
},
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[format('{0}{1}', copyIndex(), variables('baseName'))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
}
],
"outputs": {
"storageEndpoints": {
"type": "array",
"copy": {
"count": "[parameters('storageCount')]",
"input": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
}
}
}
}
O modelo anterior retorna uma matriz com os seguintes valores:
[
"https://0storagecfrbqnnmpeudi.blob.core.windows.net/",
"https://1storagecfrbqnnmpeudi.blob.core.windows.net/"
]
O próximo exemplo retorna três propriedades das novas contas de armazenamento.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageCount": {
"type": "int",
"defaultValue": 2
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"baseName": "[format('storage{0}', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"copy": {
"name": "storagecopy",
"count": "[length(range(0, parameters('storageCount')))]"
},
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[format('{0}{1}', range(0, parameters('storageCount'))[copyIndex()], variables('baseName'))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
}
],
"outputs": {
"storageInfo": {
"type": "array",
"copy": {
"count": "[length(range(0, parameters('storageCount')))]",
"input": {
"id": "[resourceId('Microsoft.Storage/storageAccounts', format('{0}{1}', copyIndex(), variables('baseName')))]",
"blobEndpoint": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).primaryEndpoints.blob]",
"status": "[reference(format('{0}{1}', copyIndex(), variables('baseName'))).statusOfPrimary]"
}
}
}
}
}
O exemplo anterior retorna uma matriz com os seguintes valores:
[
{
"id": "/subscriptions/00000000/resourceGroups/demoGroup/providers/Microsoft.Storage/storageAccounts/0storagecfrbqnnmpeudi",
"blobEndpoint": "https://0storagecfrbqnnmpeudi.blob.core.windows.net/",
"status": "available"
},
{
"id": "/subscriptions/00000000/resourceGroups/demoGroup/providers/Microsoft.Storage/storageAccounts/1storagecfrbqnnmpeudi",
"blobEndpoint": "https://1storagecfrbqnnmpeudi.blob.core.windows.net/",
"status": "available"
}
]
Próximos passos
- Para passar por um tutorial, consulte Tutorial: Criar várias instâncias de recursos com modelos ARM.
- Para outros usos do loop de cópia, 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.