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 存储帐户有效地“重置”了您的功能键。
我刚刚修复了一个因 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 存储帐户有效地“重置”了您的功能键。