Tengo una plantilla de Azure Resource Manager para activar una cuenta de almacenamiento, y su nombre se configura mediante un parámetro, como este:

"resources": [
    {
        "name": "[parameters('storageAccountName')]",
        "type": "Microsoft.Storage/storageAccounts",

Quiero generar detalles del recurso, pero no puedo ver una forma de hacer referencia a la cuenta de almacenamiento, ya que la mayoría de los ejemplos que puedo encontrar hacen referencia al recurso por su nombre.

He probado esto:

    "outputs": {
    "storageKey": {
        "type": "string",
        "value": "[reference([parameters('storageAccountName')])]"
    }
}

Pero recibe el mensaje de error:

La salida de plantilla 'storageKey' en la línea '49' y la columna '23' no es válida: no se puede analizar la expresión de lenguaje 'referencia ([parámetros (' storageAccountName ')])': token esperado 'Identificador' y actual 'LeftSquareBracket'

Entonces, ¿cómo hago referencia al recurso si su nombre se establece usando un archivo parameters.json?

-1
Dicky Moore 10 may. 2019 a las 16:00

3 respuestas

La mejor respuesta

Solo para agregar a la respuesta existente (que está bien, pero incompleta). Una mejor manera de hacerlo es utilizando la función resourceId():

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

Hay varias razones para eso.

  1. Esta es una forma universal de hacer referencia a un recurso. puede hacer referencia a un recurso en otro grupo de recursos \ otra suscripción utilizando este método (y no solo recursos en la misma implementación). puede soltar 'api-version-goes-here' para obtener recursos en la misma implementación
  2. la respuesta existente fallará si tiene 2 o más recursos de diferente tipo pero con el mismo nombre (por ejemplo, cuenta de almacenamiento y máquina virtual), porque no podrá determinar a qué recurso se dirige

PD. lo mismo ocurre con dependsOn, puede salirse con la suya solo con el nombre, pero siempre es mejor \ más confiable usar resourceId(), especialmente en plantillas grandes \ complicadas.

2
4c74356b41 10 may. 2019 a las 20:24

Se recomienda el uso de resourceId ().

Consulte la documentación de MS: https: // docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-functions-resource#resourceid

Devuelve el identificador único de un recurso. Utiliza esta función cuando el nombre del recurso es ambiguo o no está provisto dentro de la misma plantilla.

0
ramindroid 5 sep. 2019 a las 05:22

Me lo imaginé. Los corchetes internos eran innecesarios:

        "storageKey": {
        "type": "Object",
        "value": "[reference(parameters('storageAccountName'))]"
    }

Trabajos.

1
Dicky Moore 10 may. 2019 a las 13:53