我的 Azure 应用程序功能遇到了一个奇怪的问题,我找不到任何关于此的内容。
我在不更改其代码的情况下重新发布了我的函数,但突然该函数停止工作,当我导航到 Azure 上的函数页面时,我会收到以下消息:
错误:
检索主密钥时出错。
如果我导航到函数的设置,我可以看到没有生成任何键,并且host.json
文件是空的。但是,使用 Kudu 浏览我的函数文件会显示文件内容是正确的。
还有两件事使这更奇怪:
- 函数在本地正常工作
- 如果我获取另一个函数的代码并将其部署在这个函数上,我的函数可以正常工作,这意味着这不是与我的函数配置有关的问题,而是与其代码有关的问题
你们对此有什么指示吗?
编辑:
让我对此添加更多详细信息。
假设我有 2 个解决方案,A.sln
和B.sln
. 我在 Azure 上还有 2 个应用程序功能,假设F_1
和F_2
.
A.sln
和B.sln
具有完全相同的结构,唯一的区别在于业务逻辑。 这同样适用于F_1
和F_2
,它们唯一的区别是相关的存储帐户,因为每个函数都有自己的。
目前A.sln
部署在F_1
上,B.sln
部署在F_2
上,唯一工作的是F_1
。 如果我在F_2
上部署A.sln
,F_2
开始工作,所以我的想法是B.sln
的代码有问题,因为A.sln
使用相同的配置工作。
函数应用在应用程序设置AzureWebJobsDashboard
、AzureWebJobsStorage
和WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
(如果按消耗计划运行(中引用了存储帐户。清除此存储或只是重新创建它都可以解决问题。
我还建议为每个函数应用创建单独的存储帐户 - 至少只要存在这些难以发现的 bug。当此类问题仅影响单个函数应用时,修复它们要容易得多。
我不知道这里是否是这种情况,但我发现在我的情况下(函数应用程序 v3 的新部署(,如果其中有注释行,host.json
在 Azure 上是空的。删除注释解决了我的问题,host.json 文件现已正确部署。
原因之一可能是存储帐户中的密钥可能已轮换。因此,在 azure 函数的AzureWebJobsDashboard
和AzureWebJobsStorage
中引用的连接字符串将有所不同。
解决方案:转到AzureWebJobsDashboard
中引用的存储帐户,AzureWebJobsStorage
-> 访问密钥 -> 复制 key1 下的连接字符串,并将其用于AzureWebJobsDashboard
和AzureWebJobsStorage
。