如何找出ARM模板与实际部署资源的差异?

How to find differences between ARM template and actually deployed resources?

手臂模板

ARM 模板应该允许您回滚到声明的云状态。但是,让我们面对现实吧,模板本身对于将部署哪些资源来说是相当模糊的,因为它们通常很长而且人类可读性不强。

我的问题

潜在的问题是不清楚指定的云环境包含和不包含的内容。当人们开始点击门户时,声明的和实际的云基础设施之间存在不匹配。

问题是:有什么方法可以验证在部署 ARM 模板时哪些资源将被修改甚至删除?

假设

正如您已经发现的那样,What-If 是专为满足这一需求而设计的工具,它显示了一份资源列表:

  • 已添加
  • 已更改(具有 属性 个值,嗯)
  • 已移除
  • 忽略。

.. 并允许您确认更改并在出现任何错误时取消。

ARM 模板确实支持 incremental deployment,保持未编写脚本的资源完好无损,并且假设预览功能不会改变这一点。

关于保证..

是的,What-if 功能本身目前仍处于预览阶段,因此有点偏执是有道理的。显然 您无法获得预览功能的任何保证,但是..

首先,它是可选的。您仍然拥有 ARM 模板,不必单独依赖 What-If。您也不会被迫通过假设功能进行实际部署。您可以检查报告,但拒绝更改并仍然通过您常用的 GA 级 ARM 工具集进行部署。没有桥梁被烧毁(如果您信任小的确认询问子功能)。

其次,您无论如何都应该进行测试。 通常您知道在 ARM 中进行了哪些更改,并且这些相同的更改应该在 What-If 中显示出来。您可以验证对 dev/staging 环境所做更改的正确性,风险很小。它是否适用于您的场景,您将尽早了解。

通知。 除了测试之外,您还可以调查已知的缺点和问题,并考虑是否有任何问题对您的案例很重要。看到这个回购: https://github.com/Azure/arm-template-whatif

总结

What-if 是一个非常有用的功能,而且看起来已经足够成熟,我希望大多数常见场景都能按预期运行。只要你测试过,有恢复计划,我就不会太担心。