如何通过 ARM 模板为 Azure DNS 区域删除 DNS 记录

问题描述

我有一个用于 Azure DNS 区域的 ARM 模板,其中包含许多 Microsoft.Network/dnszones/*ACNAME 记录等的 TXT 资源。我已经能够通过部署成功部署新记录和更改记录。

我刚刚注意到,当我删除 ARM 模板中某些 DNS 记录对应的资源时,尽管部署成功,但该模板的部署实际上并未删除 Azure DNS 区域中的记录。

如果我删除模板中的资源并且在部署后它仍然存在且没有错误,这似乎破坏了 ARM 模板的声明性。

还是我误解了资源提供者的工作方式?

解决方法

ARM模板部署有两种模式:

  • 增量:在增量模式下,资源管理器保留资源组中存在但未在模板中指定的未更改资源。模板中的资源被添加到资源组中。

  • 完整:在完整模式下,资源管理器会删除资源组中存在但未在模板中指定的资源。

默认模式是增量,这就是您看不到已删除资源被移除的原因。

要在使用 PowerShell 部署时将 deployment mode 显式设置为 Complete,请使用 Mode 参数作为:

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

提示:在部署模板之前始终使用 what-if operation 在完整模式下。 What-if 显示将创建哪些资源, 删除或修改。使用假设来避免无意中删除 资源。