创建对标准逻辑应用的 EventGrid 订阅

Create an EventGrid subscription to a STANDARD logic app

我主要想创建一个使用此触发器的标准逻辑应用程序: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 并将其粘贴到 webhook 端点 url 下(我需要填写以创建手动订阅)。 但是,这也不起作用。我得到了一个非常相似的错误:

我上一步只是作为调试步骤。我知道如果我在工作流中手动创建触发器,问题将得到解决并且订阅将单独创建(或由 Azure 后端系统创建)。

那么,有没有人用标准逻辑应用解决过这个问题?你知道如何解决这个问题吗?

我的意思是如何创建连接到标准逻辑应用程序的事件网格订阅 ARM 模板?

在创建事件订阅期间,如果您看到诸如 The attempt to validate the provided endpoint https://your-endpoint-here failed. For more details, visit https://aka.ms/esvalidation 之类的错误消息,则表示 验证握手 失败。要解决此错误,请验证以下方面:

  • 使用 Postman 或 curl 或类似工具,使用 sample SubscriptionValidationEvent 请求正文对您的 webhook url 执行 HTTP POST。

  • 如果您的 webhook 正在实施同步验证握手机制,请验证是否将 ValidationCode 作为响应的一部分返回。

  • 如果您的 webhook 正在实施异步验证握手机制,请确认您是 HTTP POST 正在返回 200 OK。

可以参考Troubleshoot Azure Event Grid subscription validations, 无法根据工作流 url 创建事件网格 topc 订阅 - 握手失败 Endpoint validation with Event Grid events and Implementing Azure Logic Apps - When a resource event occurs

您也可以在 GitHub 上提出问题:Azure/logicapps

在与MS支持团队沟通后,我发现首先逻辑应用名称的名称不应超过43个字符。 然后创建此工作流可能会在门户中工作,但不能使用 ARM。因为它会因为 Microsoft 端的内部错误而出现验证错误。

解决此问题的解决方法的灵感来自 this page:

eventgrid 验证请求将始终进行验证 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"
}