Создание подписки EventGrid для приложения СТАНДАРТНОЙ логики

В основном я хочу создать стандартное приложение логики, использующее этот триггер: When a resource event occurs:

Я хочу иметь возможность создавать это приложение логики через ARM. Я добавил шаблоны для приложения логики, рабочих процессов, подключения к API и подписки на сетку событий. но я получаю эту ошибку:

      ##[error]Url validation: Webhook validation handshake failed for https://myLogicApp.azurewebsites.net/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/9382f38a3bc54b528e50dcc4351cd665/triggers/When_a_resource_event_occurs/paths/invoke. Http POST request retuned 2XX response with response body . When a validation request is accepted without validation code in the response body, Http GET is expected on the validation url included in the validation event(within 10 minutes).

Итак, я попытался создать подписку на сетку событий вручную на портале, вручную скопировав URL-адрес рабочего процесса и вставив его под URL-адрес конечной точки веб-перехватчика (который мне нужно заполнить, чтобы создать подписку вручную). Однако и это не сработало. У меня очень похожая ошибка:

Я выполнил предыдущий шаг просто как шаг отладки. Я знаю, что если я создал триггер в рабочем процессе вручную, проблема будет устранена, и подписка будет создана самостоятельно (или с помощью серверной системы Azure).

Итак, есть ли кто-нибудь, кто решил эту проблему с помощью стандартного приложения логики? Есть идеи, как решить эту проблему?

Я имею в виду, как создать шаблон ARM подписки на eventgrid, который подключается к стандартному приложению логики ??

2 ответа

Если во время создания подписки на событие вы видите сообщение об ошибке, например The attempt to validate the provided endpoint https://your-endpoint-here failed. For more details, visit https://aka.ms/esvalidation, это указывает на сбой при подтверждении подтверждения . Чтобы устранить эту ошибку, проверьте следующие аспекты:

  • Выполните HTTP POST для своего URL-адреса веб-перехватчика с тела запроса образцомSubscriptionValidationEvent с помощью Postman, curl или аналогичного инструмента.

  • Если ваш веб-перехватчик реализует механизм подтверждения синхронной проверки, убедитесь, что ValidationCode возвращается как часть ответа.

  • Если ваш веб-перехватчик реализует механизм подтверждения асинхронной проверки, убедитесь, что HTTP POST возвращает 200 OK.

Вы можете обратиться к Устранение неполадок при проверке подписки на сетку событий Azure» , « , « разделам «конечнойНевозможно создать подписку topc для сетки событий на основе URL-адреса рабочего процесса - сбой рукопожатия»Проверкаточки с событиями сетки событий» и « Реализация приложений логики Azure - при возникновении события ресурса».

Вы также можете открыть проблему на GitHub: Azure / logicapps

После общения со службой поддержки MS я обнаружил, что сначала имя имени приложения логики не должно превышать 43 символа. Тогда создание этого рабочего процесса может работать на портале, но не с использованием ARM. так как у него будет ошибка проверки из-за внутренней ошибки на стороне Microsoft.

Обходной путь для решения этой проблемы вдохновлен этой страницей :

Запрос на проверку сетки событий всегда будет иметь URL-адрес проверки (только если LA был развернут через ARM). Таким образом, мы можем добавить эти действия:

Затем http-запрос может иметь:

Таким образом, рабочий процесс будет иметь код, похожий на этот:

      {
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Condition": {
                "actions": {
                    "HTTP_try_to_return_the_validation": {
                        "inputs": {
                            "body": "@triggerBody()?['data']?['validationCode']",
                            "method": "POST",
                            "uri": "@{triggerBody()?['data']?['validationUrl']}"
                        },
                        "runAfter": {},
                        "type": "Http"
                    },
                    "Terminate": {
                        "inputs": {
                            "runStatus": "Cancelled"
                        },
                        "runAfter": {
                            "HTTP_try_to_return_the_validation": [
                                "Succeeded"
                            ]
                        },
                        "type": "Terminate"
                    }
                },
                "expression": {
                    "and": [
                        {
                            "equals": [
                                "@triggerBody()?['eventType']",
                                "Microsoft.EventGrid.SubscriptionValidationEvent"
                            ]
                        }
                    ]
                },
                "runAfter": {},
                "type": "If"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "triggers": {
            "When_a_resource_event_occurs": {
                "inputs": {
                    "body": {
                        "properties": {
                            "destination": {
                                "endpointType": "webhook",
                                "properties": {
                                    "endpointUrl": "@{listCallbackUrl()}"
                                }
                            },
                            "filter": {
                                "includedEventTypes": [
                                    "X.Y.Z"
                                ],
                                "subjectBeginsWith": "/x/y/z"
                            },
                            "topic": "@{appsetting('eventgrid_name')}"
                        }
                    },
                    "host": {
                        "connection": {
                            "referenceName": "eventgrid"
                        }
                    },
                    "path": "/subscriptions/@{encodeURIComponent(appsetting('subscriptionId'))}/providers/@{encodeURIComponent('Microsoft.EventGrid.Topics')}/resource/eventSubscriptions",
                    "queries": {
                        "subscriptionName": "testName",
                        "x-ms-api-version": "2017-09-15-preview"
                    }
                },
                "splitOn": "@triggerBody()",
                "type": "ApiConnectionWebhook"
            }
        }
    },
    "kind": "Stateful"
}