Да, есть способ использовать API REST для получения кода доступа к функции.Ниже приведены шаги:
Предположим, что имя функции EventGridTrigger2 и run.csx:
#r "Newtonsoft.Json"
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public static void Run(JObject eventGridEvent, TraceWriter log)
{
log.Info(eventGridEvent.ToString(Formatting.Indented));
}
и файл function.json:
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "eventGridEvent",
"direction": "in"
}
],
"disabled": false
}
Как видно, приведенные выше привязки не типизированы, что будет работать для любой выходной схемы, такой как InputEventSchema , EventGridSchema (схема по умолчанию) и CloudEventV01Schema (после исправления некоторой ошибки).
Свойство destination созданной подписки выглядит следующим образом:
"destination": {
"properties": {
"endpointUrl": null,
"endpointBaseUrl": "https://myFunctionApp.azurewebsites.net/admin/extensions/EventGridExtensionConfig"
},
"endpointType": "WebHook"
},
Обратите внимание, что полный триггер subscriberUrl для Azure EventGrid имеетследующий формат, где строка запроса содержит параметры для маршрутизации запроса к надлежащим функциям:
https://{FunctionApp}.azurewebsites.net/admin/extensions/EventGridExtensionConfig?functionName={FunctionName}&code={masterKey}
Для создания подписчика мы должны использовать его полный subscriberUrl, включающий строку запроса.В данный момент единственным неизвестным значением является masterKey.
Чтобы получить мастер-ключ приложения функции (хоста), мы должны использовать управляющий вызов REST API:
https://management.azure.com/subscriptions/{mySubscriptionId}/resourceGroups/{myResGroup}/providers/Microsoft.Web/sites/{myFunctionApp}/functions/admin/masterkey?api-version=2016-08-01
ответ имеет следующий формат:
{
"masterKey": "*************************************************"
}
Обратите внимание, что для этого вызова требуется аутентификация Маркер переноса .
Как только у нас есть masterKey для FunctionApp (host), мы можем использовать его для любой функции.внутри этого хоста.