若条件未评估为真,是否有可能使ARM部署失败



我正在构建一组ARM模板,以部署应用程序所需的所有资源,并在参数文件中指定一个environmentPrefix参数,并在所有资源名称前加上环境前缀。最终的结果是,例如,开发环境中基本名称为service1的应用程序服务将获得资源名称dev-service1

给定环境的资源应该部署到具有相同环境前缀的资源组中,例如dev-core-services

如果RGs名称不是以参数文件environmentPrefix开头,我希望模板部署失败。例如,如果使用定义environmentPrefix = dev的参数文件将模板部署到名为prod-core-services的RG中,则部署将失败。

我知道我可以把condition元素放在单独的资源上,看起来像这样,

"condition": "[if(startsWith(resourceGroup().name, concat(parameters('EnvironmentPrefix'), '-')), bool('true'), bool('false'))]",

但是,如果我对所有资源都这样做,那么当模板部署实际上没有部署任何内容时,它就会说它成功了——因为它们的condition元素都被评估为false。

有什么办法在这种情况下使部署失败吗?

(我知道还有其他安全的选择,比如对prod和dev进行不同的订阅,或者使用具有不同访问权限的不同服务原则进行部署,等等,但这正是我目前必须处理的问题:-(

您可以创建一个100%失败的资源,并仅在条件失败时部署它,但我认为您应该研究ARM策略,这是创建它们来解决的问题。

看看这个问题:
我如何创建一个验证资源组名称的Azure策略

最新更新