我有一个Azure资源管理器模板可以启动一个存储帐户,并且其名称是使用参数设置的,例如:
"resources": [
{
"name": "[parameters('storageAccountName')]",
"type": "Microsoft.Storage/storageAccounts",
我想输出资源的详细信息,但是看不到引用存储帐户的方法,因为大多数示例中我都可以通过名称来引用资源。
我已经尝试过:
"outputs": {
"storageKey": {
"type": "string",
"value": "[reference([parameters('storageAccountName')])]"
}
}
但是收到错误消息:
第49行和第23列的模板输出“ storageKey”无效: 无法解析语言表达式'reference([parameters('storageAccountName')])':预期标记'Identifier'和实际的'LeftSquareBracket'
那么,如果使用parameters.json文件设置了资源名称,该如何引用该资源?
答案 0 :(得分:2)
仅用于添加到现有答案中(很好,但不完整)。更好的方法是使用resourceId()
函数:
reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), 'api-version-goes-here')
有几个原因。
ps。 dependsOn
也是一样,您可以仅使用名称,但是我发现使用resourceId()
总是更好\更可靠,尤其是在大\复杂模板中。
答案 1 :(得分:1)
我知道了。不需要内部方括号:
"storageKey": {
"type": "Object",
"value": "[reference(parameters('storageAccountName'))]"
}
有效。
答案 2 :(得分:0)
建议使用resourceId()。
它返回资源的唯一标识符。当资源名称不明确或未在同一模板中设置资源名称时,可以使用此功能。