#azure #arm-template
Вопрос:
Мне нужно создать ключ хоста (использовать в серверной части управления API) для моей функции Azure с именем, переданным через параметр. Я не могу понять, как я могу использовать ключи списка для извлечения одного конкретного ключа хоста по его имени.
Я создаю ключ хоста таким образом, если я не добавлю свой вывод, это будет работать правильно
{
"type": "Microsoft.Web/sites/host/functionKeys",
"apiVersion": "2018-11-01",
"name": "[concat(variables('functionSite-name'), '/default/',variables('apim-name'))]",
"properties": {
"name": "[variables('apim-name')]"
}
}
Я попробовал это, получил это из другого поста, но он возвращает ошибку :
{«код»:»DeploymentFailed»,»сообщение»:»По крайней мере, одна операция развертывания ресурсов завершилась неудачно. Пожалуйста, перечислите операции развертывания для получения подробной информации. Пожалуйста, посмотрите https://aka.ms/DeployOperations для получения подробной информации об использовании.»,»подробности»:[{«код»:»Недопустимое пространство имен ресурсов»,»сообщение»:»Пространство имен ресурсов «GetVersionPOCApiManagement» недопустимо».}]}
[listkeys(concat(variables('functionSite-name'), '/host/default/'),'2016-08-01').functionKeys[variables('apim-name')]]
«Имя сайта функций» — это имя моей функции Azure (Microsoft.Web/сайты).
«apim-имя» — это имя созданного ключа хоста (Microsoft.Web/сайты/хост/функциональные клавиши).
В качестве ссылки на мой полный сценарий я использую развертывание, потому что моя функция Azure находится в другой группе ресурсов, и мне нужно создать ключ хоста, а затем добавить его в хранилище ключей. После этого мне нужно настроить экземпляр управления API для использования этой функции Azure.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
},
"variables": {
"apim-name": "eud-sse-poc-apim",
"api-name": "GetVersionPOCApiManagement",
"functionSite-name": "GetVersionPOCApiManagement",
"functionSite-ResourceGroup": "eud-sse-poc-datafactory-rg"
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2020-10-01",
"name": "azureFunctionDeployments",
"resourceGroup": "[variables('functionSite-ResourceGroup')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Web/sites/host/functionKeys",
"apiVersion": "2018-11-01",
"name": "[concat(variables('functionSite-name'), '/default/',variables('apim-name'))]",
"properties": {
"name": "[variables('apim-name')]"
}
}
],
"outputs": {
"hostKey": {
"type": "string",
"value": "[listkeys(concat(variables('functionSite-name'), '/host/default/'),'2016-08-01').functionKeys[variables('apim-name')]]"
}
}
}
}
}
],
"outputs": {}
}
Есть какие-нибудь предложения?
Ответ №1:
Я сам это нашел, смотрел не на ту часть
[listkeys(concat(variables('functionSite-name'), '/host/default/'),'2016-08-01').functionKeys[variables('apim-name')]]
Должно быть
[listKeys(concat(resourceId(variables('functionSite-ResourceGroup'),'Microsoft.Web/sites', 'GetVersionPOCApiManagement'), '/host/default'), '2016-08-01').functionKeys[variables('apim-name')]]
Таким образом, я могу подтвердить, что вы можете легко получить доступ к StringDictionary в шаблоне ARM