我正在构建一组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 vs dev进行不同的订阅,或者使用具有不同访问权限的不同服务原理进行部署等,但这是我必须使用的方法时刻:-(
答案 0 :(得分:1)
您可以创建一个资源,该资源将100%失败,并且仅在条件失败时才部署它,但是我认为您应该研究ARM策略,这是它们创建的目的。
看看这个问题:
How can I create an Azure policy that validates Resource Group Names