在 ARM 模板之间共享变量或常量

Sharing variables, or constants, between ARM templates

我正在考虑定义 API 版本号,看起来我在所有链接模板中引用的某个模板中不断重复,但看起来我在这样做时遇到了麻烦而且我不确定如果这应该是可能的,更不用说怎么做了。

例如,int azuredeploy-shared.json 我可以做类似的事情

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "variables": {
    "apiVersion": {
        "resources": { "deployments": "2015-01-01" }
    }
  }
}

然后在 azuredeploy.json 中我可以像

那样使用它
resources": [
{
    "name": "someResource",
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "[variables('apiVersion').resources.deployments]",

第一个绊脚石是需要有一个 resources 部分。这让我想知道我是否引用了错误的 schema 还是应该引用一个。如果我创建了一些我认为是虚拟资源的东西并且提供了这个想法,那么 azuredeploy.json 应该如何引用这个文件?

我可以做类似 "[concat(parameters('_artifactsLocation'), '/ProjectName/Templates/azuredeploy-shared-json', parameters('_artifactsLocationSasToken'))]" 的事情,但我不知道它在哪里、如何以及应该仍然有效。因此,工作指针在这方面受到赞赏。我确实看到了 How to pass variables between templates - ARM json,但不幸的是我不明白它应该如何工作,也不明白链接的 Azure 示例。

好的,我认为您可以使用部署输出来做到这一点...似乎可能有更简单的解决方案,但据我对您的情况的了解,我想不出一个解决方案。

1) 部署一个包含所有常量的模板并将这些常量设置为该部署的输出

2) 在你想访问它们的模板部署中,使用引用函数,eg

reference('/subscriptions/{GUID}/resourceGroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}','2015-01-01').outputs.{nameOfConstant}.value]"

只需使用相同的部署名称再次部署步骤 #1 即可更新常量。这就是你想要的吗?