Попытка проверить предоставленную конечную точку не удалась при создании EvenGridSubscription для функции Azure.

Я пытаюсь создать EventGridSubscription для функции Azure, которая использует EventGridTrigger. При запуске командлета New-AzureRmEventGridSubscription я вижу следующую ошибку:

Проверка URL: попытка проверить предоставленную конечную точку https://blablafunction.azurewebsites.net/admin/EventGridExtensionConfig не удалось.

Вот код функции лазурного цвета:

[FunctionName("BlobCreatedHandler")]
public static async Task Run([EventGridTrigger]JObject blobEvent,
    [Queue("blob-created-queue", Connection = Strings.StorageAccountConnection)] CloudQueue blobCreatedQueue,
    [Inject(typeof(IBlobCreatedHandler))] IBlobCreatedHandler blobCreatedHandler)
{
    await blobCreatedHandler.Handle(blobEvent, blobCreatedQueue);
}

Пробовал разные версии модуля AzureRM.EventGrid. Интересно, что на версиях ниже 0.3.0 работает нормально. Но все последние версии, начиная с 0.3.1, выдают эту ошибку. Кто-нибудь испытывает то же самое?

UPD: Fiddler говорит, что обе версии SDK (хорошая и плохая) отправляют абсолютно одинаковые запросы:

{
"properties": {
    "destination": {
        "endpointType": "WebHook",
        "properties": {
            "endpointUrl": "https://blobmalwarescanapptest.azurewebsites.net/admin/EventGridExtensionConfig?functionName=TestFunc&code=PhWghMXtSma188UQccaoErA4Eiw7ygudguHkpq1V0XKMfzA59yBR5g=="
        }
    },
    "filter": {
        "includedEventTypes": [
            "All"
        ],
        "isSubjectCaseSensitive": false
    }
}

и получите абсолютно одинаковые ответы. Но в более новых версиях SDK кажется, что управляющая конечная точка Azure EventGrid усекает все, что идет после '?' подписывает и пытается проверить базовый URL (без параметров запроса).


person Siarhei Machel    schedule 04.09.2018    source источник


Ответы (1)


Я только что использовал шаблон ARM для достижения того же результата. Конечная точка, которая сработала для меня, была: https://<FunctionAppName>.azurewebsites.net/runtime/webhooks/EventGrid?functionName=<functionName>&code=<code>

Хотя это также для v2 функций azure, и я вижу, что вы используете v1 (из-за JObject в качестве триггера сетки событий).

Изменить: Пример моего шаблона ARM:

{
  "type": "Microsoft.Storage/storageAccounts/providers/eventSubscriptions",
  "name": "[concat(variables('MobileStorageName'), '/Microsoft.EventGrid/', variables('EventSubscriberName'))]",
  "apiVersion": "2018-01-01",
  "dependsOn": [
    "[variables('MobileStorageName')]"
  ],
  "tags": {
    "displayName": "Storage Account Event Subscription"
  },
  "properties": {
    "destination": {
      "endpointType": "WebHook",
      "properties": {
        "endpointUrl": "[variables('FunctionAppEndpoint')]"
      }
    },
    "filter": {
      "subjectBeginsWith": "",
      "subjectEndsWith": "",
      "isSubjectCaseSensitive": false,
      "includedEventTypes": [ "Microsoft.Storage.BlobCreated" ]
    }
  }
}

Обратите внимание, что в моем случае мне нужен StorageV2 (и это 2018-02-1 api), иначе это не сработало.

person Lars Celie    schedule 07.09.2018
comment
Я попробовал вашу конечную точку: она может работать с шаблоном ARM, но она не работает и с последними версиями модуля AzureRM.Eventgrid PS (возможно, потому, что вы используете более старую версию API в своем шаблоне? Просто предположение). Я пробовал это в более старых версиях: проверка конечной точки проходит, но само событие не может быть доставлено, и функция Azure не запускается. - person Siarhei Machel; 10.09.2018
comment
На какую версию API вы нацеливаетесь в своем шаблоне ARM? (я хочу сравнить его с тем, который использует командлет PS) - person Siarhei Machel; 10.09.2018
comment
@SiarheiMachel Я добавил фрагмент шаблона руки, чтобы вы могли сравнить. - person Lars Celie; 11.09.2018