Modos de implementação do Azure Resource Manager
Ao implementar os seus recursos, especifica que a implementação é uma atualização incremental ou uma atualização completa. A diferença entre estes dois modos é a forma como Resource Manager processa os recursos existentes no grupo de recursos que não estão no modelo.
Para ambos os modos, Resource Manager tenta criar todos os recursos especificados no modelo. Se o recurso já existir no grupo de recursos e as definições se mantiverem inalteradas, não será efetuada nenhuma operação para esse recurso. Se alterar os valores de propriedade de um recurso, o recurso será atualizado com esses novos valores. Se tentar atualizar a localização ou o tipo de um recurso existente, a implementação falhará com um erro. Em vez disso, implemente um novo recurso com a localização ou o tipo de que precisa.
O modo predefinido é incremental.
Modo completo
No modo completo, Resource Manager elimina os recursos existentes no grupo de recursos, mas não são especificados no modelo.
Nota
Utilize sempre a operação what-if antes de implementar um modelo no modo completo. O what-if mostra-lhe que recursos serão criados, eliminados ou modificados. Utilize what-if para evitar a eliminação não intencional de recursos.
Se o seu modelo incluir um recurso que não está implementado porque a condição é avaliada como falsa, o resultado depende da versão da API REST que utiliza para implementar o modelo. Se utilizar uma versão anterior a 2019-05-10, o recurso não será eliminado. Com a versão 2019-05-10 ou posterior, o recurso é eliminado. As versões mais recentes do Azure PowerShell e da CLI do Azure eliminam o recurso.
Tenha cuidado ao utilizar o modo completo com ciclos de cópia. Todos os recursos que não são especificados no modelo após a resolução do ciclo de cópia são eliminados.
Se implementar em mais do que um grupo de recursos num modelo, os recursos no grupo de recursos especificado na operação de implementação são elegíveis para serem eliminados. Os recursos nos grupos de recursos secundários não são eliminados.
Existem algumas diferenças na forma como os tipos de recursos processam as eliminações de modo completo. Os recursos principais são eliminados automaticamente quando não estão num modelo implementado no modo completo. Alguns recursos subordinados não são eliminados automaticamente quando não estão no modelo. No entanto, estes recursos subordinados são eliminados se o recurso principal for eliminado.
Por exemplo, se o grupo de recursos contiver uma zona DNS (Microsoft.Network/dnsZones
tipo de recurso) e um registo CNAME (Microsoft.Network/dnsZones/CNAME
tipo de recurso), a zona DNS é o recurso principal do registo CNAME. Se implementar com o modo completo e não incluir a zona DNS no seu modelo, a zona DNS e o registo CNAME são ambos eliminados. Se incluir a zona DNS no seu modelo, mas não incluir o registo CNAME, o CNAME não é eliminado.
Para obter uma lista de como os tipos de recursos processam a eliminação, veja Eliminar recursos do Azure para implementações de modo completo.
Se o grupo de recursos estiver bloqueado, o modo completo não elimina os recursos.
Nota
Apenas os modelos de nível de raiz suportam o modo de implementação completo. Para modelos ligados ou aninhados, tem de utilizar o modo incremental.
As implementações ao nível da subscrição não suportam o modo completo.
Atualmente, o portal não suporta o modo completo.
Modo incremental
No modo incremental, Resource Manager deixa inalterados os recursos que existem no grupo de recursos, mas não são especificados no modelo. Os recursos no modelo são adicionados ao grupo de recursos.
Importante
Ao reimplementar um recurso existente no modo incremental, todas as propriedades são reaplicadas. As propriedades não são adicionadas incrementalmente. Um mal-entendido comum é pensar que as propriedades que não estão especificadas no modelo permanecem inalteradas. Se não especificar determinadas propriedades, Resource Manager interpreta a implementação como substituindo esses valores. As propriedades que não estão incluídas no modelo são repostas para os valores predefinidos. Especifique todos os valores não predefinidos para o recurso e não apenas os que está a atualizar. A definição de recurso no modelo contém sempre o estado final do recurso. Não pode representar uma atualização parcial para um recurso existente.
Aviso
Em casos raros, pode especificar propriedades num recurso ou num dos respetivos recursos subordinados. Dois exemplos comuns são sub-redes em redes virtuais e valores de configuração de sites para aplicações Web. Nestes casos, tem de processar as atualizações incrementais cuidadosamente.
Para sub-redes, especifique os valores através da subnets
propriedade no recurso Microsoft.Network/virtualNetworks . Não defina os valores através do recurso subordinado Microsoft.Network/virtualNetworks/sub-redes. Desde que as sub-redes estejam definidas na rede virtual, pode reimplementar a rede virtual e não perder as sub-redes.
Para valores de configuração do site, os valores são implementados no tipo Microsoft.Web/sites/config
de recurso subordinado . Se reimplementar a aplicação Web e especificar um objeto vazio para os valores de configuração do site, o recurso subordinado não será atualizado. No entanto, se fornecer novos valores de configuração do site, o tipo de recurso subordinado é atualizado.
Resultado de exemplo
Para ilustrar a diferença entre os modos incrementais e completos, considere o seguinte cenário.
O Grupo de Recursos contém:
- Recurso A
- Recurso B
- Recurso C
O modelo contém:
- Recurso A
- Recurso B
- Recurso D
Quando implementado no modo incremental , o grupo de recursos tem:
- Recurso A
- Recurso B
- Recurso C
- Recurso D
Quando implementado no modo completo , o Recurso C é eliminado. O grupo de recursos tem:
- Recurso A
- Recurso B
- Recurso D
Definir modo de implementação
Para definir o modo de implementação ao implementar com o PowerShell, utilize o Mode
parâmetro .
New-AzResourceGroupDeployment `
-Mode Complete `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile c:\MyTemplates\storage.json
Para definir o modo de implementação ao implementar com a CLI do Azure, utilize o mode
parâmetro .
az deployment group create \
--mode Complete \
--name ExampleDeployment \
--resource-group ExampleResourceGroup \
--template-file storage.json
O exemplo seguinte mostra um modelo ligado definido para o modo de implementação incremental:
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2020-10-01",
"name": "linkedTemplate",
"properties": {
"mode": "Incremental",
<nested-template-or-external-template>
}
}
]
Passos seguintes
- Para saber mais sobre a criação de modelos Resource Manager, veja Compreender a estrutura e a sintaxe dos modelos do ARM.
- Para saber mais sobre a implementação de recursos, veja Implementar recursos com modelos arm e Azure PowerShell.
- Para ver as operações de um fornecedor de recursos, veja API REST do Azure.