Azure 函数 - “未找到任何已初始化的语言工作者”

Posted

技术标签:

【中文标题】Azure 函数 - “未找到任何已初始化的语言工作者”【英文标题】:Azure function - "Did not find any initialized language workers" 【发布时间】:2019-11-11 21:53:34 【问题描述】:

我在 Azure 中运行 Azure 函数,该函数由上传到 blob 存储容器的文件触发。该函数检测到新的 blob(文件),但随后输出以下消息 - Did not find any initialized language workers

设置:

使用 Python 3.6.8 的 Azure 函数 在 linux 机器上运行 使用 azure devops 构建和部署(用于 ci/cd 功能) Blob 触发函数

我已使用相同的 blob 存储容器、相同的配置值和 azure 函数的本地实例在本地运行代码。

函数核心目的是读取上传到blob存储容器的.xml文件,并将xml中的数据解析转换为Json存储在cosmos db中。

我希望该过程能够像在我的本地实例上使用我在 cosmos db 中的文档一样完成,但由于以下错误,该函数实际上并未处理任何内容:

Did not find any initialized language workers

【问题讨论】:

我想知道它是否与FUNCTIONS_WORKER_RUNTIME 设置有关。您可以在您的 local.settings.json 文件中检查此设置和 Azure 门户中的设置吗?参考:docs.microsoft.com/en-us/azure/azure-functions/…. 是的,我在 local.settings.json 和 Azure 门户中都设置了 FUNCTIONS_WORKER_RUNTIME,但在 Azure 门户中的函数中仍然出现错误(但不是本地)。 我猜语言工作者可能已经崩溃了。尝试从概览页面下载应用内容并在本地运行以查看更详细的错误。 @nathanshumoogum 你是如何解决这个问题的? @RB17 - 很抱歉回复缓慢,但不适用于出现此问题的公司,因此无法使用 Microsoft Azure。希望下面的一些 cmets 能帮到你 【参考方案1】:

我也花了一段时间才找到原因,但这与我明确安装了一个与 Azure Functions 使用的 protobuf 版本冲突有关。公平,在文档中有一个警告。我是如何找到它的:转到<your app name>.scm.azurewebsites.net/api/logstream 并查找我能找到的任何错误。

【讨论】:

【参考方案2】:

相同的错误,但不同的技术、环境和根本原因。 Technology Net 5,目标系统windows。就我而言,我使用依赖注入来添加一些服务,我从 .ConfigureServices() 部分中的环境变量中获取一个参数,但是当我部署时,我忘记将变量添加到 azure 中的应用程序设置中,因为其中我遇到了这个奇怪的错误。

【讨论】:

【参考方案3】:

Troy Witthoeft 的answer 在提出问题时几乎可以肯定是正确的,但此错误消息非常笼统。我最近在运行时 3.0.14287.0 上遇到了这个错误。我在大约 1 小时内多次尝试调用时看到了错误,但在此之前和之后一切正常,无需干预。

我与一位 Azure 支持工程师合作,他提供了一些通常有用的建议:

Python 版本:如果您在配置选项卡下设置了函数运行时版本~3,则平台可以选择python versions 3.63.73.8 中的任何一个运行您的代码。因此,您应该针对所有这三个版本测试您的代码。或者,根据该链接的建议,使用 --runtime-version 开关创建函数应用程序以指定特定的 python 版本。

消费计划:此错误可能与消费定价的应用程序已闲置并且需要更长的时间才能再次预热有关。当然,这取决于应用程序的使用模式。 (我推断(但工程师没有这么说)如果我的应用程序所在的 Azure 数据中心恰好在我的应用程序想要重新启动时非常繁忙,它可能只需要等待一些资源可用.)。您可以通过为永远在线的功能应用程序付费来解决这个问题,或者通过操纵某种心跳过程来阻止应用程序闲置时间过长。 (使用 HTTP 触发器最简单:可能只是 ping 它?)

工程师能够看到 Azure 平台生成的较低级别的错误消息,我在 Application Insights 中看不到该消息:ARM authentication token validation failed。这是在Microsoft.Azure.WebJobs.Script.WebHost.Security.Authentication.ArmAuthenticationHandler.HandleAuthenticate()/src/azure-functions-host/src/WebJobs.Script.WebHost/Security/Authentication/Arm/ArmAuthenticationHandler.cs 提出的。有一个很长的堆栈跟踪,最里面的异常是:System.Security.Cryptography.CryptographicException : Padding is invalid and cannot be removed.。我们俩都无法完全理解这一点,我不清楚这个错误的责任是在HandleAuthenticate() 调用内部还是外部(来自......哪里的无效输入令牌?)。

最后一点可能是 Azure Functions Host 代码库中的一些晦涩的错误,或其他一些平台问题,或者完全具有误导性和无关性。

【讨论】:

请问……你的功能是消费计划吗?您如何验证它的 SDK 版本?最后,我们在这里提出了三个建议……您是如何解决您遇到的具体问题的? 是的,我正在使用消费计划。不确定 SDK 版本是否与运行时版本相同?运行时版本显示在门户中函数应用的概览边栏选项卡的右侧。而当我刚才回来查看时,它是 3.0.14413.0,所以很明显会经常更新。 我留下这个答案相当模糊,因为我还没有最终解决我的具体问题。如果它再次发生,我可能会重新创建指定 --runtime-version 的函数应用程序,看看是否可以修复它。但是,如果这只是一个小时的中断,我无法证明花费这些时间是合理的。 随着您的功能扩展,它会部署到新的服务器上。您的 sdk 版本由运行该函数的服务器确定。这不是你能控制的。很高兴您不再遇到该错误。我建议使用应用洞察查询并关联(或不)您的错误是否发生在修复之前的 sdk 上。 啊哈,这里有一些混合术语。发生错误时的 SDK 版本确实是 3.0.14287.0 - App Insights 证实了这一点。似乎 Azure 门户有时将此版本跟踪称为 Runtime version,但也使用 --runtime-version CLI 开关来引用 Python 解释器版本。【参考方案4】:

这个错误很可能是github问题#4384。已发现此错误,并于 2020 年 6 月中旬发布了修复程序。在 3.0.14063 或更高版本上运行的应用程序应该没问题。版本列表是here。

您可以使用 Azure 应用洞察来检查您的版本。 KUSTO 查询日志。异常表,azure SDK 列有你的版本。

如果您使用专用的应用服务计划,则可以通过删除和重新部署您的应用来从 Microsoft“拉取”最新版本。如果您正在使用消费计划,那么您可能需要等待此错误修复发布到所有服务器。

【讨论】:

我对 GitHub #4384 的解释是它只与 Azure Functions 的 VS Code 扩展有关。这肯定只会影响开发人员机器上的本地执行吗?而这个问题是关于一个只发生在 Azure 上的问题,而不是在开发机器上。你能澄清一下吗? 引用的 github 线程在 github.com/Azure/azure-functions-host repo 中。该存储库 - 那些库 - 是 Azure Functions 和您的本地 CLI 使用的运行时。虽然 #4384 线程中的对话主题围绕在 VSCode 中本地再现它,但本地再现并不排除在 Azure 中出现相同的问题。它是。 OP 和我的组织都观察到了它。我们聘请了 MS 和 repo 维护者。他们将我们的 Azure 环境升级到 SDK 3.0.14063+,问题就解决了。谢谢。【参考方案5】:

这是由于 SDK 版本的原因,我建议在 Azure 中部署新功能 App 并在那里部署您的代码。两件事要检查:

    确保您的本地函数应用 SDK 版本与 Azure 函数应用匹配。 检查两侧的python版本。

【讨论】:

以上是关于Azure 函数 - “未找到任何已初始化的语言工作者”的主要内容,如果未能解决你的问题,请参考以下文章

Azure 流分析输出到 azure 函数应用

Azure 存储队列触发的 Azure 函数

集成 Azure 服务总线主题和 Azure 函数

从 Azure 函数获取 401 时,Azure 逻辑应用停止执行

Azure 函数 - 当前 Azure 资源名称

Azure 函数无法访问 Azure Blob