Modos de implantação do Azure Resource Manager

Ao implantar os recursos, especifique que a implantação é uma atualização incremental ou uma atualização completa. A diferença entre esses dois modos é como o Gerenciador de Recursos lida com recursos existentes no grupo de recursos que não estão no modelo.

Para ambos os modos, o Resource Manager tenta criar todos os recursos especificados no modelo. Se o recurso já existe no grupo de recursos e suas configurações são as mesmas, nenhuma operação é realizada para esse recurso. Se você alterar os valores de propriedade de um recurso, o recurso será atualizado com os novos valores. Se você tentar atualizar o local ou o tipo de um recurso existente, a implantação falhará com um erro. Em vez disso, implante um novo recurso com o local ou o tipo de que você precisa.

O modo padrão é incremental.

Modo completo

No modo completo, o Gerenciador de recursos exclui recursos existentes no grupo de recursos, mas que não são especificados no modelo.

Observação

Sempre use a operação de teste de hipóteses antes de implantar um modelo no modo completo. O teste de hipóteses mostra quais recursos serão criados, excluídos ou modificados. Use o teste de hipóteses para evitar a exclusão acidental de recursos.

Se o seu modelo inclui um recurso que não está implantado porque a condição é avaliada como false, o resultado depende 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 da CLI do Azure excluem o recurso.

Tenha cuidado ao usar o modo completo com loops de cópia. Todos os recursos que não são especificados no modelo após a resolução do loop de cópia são excluídos.

Se você implantar em mais de um grupo de recursos em um modelo, os recursos no grupo de recursos especificado na operação de implantação poderão ser excluídos. Os recursos nos grupos de recursos secundários não são excluídos.

Há algumas diferenças em como os tipos de recurso lidam com exclusões de modo completo. Os recursos pai serão excluídos automaticamente quando não estiverem em um modelo que é implantado no modo completo. Alguns recursos filho não são excluídos automaticamente quando não estão no modelo. No entanto, esses recursos filho serão excluídos se o recurso pai for excluído.

Por exemplo, se o grupo de recursos contiver uma zona DNS (tipo de recurso Microsoft.Network/dnsZones) e um registro CNAME (tipo de recurso Microsoft.Network/dnsZones/CNAME), a zona DNS será o recurso pai do registro CNAME. Se você implantar com o modo completo e não incluir a zona DNS em seu modelo, a zona DNS e o registro CNAME são ambos excluídos. Se incluir a zona DNS no seu modelo, mas não incluir o registro CNAME, o CNAME não é excluído.

Para obter uma lista de como os tipos de recursos tratam a exclusão, confira Exclusão de recursos do Azure para implantações no modo completo.

Se o grupo de recursos estiver bloqueado, o modo completo não excluirá os recursos.

Observação

Somente modelos de nível raiz suporte ao modo de implantação completa. Para ver os modelos vinculados ou aninhados, você deve usar o modo incremental.

Implantações de nível de assinatura não dão suporte ao modo completo.

Atualmente, o portal não dá suporte ao modo completo.

Modo incremental

No modo incremental, o Gerenciador de recursos deixa inalterados recursos existentes no grupo de recursos, mas que não são especificados no modelo. Os recursos do modelo são adicionados ao grupo de recursos.

Observação

Ao reimplantar um recurso existente no modo incremental, todas as propriedades são reaplicadas. As propriedades não são adicionadas incrementalmente. Um mal-entendido comum é considerar que as propriedades que não são especificadas no modelo permanecem inalteradas. Se você não especificar certas propriedades, o Resource Manager interpretará que a implantação está substituindo esses valores. As propriedades que não estão incluídas no modelo são redefinidas para os valores padrão. Especifique todos os valores não padrão para o recurso, não apenas aqueles que você está atualizando. A definição de recurso no modelo sempre contém o estado final do recurso. Ele não pode representar uma atualização parcial para um recurso existente.

Em casos raros, as propriedades que você especifica para um recurso são, na verdade, implementadas como um recurso filho. Por exemplo, quando você fornece valores de configuração do site para um aplicativo Web, esses valores são implementados no tipo de recurso filho Microsoft.Web/sites/config. Se você reimplantar o aplicativo Web e especificar um objeto vazio para os valores de configuração do site, o recurso filho não será atualizado. No entanto, se você fornecer novos valores de configuração do site, o tipo de recurso filho será atualizado.

Resultados de exemplo

Para ilustrar a diferença entre os modos incrementais e completos, considere o cenário a seguir.

O Grupo de recursos contém:

  • Recurso A
  • Recurso B
  • Recurso C

O Modelo contém:

  • Recurso A
  • Recurso B
  • Recurso D

Quando implantada no incremental modo, o grupo de recursos tem:

  • Recurso A
  • Recurso B
  • Recurso C
  • Recurso D

Quando implantado no modo completo, o Recurso C é excluído. O grupo de recursos tem:

  • Recurso A
  • Recurso B
  • Recurso D

Definir o modo de implantação

Para definir o modo de implantação ao implantar com o PowerShell, use o Mode parâmetro.

New-AzResourceGroupDeployment `
  -Mode Complete `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\storage.json

Para definir o modo de implantação ao implantar com a CLI do Azure, use o mode parâmetro.

az deployment group create \
  --mode Complete \
  --name ExampleDeployment \
  --resource-group ExampleResourceGroup \
  --template-file storage.json

O exemplo a seguir mostra um conjunto de modelos vinculados para o modo de implantação incremental:

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2020-10-01",
    "name": "linkedTemplate",
    "properties": {
      "mode": "Incremental",
          <nested-template-or-external-template>
    }
  }
]

Próximas etapas