Implantação condicional em modelos do ARM
Às vezes você precisa implantar condicionalmente um recurso em um modelo do ARM (Azure Resource Manager). Use o elemento condition
para especificar se o recurso foi implantado. O valor da condição é resolvido como true ou false. Quando o valor for true, o recurso será criado. Quando o valor for false, o recurso não será criado. O valor só pode ser aplicado para o recurso inteiro.
Observação
A implantação condicional não é propagada para os recursos filhos. Para implantar condicionalmente um recurso e seus recursos filhos, aplique a mesma condição a cada tipo de recurso.
Dica
Recomendamos o Bicep porque ele oferece as mesmas funcionalidades que os modelos do ARM e a sintaxe é mais fácil de usar. Para saber mais, confira implantações condicionais.
Condição de implantação
Você pode transmitir um valor de parâmetro que indica se um recurso foi implantado. O exemplo a seguir implanta condicionalmente uma zona DNS.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"deployZone": {
"type": "bool"
}
},
"functions": [],
"resources": [
{
"condition": "[parameters('deployZone')]",
"type": "Microsoft.Network/dnsZones",
"apiVersion": "2018-05-01",
"name": "myZone",
"location": "global"
}
]
}
Para obter um exemplo mais complexo, consulte servidor lógico do SQL do Azure.
Recurso novo ou existente
Você pode usar a implantação condicional para criar um recurso novo ou usar um existente. O exemplo a seguir mostra como implantar uma nova conta de armazenamento ou usar uma existente.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"newOrExisting": {
"type": "string",
"defaultValue": "new",
"allowedValues": [
"new",
"existing"
]
}
},
"resources": [
{
"condition": "[equals(parameters('newOrExisting'), 'new')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
},
{
"condition": "[equals(parameters('newOrExisting'), 'existing')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]"
}
],
"outputs": {
"storageAccountId": {
"type": "string",
"value": "[if(equals(parameters('newOrExisting'), 'new'), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]"
}
}
}
Quando o parâmetro newOrExisting
é definido como novo, a condição é avaliada como true. A conta de armazenamento é implantada. Fora isso, a conta de armazenamento existente será usada.
Para obter um modelo de exemplo completo que usa o elemento condition
, confira VM com uma Rede Virtual nova ou existente, um Armazenamento e um IP público.
Funções de runtime
Ao usar uma função de referência ou de lista com um recurso implantado condicionalmente, a função é avaliada mesmo quando o recurso não é implantado. Você receberá um erro se a função se referir a um recurso que não existe.
Use a função if para garantir que a função seja avaliada para condições apenas quando o recurso estiver implantado. Consulte a função if para um modelo de exemplo que usa if
e reference
com um recurso implantado condicionalmente.
Você define um recurso como dependente de um recurso condicional exatamente como faria com qualquer outro recurso. Quando um recurso condicional não é implantado, o Azure Resource Manager o remove automaticamente das dependências necessárias.
Modo completo
Se você implantar um modelo com o modo completo e um recurso não for implantado porque condition
é avaliada como false, o resultado dependerá de qual versão da API REST você usa para implantar o modelo. Se você usar uma versão anterior à 2019-05-10, o recurso não será excluído. Na versão 2019-05-10 ou posterior, o recurso é excluído. As versões mais recentes do Azure PowerShell e CLI do Azure excluem o recurso quando a condição for false.
Próximas etapas
- Para acessar um módulo do Learn que trata da implantação condicional, confira Gerenciar implantações de nuvem complexas usando recursos avançados do modelo do ARM.
- Para obter recomendações sobre a criação de modelos, consultepráticas recomendadas para modelos ARM.
- Para criar várias instâncias de um recurso, consulte Iteração de recursos nos modelos do ARM.