如何使用Azure Function设置并持久化app setting配置值?
关于Azure Function修改并持久化App Setting配置的解答
你目前通过AddOptions绑定IConfiguration的方式读取的配置是只读的,直接修改绑定后的SomeSettingClass实例或者IConfiguration里的节点值,只会修改当前内存中的临时值,重启函数实例后就会恢复原始值,也不会持久化到配置源中。
不同场景下的可行方案如下:
场景1:本地开发环境修改local.settings.json配置
你可以直接通过文件操作修改local.settings.json的对应配置节点,修改后如果Azure Function Core Tools开启了配置自动重载就会实时生效,否则需要手动重启本地函数实例。参考代码:
// 读取local.settings.json文件 var settingsPath = Path.Combine(Environment.CurrentDirectory, "local.settings.json"); var jsonContent = await File.ReadAllTextAsync(settingsPath); var settingsRoot = JsonSerializer.Deserialize<JsonObject>(jsonContent); // 修改Values下的对应配置项 if (settingsRoot.TryGetPropertyValue("Values", out var valuesNode) && valuesNode is JsonObject valuesObj) { valuesObj["需要修改的配置键"] = "新的配置值"; } // 写回文件 await File.WriteAllTextAsync(settingsPath, JsonSerializer.Serialize(settingsRoot, new JsonSerializerOptions{WriteIndented = true}));
场景2:云端部署后修改Function App的App Setting
如果要持久化修改云端的App Setting配置,不能直接改内存里的IConfiguration,需要通过Azure管理SDK操作Function App资源,操作步骤如下:
- 前置配置:在Azure门户的Function App「标识」菜单中开启系统托管标识,给该标识分配当前Function App的「网站参与者」角色权限。
- 代码实现:先安装NuGet包
Azure.ResourceManager.AppService,再参考以下代码:
using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.AppService; // 初始化Arm客户端 var armClient = new ArmClient(new DefaultAzureCredential()); // 拼接当前Function App的资源ID var functionAppId = WebSiteResource.CreateResourceIdentifier("你的订阅ID", "资源组名", "Function App名称"); var functionApp = armClient.GetWebSiteResource(functionAppId); // 获取当前App Setting配置 var appSettings = await functionApp.GetApplicationSettingsAsync(); // 修改对应配置值 appSettings.Value.Properties["需要修改的配置键"] = "新的配置值"; // 提交更新到云端 await functionApp.UpdateApplicationSettingsAsync(appSettings.Value);
注意:云端修改App Setting会触发Function App整体重启,所有正在运行的函数实例都会被终止,如果你不能接受重启对业务的影响,不推荐用这种方式存储动态变更的配置。
更推荐的替代方案
如果你的需求只是存储运行时需要动态修改、后续读取的配置,不需要真的修改App Setting的话,更建议用以下方案:
- 用Azure App Configuration服务存储动态配置,支持配置热重载,不需要重启函数
- 用Azure Table Storage或者Blob存储自定义配置,读写灵活,不会影响函数运行
内容的提问来源于stack exchange,提问作者nlv
相关产品推荐
相关产品推荐

