Я использую несколько шаблонов 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"
}
Есть подсказка?
Спасибо и всего наилучшего.