首页 > 解决方案 > ARM 模板:如何引用使用参数设置名称的资源

问题描述

我有一个 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 文件设置的,我该如何引用该资源呢?

标签: azureparametersreferenceazure-resource-manager

解决方案


只是为了添加到现有答案(这很好,但不完整)。更好的方法是使用以下resourceId()功能:

reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), 'api-version-goes-here')

有几个原因。

  1. 这是引用资源的通用方式。您可以使用此方法引用另一个资源组\另一个订阅中的资源(而不仅仅是同一部署中的资源)。您可以为同一部署中的资源删除“api-version-goes-here”
  2. 如果您有 2 个或更多不同类型但具有相同名称的资源(例如存储帐户和虚拟机),则现有答案将失败,因为它无法确定您的目标资源

附言。也一样dependsOn,你可以只用名字就可以逃脱,但我发现它总是更好\更可靠的使用resourceId(),尤其是在大\复杂的模板中。


推荐阅读