我正在构建一组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策略