如何通过ARM为Standard逻辑应用创建Event Grid订阅并解决校验报错
问题描述
我想创建一个使用When a resource event occurs触发器的Standard逻辑应用,触发器参考如下:
我希望通过ARM模板完成该逻辑应用的部署,已在模板中添加了逻辑应用、工作流、API连接、Event Grid订阅的相关配置,但部署时出现如下报错:
##[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).
我后续尝试调试:在Azure门户中手动复制工作流的回调URL,粘贴为Event Grid订阅的Webhook端点地址手动创建订阅,仍然得到类似报错,报错参考如下:
已知如果直接在门户中手动添加工作流的Event Grid触发器,Azure后端会自动完成订阅创建,不会出现该问题。
解决方案
该报错的核心原因是Event Grid向逻辑应用触发器发送验证握手请求时,没有得到预期的响应,对应ARM模板部署需要按以下规则调整:
- 调整部署顺序:先完成逻辑应用、工作流定义的部署,等待触发器完全加载后再部署Event Grid订阅,不要将两类资源放在同一个部署步骤中并行创建,避免触发器未初始化完成导致无法响应验证请求。
- Event Grid订阅资源不要硬编码回调URL,使用ARM内置的
listCallbackURL函数动态获取触发器的完整回调地址,参考ARM模板片段如下:
{ "type": "Microsoft.EventGrid/systemTopics/eventSubscriptions", "apiVersion": "2022-06-15", "name": "[concat(parameters('systemTopicName'), '/', parameters('eventSubscriptionName'))]", "properties": { "destination": { "endpointType": "WebHook", "properties": { "endpointUrl": "[listCallbackURL(concat(resourceId('Microsoft.Web/sites', parameters('logicAppName')), '/hostruntime/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/', parameters('workflowName'), '/triggers/When_a_resource_event_occurs'), '2022-03-01').value]" } }, "filter": { "includedEventTypes": [ "Microsoft.Resources.ResourceWriteSuccess", "Microsoft.Resources.ResourceDeleteSuccess" ] }, "eventDeliverySchema": "EventGridSchema", "retryPolicy": { "maxDeliveryAttempts": 30, "eventTimeToLiveInMinutes": 1440 } } }
- 若逻辑应用配置了IP访问限制、VNet接入等网络规则,部署Event Grid订阅前需要临时放开公网访问,或者将Event Grid服务标签加入IP白名单,订阅创建完成后再恢复原有网络配置即可。
- 不要自行删减回调URL中的任何参数(包括sig签名、api-version等),确保请求可以被逻辑应用正确识别。
如果按照上述配置仍然存在问题,可以先在Azure门户手动创建符合要求的触发器和Event Grid订阅,导出对应资源的ARM模板,对比自己编写的模板定位差异即可。
内容的提问来源于stack exchange,提问作者ibda
相关产品推荐
相关产品推荐

