ARM 模板:如何引用使用参数设置名称的资源
ARM template: How to reference a resource that has its name set using a parameter
我有一个 Azure 资源管理器模板来启动存储帐户,它的名称是使用参数设置的,如下所示:
"resources": [
{
"name": "[parameters('storageAccountName')]",
"type": "Microsoft.Storage/storageAccounts",
我想输出资源的详细信息,但看不到引用存储帐户的方式,因为我可以找到的大多数示例都是按名称引用资源。
我试过这个:
"outputs": {
"storageKey": {
"type": "string",
"value": "[reference([parameters('storageAccountName')])]"
}
}
但是得到错误信息:
The template output 'storageKey' at line '49' and column '23' is not valid:
Unable to parse language expression 'reference([parameters('storageAccountName')])': expected token 'Identifier' and actual 'LeftSquareBracket'
那么,如果资源的名称是使用 parameters.json 文件设置的,我该如何引用该资源?
我明白了。内部方括号是不必要的:
"storageKey": {
"type": "Object",
"value": "[reference(parameters('storageAccountName'))]"
}
有效。
只是为了添加到现有答案(很好,但不完整)。更好的方法是使用 resourceId()
函数:
reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), 'api-version-goes-here')
有几个原因。
- 这是引用资源的通用方式。您可以使用此方法在另一个资源 group\another 订阅中引用资源(而不仅仅是同一部署中的资源)。您可以为同一部署中的资源删除 'api-version-goes-here'
- 如果您有 2 个或更多不同类型但名称相同的资源(比如存储帐户和虚拟机),现有答案将失败,因为它无法确定您的目标资源
ps。 dependsOn
也是如此,您可以只使用名称,但我发现使用 resourceId()
总是 better\more 可靠,尤其是在 big\complicated 模板中。
推荐使用resourceId()。
它returns资源的唯一标识符。当资源名称不明确或未在同一模板中提供时,您可以使用此功能。
我有一个 Azure 资源管理器模板来启动存储帐户,它的名称是使用参数设置的,如下所示:
"resources": [
{
"name": "[parameters('storageAccountName')]",
"type": "Microsoft.Storage/storageAccounts",
我想输出资源的详细信息,但看不到引用存储帐户的方式,因为我可以找到的大多数示例都是按名称引用资源。
我试过这个:
"outputs": {
"storageKey": {
"type": "string",
"value": "[reference([parameters('storageAccountName')])]"
}
}
但是得到错误信息:
The template output 'storageKey' at line '49' and column '23' is not valid: Unable to parse language expression 'reference([parameters('storageAccountName')])': expected token 'Identifier' and actual 'LeftSquareBracket'
那么,如果资源的名称是使用 parameters.json 文件设置的,我该如何引用该资源?
我明白了。内部方括号是不必要的:
"storageKey": {
"type": "Object",
"value": "[reference(parameters('storageAccountName'))]"
}
有效。
只是为了添加到现有答案(很好,但不完整)。更好的方法是使用 resourceId()
函数:
reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), 'api-version-goes-here')
有几个原因。
- 这是引用资源的通用方式。您可以使用此方法在另一个资源 group\another 订阅中引用资源(而不仅仅是同一部署中的资源)。您可以为同一部署中的资源删除 'api-version-goes-here'
- 如果您有 2 个或更多不同类型但名称相同的资源(比如存储帐户和虚拟机),现有答案将失败,因为它无法确定您的目标资源
ps。 dependsOn
也是如此,您可以只使用名称,但我发现使用 resourceId()
总是 better\more 可靠,尤其是在 big\complicated 模板中。
推荐使用resourceId()。
它returns资源的唯一标识符。当资源名称不明确或未在同一模板中提供时,您可以使用此功能。