Azure ARM模板:如何引用使用参数设置名称的资源
我有一个Azure资源管理器模板来启动存储帐户,它的名称是使用一个参数设置的,如下所示:Azure ARM模板:如何引用使用参数设置名称的资源,azure,parameters,reference,azure-resource-manager,Azure,Parameters,Reference,Azure Resource Manager,我有一个Azure资源管理器模板来启动存储帐户,它的名称是使用一个参数设置的,如下所示: "resources": [ { "name": "[parameters('storageAccountName')]", "type": "Microsoft.Storage/storageAccounts", 我想输出资源的详细信息,但看不到引用存储帐户的方法,因为大多数示例都是按名称引用资源 我试过这个: "outputs": { "stor
"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文件设置的,我该如何引用该资源呢?我找到了答案。内部方括号是不必要的:
"storageKey": {
"type": "Object",
"value": "[reference(parameters('storageAccountName'))]"
}
有效。只是为了补充现有的答案,这个答案很好,但不完整。更好的方法是使用resourceId函数:
reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), 'api-version-goes-here')
这有几个原因
这是引用资源的通用方法。您可以使用此方法引用另一个资源组\另一个订阅中的资源,而不仅仅是同一部署中的资源。对于同一部署中的资源,可以删除“api版本到此为止”
如果您有两个或多个不同类型但名称相同的资源(如存储帐户和虚拟机),现有的答案将失败,因为它无法确定您的目标资源
另外,dependsOn也是一样,您可以只使用名称,但我发现使用resourceId总是更好\更可靠,尤其是在大型\复杂的模板中。建议使用resourceId 查看MS文档:
它返回资源的唯一标识符。当资源名称不明确或未在同一模板中设置时,可以使用此函数。感谢您的回答,它非常有用。所以resourceId本质上是资源Id的查找?也就是说,要查找的对象的lookuptype,要查找的对象的名称甚至不查找,它只是构造它,因为它是众所周知的给定resourceType\resourceName。参考人会去查的