Azure Управление API для принятия веб-хука сетки событий (ошибка проверки предоставленной конечной точки) - PullRequest
0 голосов
/ 15 января 2020

У меня есть Premium Azure Сервисная шина, отправляющая сообщения на «productupdate» topi c. В настоящее время я использую приложение Logi c для получения сообщения, но это не совсем то, что я хотел бы сделать. Вместо этого я хотел бы, чтобы Event Grid обрабатывал эти сообщения и запускал веб-хук до конечной точки в моем интерфейсе управления API. Проблема, с которой я сталкиваюсь, заключается в настройке конечной точки в управлении API для возможности принимать веб-хук (код проверки?).

Я прочитал всю документацию, сообщения в блогах и сообщения на форуме, которые могу найти по теме, но ничего не работает до сих пор. Конечная точка моего веб-хука, которую я пытаюсь использовать: " https: // [apim]. azure -api.net / OrdersService / v1 / Products? Subscription-key = [apim-key] .

Во входящих политиках для этой конечной точки в APIM у меня есть следующее:

        <set-variable name="Event" value="@(context.Variables.GetValueOrDefault<JArray>("Request")[0])" />
        <choose>
            <when condition="@(context.Variables.GetValueOrDefault<JObject>("Event")["eventType"].ToString() == "Microsoft.EventGrid.SubscriptionValidationEvent")">
                <return-response>
                    <set-status code="200" />
                    <set-header name="Content-Type" exists-action="override">
                        <value>application/json</value>
                    </set-header>
                    <set-body>@{
                                        var validationResponse = new JObject(new JProperty("validationResponse",context.Variables.GetValueOrDefault<JObject>("Event")["data"]["validationCode"].ToString()));
                                        return validationResponse.ToString();
                                    }</set-body>
                </return-response>
            </when>
            <otherwise>
                <set-header name="Content-Type" exists-action="override">
                    <value>application/json</value>
                </set-header>
                <set-header name="X-Event-Id" exists-action="override">
                    <value>@(context.Variables.GetValueOrDefault<JObject>("Event")["id"].ToString())</value>
                </set-header>
                <set-header name="X-Event-Subject" exists-action="override">
                    <value>@(context.Variables.GetValueOrDefault<JObject>("Event")["subject"].ToString())</value>
                </set-header>
                <set-header name="X-Event-Type" exists-action="override">
                    <value>@(context.Variables.GetValueOrDefault<JObject>("Event")["eventType"].ToString())</value>
                </set-header>
                <set-header name="X-Event-Time" exists-action="override">
                    <value>@(context.Variables.GetValueOrDefault<JObject>("Event")["eventTime"].ToString())</value>
                </set-header>
                <set-header name="X-Event-Data-Version" exists-action="override">
                    <value>@(context.Variables.GetValueOrDefault<JObject>("Event")["dataVersion"].ToString())</value>
                </set-header>
                <set-header name="X-Event-Metadata-Version" exists-action="override">
                    <value>@(context.Variables.GetValueOrDefault<JObject>("Event")["metadataVersion"].ToString())</value>
                </set-header>
                <set-header name="X-Event-Topic" exists-action="override">
                    <value>@(context.Variables.GetValueOrDefault<JObject>("Event")["topic"].ToString())</value>
                </set-header>
                <set-body>@(context.Variables.GetValueOrDefault<JObject>("Event")["data"].ToString())</set-body>
            </otherwise>
        </choose>

Независимо от того, для чего я установил конечную точку веб-хука или что я ввел во входящую политику, я я получаю следующую ошибку, когда нажимаю «Создать» в подписке на событие:

Deploying Event Subscription: productupdate
Deployment has failed with the following error: {"code":"Url
validation","message":"The attempt to validate the provided endpoint
https://<apim>.azure-api.net/OrdersService/v1/Products failed. For more details,
visit https://aka.ms/esvalidation."}

Я нашел много информации об ошибке, но ничего определенного, что относится к (или работает с) получению APIM Я почти уверен, что это связано с возвратом кода проверки, но я не могу понять, как заставить APIM делать это. Что я пропускаю или делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Я наконец понял это и работаю. Проблемы оказались в моей конечной точке APIM из-за фундаментального неправильного понимания Event Grid с моей стороны. Это была не просто одна вещь. Включение монитора и журнала, безусловно, помогло мне отследить его. В моей политике входящих APIM отсутствовал ключ для настройки внутреннего URL. Кроме того, мне не нужно было отправлять ключ подписки (потому что он отключен в APIM). Я также настроил свою конечную точку там, где были GET, POST и PUT. Я должен был избавиться от GET и PUT.

0 голосов
/ 16 января 2020

Подробнее о том, как включить Azure Monitor and Log Analytics для вашей службы APIM: https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-use-azure-monitor. После этого вы должны получить таблицу GatewayLogs в Log Analytics с записью для каждого запроса, обработанного APIM. Эти записи будут содержать описание запроса APIM и ответ на него. Внутренне я вижу, что все последние запросы к вашей конечной точке были отклонены с помощью 401, потому что ключ подписки, который вы передаете, не соответствует ни одному ключу в вашей службе APIM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...