如何使用Azure函数和事件订阅收听mediaService事件

时间:2019-01-24 15:06:27

标签: azure-media-services azure-eventgrid

我有一些要使用Azure REST API完成的编码工作。 我在学习Azure工作流,但似乎正确的方法是创建Azure函数,在事件订阅管理器中注册它,并处理该函数中完成的工作。

现在我有:

当我尝试创建订阅时,出现以下错误:

Deployment has failed with the following error: {"code":"Url validation","message":"The attempt to validate the provided endpoint http://myendpoint failed. For more details, visit https://aka.ms/esvalidation."}

如果我随后转到函数中,则出现以下错误:

Function (EventHandler) Error: The binding type(s) 'eventGridTrigger' are not registered. Please ensure the type is correct and the binding extension is installed.

我已阅读到我应该首先通过使用该模板创建一个新函数在门户中安装Azure Event Grid触发器,但是由于以下错误而失败:https://mediaevent-handler.scm.azurewebsites.net/api/vfs/data/Functions/extensions/febd7383-0d66-4974-90f0-c266f0c08c2e.json

我执行的流程正确吗?还是存在某种权限问题?

我也以组织所有者的身份进行这些操作。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用函数或逻辑应用程序从AMS中“捕获”事件网格事件。

我经常使用两者。如上所述,一旦确认订阅中已启用RP,就可以创建一个新功能并选择“事件网格触发器”模板。确保不要抓住不一样的“事件中心触发器”。

生成后,“运行”按钮旁边会出现一个小链接,显示“添加事件网格订阅”。选择“事件网格架构”,然后为“主题类型”选择“ Microsoft Azure Media Services”,然后为媒体服务选择正确的订阅,资源组和帐户名。然后,我总是取消选中“订阅所有事件”复选框,仅订阅“作业完成”,或者如果您希望所有状态更改为“作业状态已更改”。

然后,放入一些示例代码并对其进行测试:

#r "Newtonsoft.Json"

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public static void Run(JObject eventGridEvent, TraceWriter log)
{
    log.Info(eventGridEvent.ToString(Formatting.Indented));

    var subject = eventGridEvent["subject"].ToString();
    var split = subject.Split('/');
    var transformName = split[1];
    var jobName = split[3];

    log.Info($"Transform = {transformName}");
    log.Info($"Job = {jobName}");
    log.Info($"State = {eventGridEvent["data"]["state"] }");

}

更新此答案,使其包含注释:

功能部门可能出现门户错误。我会联系他们。检查此链接-按照以下步骤解决问题:github.com/Azure/azure-functions-host/wiki /

如果您遵循该步骤并在门户中停止/重新启动Function应用程序,它将开始工作。

另一个解决方法-我自己还没有遇到这个问题-是从Logic App开始-在Logic App中捕获事件,然后将该事件作为常规HTTP触发函数提交给Function。这就是我现在大部分工作流程的构建方式,并且Logic Apps设计器似乎可以正确注册事件。