Azure 重置功能键?

Function key reset by Azure?

我刚刚修复了一个因 deployment of Azure Functions Runtime 2.0.12050-alpha 而停止工作的函数(一个 HTTP 触发器)。门户中显示的错误是 The binding type(s) 'someType' are not registered.

实施一些更改后(例如添加对 Azure 存储扩展的引用,ILogger 而不是 TraceWriter),该功能再次在本地运行,但我的应用程序仍然失败。

经过一番摸索,我发现功能键发生了变化。该值与存储在调用该函数的 Web 应用程序设置中的值不同。我在那里设置了新值,一切开始正常工作。

有没有可能是功能键在我不知情的情况下被重置了?
(这是一个小项目,我是唯一的开发人员。)

是因为新的 Functions Runtime 部署还是密钥定期重置?

参见 Changes to Key Management in Functions V2

Azure Functions 目前支持两种密钥存储机制:文件系统和 blob 存储。

文件系统总是用于存储 1.x 和 2.x 运行时的秘密。对于 2.x,从运行时 2.0.12050-alpha 开始,功能秘密默认存储在 blob 存储中(应用程序设置中的 AzureWebJobsStorage),用户可以通过设置 AzureWebJobsSecretStorageType 应用程序切换到文件设置为 files.

为了使过渡顺利进行,Function 团队实施了一个临时密钥迁移代码路径,该路径会自动将机密从文件系统复制到 blob 存储。 但是此内部方法未从运行时启用2.0.12115,因为它有点容易出错。

这意味着:

如果您在部署 2.0.12050-alpha 之前 ping 函数运行时(将 FUNCTIONS_EXTENSION_VERSION 设置为次要版本 <= 2.0.11961-alpha)并释放 ping(将 FUNCTIONS_EXTENSION_VERSION 更改为主要版本版本 ~2) 在 2.0.12115 部署后(现在是 2.0.12134),您的功能键预计会更改。

Else runtime 会自动升级,在 2.0.1250 之前创建的 Function app 应该受益于秘密迁移代码并具有一致的密钥。

我总是将运行时间留给主要版本(2.x 之前的 beta 是 GA,~2 之后)并且我可以确认我的密钥没有受到影响。至于 SendGrid API 密钥,它是由 Azure 以外的 SendGrid 服务控制的,因此不会受到影响。顺便说一句,我几个月前生成的 SendGrid API 密钥现在仍然有效。

在我的例子中,由于 更改与我的函数应用关联的存储帐户,密钥被重置。

具体来说,当我修复环境 X 的功能代码时,我注意到 AzureWebJobsStorage 环境变量指向与环境 Y 关联的存储帐户并更改了它。

根据@jerry-liu 的评论,由于 2.x 功能秘密存储在 blob 存储中,更改关联的 blob 存储帐户有效地“重置”了您的功能键。