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/configde 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