如何在ARM模板中动态创建Azure KeyVault参考?

时间:2018-03-19 13:37:44

标签: azure azure-resource-manager azure-keyvault arm-template

我在ARM模板参数文件中使用以下代码来从keyvault检索秘密值:

"parameters": {
    "mailAccount": {
             "reference": {
               "keyVault": {
                    "id": "/subscriptions/GUID/resourceGroups/KeyVaultRG/providers/Microsoft.KeyVault/vaults/KeyVault"
                  },
                  "secretName": "mailAccount"
             }
           },

并在模板文件中:

  "appSettings": [           
            {
              "name": "mailAccount",
              "value": "[parameters('mailAccount')]"
            },
            {

我想知道是否可以使用动态构造的对象(即不是/subscriptions/GUID/resourceGroups/KeyVaultRG/providers/Microsoft.KeyVault/vaults/KeyVault[resourceId(subscription().subscriptionId, resourcegroup().name, 'Microsoft.KeyVault/vaults', parameters('KeyVaultName'))])或[resourceId('Microsoft.KeyVault/vaults', parameters('KeyVaultName'))]来引用KeyVault的名称?

实际上,主要目标是在部署模板时能够传递不同的KeyVault名称 - 存储相似的值。
资源(和成本)分离需要有几个KeyVaults。

现在我只看到验证错误〜resourceId function cannot be used while referencing parameters

我无法使用嵌套\链接模板(和输出值)。

1 个答案:

答案 0 :(得分:1)

为了避免对resourceId函数的这种限制,我通常要做的是用参数的值定义一个变量,然后在resourceId函数中使用该变量。

示例:

"parameters": {
        "KeyVaultName": {
            "type": "string",
            "metadata": {
                "description": "Key Vault Name"
            }
        }
},
"variables": {
    "KeyVaultName": "[parameters('KeyVaultName')]"
}

然后,当我引用KeyVault资源时,我使用如下变量来引用它:

"[resourceId('Microsoft.KeyVault/vaults', variables('KeyVaultName')]"