Azure ARM - 完整部署是否应在省略时删除现有(子)资源?

Azure ARM - Should Complete Deployment delete existing (child) Resources when omitted?

在完整资源组部署过程中,如果未在模板中指定资源,则预计资源将被删除。

但是在我的情况下(部署带有 CNAME 的 DNS 区域的 RSG),如果 CNAME 是通过 copy/copyIndex 迭代器指定的,则不会删除从数组参数投影后丢失的 CNAME .

我有 a basic template 可以重现这个问题。

  1. 将 CNAME 记录添加到参数文件。
  2. 部署模板(完成)并验证 CNAME 是否已创建。
  3. 从参数文件中删除 1 条或多条 CNAME 记录。
  4. 部署模板(完成)并观察已删除的 CNAME 资源未被删除。

我找不到任何解释此行为警告的文档,所以我不确定这是错误还是预期行为?


编辑/跟进:

如果我采用 'heavy-handed' 核对整个 DNS 区域的方法,然后立即使用新模板重新部署它,这是否会导致 DNS 服务出现故障,假设没有问题重新部署并且此操作发生在受影响资源的 TTL 下?

虽然这 听起来 合理,但我的直觉告诉我这始终是无法保证的竞争条件。 IE: - 如果 'a client' TTL 在我核对区域后立即过期,则 DNS 查找将失败,直到重新部署发生 并且记录在 Azure DNS 中生效。

但这引发了问题:

这是因为子资源实际上并不是资源,即使它们是在模板中以这种方式创作的。 "mode" 部署由 ARM 在平台层处理,图中唯一的资源是 dnszone。

您可能会争辩说 RP 然后应该更新属性以从 dnszone 资源中删除其他 cname(这将独立于部署模式)...因为如果不这样做,唯一的办法就是删除整个记录里面可能并不理想。不同的 RP 在 ARM 中处理这种不同的方式(不幸的是)...如果您对这种行为有强烈的看法,您可以打开用户语音请求...

有帮助吗?