Сбой при создании подписки EventGrid для функций Azure Runtime v1
Что я делаю не так или как заставить это работать? Я использую Azure Runtime v1 (нужно использовать.NET Framework, а не ядро).
Код функции в Visual Studio выглядит следующим образом:
// This is the default URL for triggering event grid function in the local environment.
// http://localhost:7071/admin/extensions/EventGridExtensionConfig?functionName={functionname}
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
namespace FunctionApp1
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([EventGridTrigger]Microsoft.Azure.EventGrid.Models.EventGridEvent eventGridEvent, TraceWriter log)
{
log.Info(eventGridEvent.Data.ToString());
}
}
}
Когда я пытаюсь добавить подписку для этой функции, независимо от того, через портал или cli, я получаю следующую ошибку:
PS Azure:\> az eventgrid event-subscription create -g [<myGroupName>] --topic-name data-generated --name Func1Subs --endpoint "https://[<myFunctionAppName>].azurewebsites.net/admin/extensions/EventGridExtensionConfig?functionName=Function1&code=[<code>]"
Argument 'resource_group_name' has been deprecated and will be removed in version '2.1.0'. Use '--source-resource-id' instead.
Argument 'topic_name' has been deprecated and will be removed in version '2.1.0'. Use '--source-resource-id' instead.
The attempt to validate the provided endpoint https://[<myFunctionAppName>].azurewebsites.net/admin/extensions/EventGridExtensionConfig failed. For more details, visit https://aka.ms/esvalidation.
Я пробовал как системный код, полученный из запроса GET на https://[<myFunctionAppName>].azurewebsites.net/admin/host/systemkeys/eventgridextensionconfig_extension?code=[<master_key>]
, ключ по умолчанию и даже сам мастер-ключ - тот же результат.
При использовании кнопки на портале "Добавить подписку на сетку событий" - я также получаю эту ошибку в окне уведомлений.
Когда я создаю функцию на портале - создание подписки работает нормально.
Также, когда я развертываю функцию.netcore в среде исполнения 2.x - и использую кнопку портала для создания подписки - это тоже работает отлично. Но, как я уже сказал, я хочу использовать среду выполнения 1.x для развертывания функции.NETFramework.
2 ответа
Я воспроизвел это и некоторые наблюдения здесь
это работает нормально, если я использую функцию подписи по умолчанию
namespace FunctionApp7
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([EventGridTrigger]JObject eventGridEvent, TraceWriter log)
{
log.Info(eventGridEvent.ToString(Formatting.Indented));
}
}
}
но когда я использую подпись, как вы упомянули, я получаю ошибку при создании подписки на событие. Мне также нужно добавить пакет nuget для последующего компиляции Microsoft.Azure.EventGrid 3.0.0
namespace FunctionApp10
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([EventGridTrigger]Microsoft.Azure.EventGrid.Models.EventGridEvent eventGridEvent, TraceWriter log)
{
log.Info(eventGridEvent.Data.ToString());
}
}
}
Посмотрите на следующую ссылку
https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid
Следующая подпись не применима для функций V1
public static void Run([EventGridTrigger]Microsoft.Azure.EventGrid.Models.EventGridEvent eventGridEvent, TraceWriter log)
Вы можете проверить функцию EventGridTrigger для подписчика Azure Event Grid с помощью Почтальона, см. Следующее:
URL запроса:
POST https://{myFuncApp}.azurewebsites.net/admin/extensions/EventGridExtensionConfig?functionName={myEventGridTriggerFnc}&code={_masterKey}
Заголовок:
aeg-event-type: SubscriptionValidation
Тело:
[{
"id": "123",
"subject": "abc",
"eventType": "xxx",
"eventTime": "2019-01-31T16:17:37.1080645Z",
"data": {
"validationCode": "xxxxxxxx",
"validationUrl": "",
},
"dataVersion": "0",
"metadataVersion": "1",
"topic": "xxxx"
}]
Успешный ответ вернется:
{"validationResponse":"xxxxxxxx"}
Заметки:
- URL-адрес запроса можно скопировать с портала yourFunction / Integrate, свойство Event Grid Subscription URL
- В случае создания URL-адреса запроса вручную используйте главный ключ _ на странице портала yourFunction/Manage.
- Для тестирования тела функции используйте заголовок "aeg-event-type: Notification "