Шаблон ARM — Получение определенного ключа хоста функции

#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