问题描述
我正在尝试了解 Azure Functions
和 Key Vault
之间的集成。在门户上的应用程序设置文件中,如果我引用了一个 KV 端点,函数运行时是检索一次结果并将其缓存在本地还是每次引用配置键时都会命中端点?换句话说,我试图了解 KV 中的任何更改是否需要重新启动 Function 应用程序。
解决方法
目前,如果更新 Key Vault 中的密钥值,则无需手动重新启动 Azure 函数。 azure 函数将自动重新启动,以便您加载所有新值。
Azure 函数在启动阶段加载应用程序设置中定义的值,如果您在 Azure 函数中使用 App Service Key Vault References,密钥值也将在启动阶段从 Key Vault 加载。如果您在 Azure 门户上修改应用程序设置,您的 Azure 功能将重新启动以重新加载所有设置:
这些是我的测试步骤:
我的代码很简单,就是从应用设置中获取key值:
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static async Task<IActionResult> Run(HttpRequest req,ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string key = Environment.GetEnvironmentVariable("key");
return new OkObjectResult(key);
}
如您所见,我没有涉及 SecretVersion
,因此我可以在 KeyVault 中获取最新值。如果您在应用程序设置中涉及 SecretVersion
,正如@Alex AIT 所说,您也应该使用最新的 SecretVersion 修改应用程序设置。
然后我将 Key Vault 中的 key4demo 值更新为:78910
Azure 函数回复 503 这意味着它正在重新启动:
不,不需要重新启动功能或任何东西。 Key Vault 过着独立的生活。
,更新: Versions no longer required for Key Vault references in App Service and Azure Functions
如果参考中未指定版本,则应用将使用 Key Vault 中存在的最新版本。当更新版本可用时,例如轮换事件,应用程序将自动更新并在一天内开始使用最新版本。对应用所做的任何配置更改都会导致所有引用机密的最新版本立即更新。
如果使用 App Service Key Vault References,则需要更新 Azure 门户中的配置值。重新启动不会改变任何事情。这是因为您正在引用一个实际的秘密版本。如果您更新密钥,您将获得一个新版本。
当前需要版本。轮换机密时,您需要更新应用程序配置中的版本
另见Azure Function App use latest version of Key Vault Secret via Application Settings