问题描述
我有一个用于 Azure DNS 区域的 ARM 模板,其中包含许多 Microsoft.Network/dnszones/*
、A
、CNAME
记录等的 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 显示将创建哪些资源, 删除或修改。使用假设来避免无意中删除 资源。