Доступ к ключу учетной записи хранилища из ресурса вне шаблона ARM - PullRequest
0 голосов
/ 02 ноября 2018

Я использую несколько шаблонов ARM в нашем проекте, каждый из которых предназначен для отдельного компонента, а также есть общий шаблон ARM, который включает в себя все ресурсы, которые должны работать большинству элементов, такие как SqlServer, Storage Accounts, Redis кеш (только один из этих ресурсов для всех элементов)

Дело в том, что, поскольку учетная запись хранения находится в отдельном шаблоне ARM (шаблон ARM общей инфраструктуры), я не могу получить доступ к ключам учетной записи хранения из шаблона компонента. Мне нужно это, чтобы правильно установить значение строки подключения для компонента, чтобы использовать его. Если я включу ресурс учетной записи хранения в шаблон компонента, я могу получить к нему доступ через:

[concat('DefaultEndpointsProtocol=https;AccountName=', 
variables('YFO.StorageAccount.Name'), ';AccountKey=', 
listKeys(resourceId('Microsoft.Storage/storageAccounts', 
variables('YFO.StorageAccount.Name')), providers('Microsoft.Storage', 
'storageAccounts').apiVersions[0]).keys[0].value)]

Но когда я удаляю его из шаблона компонента, как и должно быть, тогда я получаю следующую ошибку:

New-AzureRmResourceGroupDeployment:

Ошибка: Code = InvalidTemplate; Сообщение = Ошибка проверки шаблона развертывания: «Ссылка на шаблон« ********** »недействительна: не удалось найти шаблон ресурса или копию ресурса с этим именем. Посмотри пожалуйста https://aka.ms/arm-template-expressions/#reference для деталей использования. '

Кажется, что listKeys не выполнит эту работу, если ресурс находится за пределами шаблона, который вы пытаетесь развернуть

Для компонента AppInsights мне удалось сделать это с помощью:

[reference(concat('Microsoft.Insights/components/', 
variables('AppInsightsName'))).InstrumentationKey]

, даже если ресурс AppInsights находится вне шаблона ARM компонента, но я не могу сделать это с учетной записью хранения, поскольку объект, возвращенный для учетной записи хранения в справочной функции, выглядит следующим образом:

"networkAcls": {
    "bypass": "AzureServices",
    "virtualNetworkRules": [],
    "ipRules": [],
    "defaultAction": "Allow"
    },
    "supportsHttpsTrafficOnly": false,
    "encryption": {
                   "services": {
                    "file": {
                             "enabled": true,
                             "lastEnabledTime": "2018-08-18T06:05:57.3069884Z"
                                },
                    "blob": {
                              "enabled": true,
                              "lastEnabledTime": "2018-08-18T06:05:57.3069884Z"
                                }
                              },
                    "keySource": "Microsoft.Storage"
                            },
                    "provisioningState": "Succeeded",
                    "creationTime": "2018-08-18T06:05:56.8228127Z",
                    "primaryEndpoints": {
                              "blob": "https://yfomormonttest.blob.core.windows.net/",
                              "queue": "https://yfomormonttest.queue.core.windows.net/",
                              "table": "https://yfomormonttest.table.core.windows.net/",
                              "file": "https://yfomormonttest.file.core.windows.net/"
                            },
              "primaryLocation": "westeurope",
               "statusOfPrimary": "available",
              "secondaryLocation": "northeurope",
              "statusOfSecondary": "available"
                          }

Есть подсказка?

Спасибо и всего наилучшего.

1 Ответ

0 голосов
/ 02 ноября 2018

Проблема заключалась в поставщиках («Microsoft.Storage», «storageAccounts»). ApiVersions [0], чтобы получить версию API, которая нужна listkeys в качестве параметра. Установка непосредственно параметра как 2018-07-01 работала

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...