Шаблон ARM: Как ссылаться на ресурс, имя которого установлено с помощью параметра - PullRequest
0 голосов
/ 10 мая 2019

У меня есть шаблон Azure Resource Manager для раскрутки учетной записи хранения, и его имя задается с помощью параметра, например:

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

Я хочу вывести подробную информацию о ресурсе, но не вижу способа ссылки на учетную запись хранения, так как большинство примеров, которые я могу найти, ссылаются на ресурс по имени.

Я пробовал это:

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

Но получите сообщение об ошибке:

Вывод шаблона 'storageKey' в строке '49' и столбце '23' недопустим: Невозможно разобрать выражение языка 'reference ([параметры (' storageAccountName ')]) ": ожидаемый токен" Идентификатор "и фактический" LeftSquareBracket "

Так как мне ссылаться на ресурс, если его имя задано с помощью файла parameters.json?

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

просто для добавления к существующему ответу (что хорошо, но не полностью).лучший способ сделать это - использовать функцию resourceId():

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

для этого есть несколько причин.

  1. это универсальный способ ссылки на ресурс.Вы можете ссылаться на ресурс в другой группе ресурсов \ другой подписке, используя этот метод (и не только ресурсы в том же развертывании).Вы можете удалить 'api-version-go-here' для ресурсов в том же развертывании
  2. существующий ответ не удастся, если у вас есть 2 или более ресурсов другого типа, но с одинаковым именем (скажем, учетной записи хранения и виртуальноймашина), потому что он не сможет определить, на какой ресурс вы нацелены

пс.То же самое касается dependsOn, вы можете выбрать только имя, но я считаю, что его всегда лучше \ надежнее использовать resourceId(), особенно в больших \ сложных шаблонах.

1 голос
/ 10 мая 2019

Я понял это.Внутренние квадратные скобки были не нужны:

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

работает.

...