【问题标题】:Docker hosted Azure Function fails to link with Event GridDocker 托管的 Azure 函数无法与事件网格链接
【发布时间】:2019-07-12 04:26:56
【问题描述】:

我正在尝试通过事件网格将托管在 azure blob 存储上的静态站点连接到 azure 函数(托管在 docker 容器中)。我的计划是优化添加到 blob 存储中的图像以减小文件大小的功能。

我很欣赏它有点人为的例子,但我希望接触到事件网格和泊坞窗,这对我很有用。

目前我无法将事件网格连接到我的天蓝色函数。从该函数添加对事件网格的订阅在门户中不可用,因为它位于 docker 容器中。

我正在从主密钥的getting the function system key 上按照微软指南中的这些步骤进行操作。 (这随后用于设置订阅)

当我点击链接时: http://<func-app>.azurewebsites.net/admin/host/systemkeys/eventgrid_extension?code=<master_key> 我得到一个 404(使用 HTTPS 时相同)。

我替换了函数应用名称并从这里获取了 master_key(命名为 _master):

我只能假设我做错了什么,但我不知道是什么,感谢任何帮助!

【问题讨论】:

    标签: azure docker azure-functions azure-eventgrid


    【解决方案1】:

    我也遇到过同样的问题。在 Docker 容器中使用 EventGridTriggers 部署 FunctionApp 时,有时不会显示 eventgrid_extension 键。有时它会立即出现,有时几个小时后,有时永远不会。

    我注意到,即使 Azure 门户中未显示 eventgrid_extension 键,但它在与 FunctionApp 关联的存储 Blob 中可用。

    也许直接从 blob 中提取密钥可以作为一种解决方法。

    【讨论】:

      【解决方案2】:

      终于找到了问题的根源,修复它需要两个步骤:

      • 确保您使用正确的方法签名。我添加了一个 IActionResult 作为我的函数的返回类型,而不是这个方法签名:public static void EventGridTest([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)(使用异步任务而不是 void 也是可以接受的)。由于签名不正确,函数运行时无法找到有效的函数签名,直到我实际运行 func host start 时才出现此错误,此时我得到以下信息:
      Microsoft.Azure.WebJobs.Host: Error indexing method '<funcName>'.
      Microsoft.Azure.WebJobs.Host: Cannot bind parameter '$return' to type IActionResult&. Make sure the parameter Type is supported by the binding. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).
      

      感谢Roman KissJerry Lui 帮助我解决了这个问题。

      【讨论】:

        【解决方案3】:

        为 linux 功能生成系统密钥似乎有些问题。我确实遇到了同样的错误,而在 Windows 上一切正常。

        解决方法是直接使用主密钥来配置端点,这对我来说就像一个魅力。

        https://{functionappname}.azurewebsites.net/runtime/webhooks/eventgrid?functionName={functionname}&code={masterkey}
        

        【讨论】:

        • 感谢您的想法,我试过了,但现在得到:部署失败并出现以下错误:{"code":"Url validation","message":"The attempt to validate the provided endpoint XX failed... 我的 c# 函数中有样板验证响应。
        • @Spike 你如何添加订阅,在门户中还是在什么地方?
        • 通过门户是的
        • @MikeWade 有另一种测试方法。直接调用端点https://{functionappname}.azurewebsites.net/runtime/webhooks/eventgrid?functionName={functionname}&amp;code={masterkey}。我们应该会看到 400 错误,如果看到 401 则意味着 master 不知何故无效,请转到门户并再次检索密钥。
        • 除了@JerryLiu 关于测试eventgrid 功能,请看我在stackoverflow.com/questions/54462432/…的回答
        猜你喜欢
        • 2022-10-04
        • 1970-01-01
        • 2013-06-13
        • 2018-09-16
        • 2018-11-25
        • 2021-11-02
        • 2023-02-20
        • 1970-01-01
        • 2021-12-17
        相关资源
        最近更新 更多