我正在 Azure 中运行 Azure 函数,该函数由上传到 blob 存储容器的文件触发。该函数检测到新的 blob(文件),但随后输出以下消息 -
Did not find any initialized language workers
。
设置:
我已使用相同的 blob 存储容器、相同的配置值在本地运行代码,并且 azure 函数的本地实例按预期工作。
该函数的核心目的是读取上传到 blob 存储容器中的 .xml 文件,并解析和转换 xml 中的数据以将其以 Json 形式存储在 cosmos db 中。
我希望该过程能够像在本地实例上一样完成,并在 cosmos db 中使用我的文档,但由于以下错误,该函数实际上并未处理任何内容:
Did not find any initialized language workers
Troy Witthoeft 的 answer 在提出问题时几乎肯定是正确的,但此错误消息非常笼统。我最近在运行时 3.0.14287.0 上遇到了这个错误。我在大约 1 小时内多次尝试调用时都看到了错误,但在此之前和之后一切都运行良好,无需干预。
我与一位 Azure 支持工程师合作,他提供了一些通常有用的建议:
Python 版本:如果您在“配置”边栏选项卡下设置了函数运行时版本
~3
,则平台可以选择任何 python 版本 3.6
、3.7
或 3.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 代码库中的一些不起眼的错误,或其他一些平台问题,或者完全误导和不相关。
相同的错误,但技术、环境和根本原因不同。 技术网5,目标系统windows。就我而言,我使用依赖项注入来添加一些服务,我从 .ConfigureServices() 部分内的环境变量中获取一个参数,但是当我部署时,我忘记将该变量添加到 azure 中的应用程序设置中,因为其中我遇到了这个奇怪的错误。
这是由于SDK版本所致,我建议在Azure中部署新的功能应用程序并在那里部署您的代码。需要检查 2 件事:
我也花了一段时间才找到原因,但这与我明确安装的 protobuf 版本有关,该版本与 Azure Functions 使用的版本冲突。公平,文档中对此有警告。我是如何找到它的:转到
<your app name>.scm.azurewebsites.net/api/logstream
并查找我能找到的任何错误。
在文件requirements.txt中,添加python_worker_extension_timer==1.0.0
这解决了我的问题。