我在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
。
我无法使用嵌套\链接模板(和输出值)。
答案 0 :(得分:1)
为了避免对resourceId函数的这种限制,我通常要做的是用参数的值定义一个变量,然后在resourceId函数中使用该变量。
示例:
"parameters": {
"KeyVaultName": {
"type": "string",
"metadata": {
"description": "Key Vault Name"
}
}
},
"variables": {
"KeyVaultName": "[parameters('KeyVaultName')]"
}
然后,当我引用KeyVault资源时,我使用如下变量来引用它:
"[resourceId('Microsoft.KeyVault/vaults', variables('KeyVaultName')]"