如何在Azure函数应用程序中在运行时更新应用程序设置中的单个值

3

我正在构建我的第一个Function App,所以如果我问了一个愚蠢的问题,请记住这一点:)

我需要在运行时存储一些设置。 在标准桌面应用程序中,我可以轻松地使用以下方式更新app.config:

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

config.AppSettings.Settings["UserId"].Value = "myUserId";     
config.Save(ConfigurationSaveMode.Modified);

但是在 Function App 中,我使用ConfigurationBuilder加载配置:

var config = new ConfigurationBuilder()
    .SetBasePath(context.FunctionAppDirectory)
    .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables()
    .Build();

该配置对象无法进行更新。在本地开发时,可以更新local.settings.json文件,但在Azure上运行时,所有内容都从“应用设置”(环境变量)中加载。

我的问题是:如何更新与我的函数应用相关联的“应用设置”中的单个值?

我找到了一个类似的问题,但其中的解决方案需要注册AAD中的应用程序,并且它会更新所有设置,而不仅仅是一个值。


1
你能解释一下为什么要将值存储在appsettings中吗?这个值需要在函数运行期间持久化,还是需要在所有后续的函数运行中保留?我问这个问题是因为也许有一个更好的地方来存储这个值,而不是应用程序设置。 - nldev
@nldev 是的,这个值需要被持久化(特别是当我部署新版本的函数或重新启动它时)。我知道可以使用 SQL 进行设置,但正如我在问题中提到的,我来自桌面应用程序世界。我将有 3 个函数在同一个资源组内运行,因此它们都将共享相同的应用程序设置。一个函数(TimeTriggered)必须查询外部服务并将返回的值存储在应用程序设置中,另一个函数将使用该值。应用程序设置是我的第一个想法。也许有更好的地方? - Misiu
既然您已经在使用Azure函数,我建议您使用Azure表存储来存储键值对,这很容易上手。(https://learn.microsoft.com/en-us/azure/visual-studio/vs-storage-aspnet5-getting-started-tables) 如果这些设置实际上是密钥,您还可以查看Azure Key Vault(一旦设置完成,与Appsettings非常容易配合使用)。我认为Application settings.json更适合像ServiceRetyAmount等内容。 - nldev
@nldev 我会看一下表存储,但我想避免在Azure中创建额外的“东西”来存储一个简单的值。我不会存储多个值,只有一个字符串。这样做是否过度杀伤力?应用程序设置看起来是这种情况的理想位置。 - Misiu
我只在与Azure Functions相关的单元测试中使用过这个,但是您可以尝试像这样通过代码更新它:Environment.SetEnvironmentVariable("SettingsName", "SettingValue")。不确定是否被允许。 - Marc
显示剩余2条评论
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接