.net - 如何在 Azure Function v1 (.NET Framework) 中使用 Azure 应用配置服务
问题描述
TL;DR:如何使用 Azure Function v1 中的托管服务标识通过 Azure 应用配置进行配置?
我正在尝试使用 .NET Framework 从 Azure Function v1 中使用 Azure App Configuration。理想情况下,我想使用ConfigurationBuilders。
这意味着SimpleJsonConfigBuilder
在开发机器上运行时使用该类,但AzureAppConfigurationBuilder
在 Azure 中托管时使用。
我已经让它与我们的 Web API 项目一起使用,但是在涉及 Azure Functions 时我被卡住了。
我看到的问题是 Azure Function 主机正在使用它自己的 web.config,因此无法使用我将在 Web 项目中使用的配置进行修改。
<configuration>
<configSections>
<section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
</configSections>
<configBuilders>
<builders>
<add name="Environment" type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Environment, Version=1.0.0.0, Culture=neutral" />
<add name="Json" optional="true" mode="Greedy" jsonFile="~/App_Data/settings.json" type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Json, Version=1.0.0.0, Culture=neutral" />
<add name="AzureViaConnectionString" optional="true" mode="Greedy" connectionString="${AppConfigConnectionString}" type="Microsoft.Configuration.ConfigurationBuilders.AzureAppConfigurationBuilder, Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration" />
<add name="AzureViaMsi" optional="true" mode="Greedy" endPoint="${AppConfigEndpoint}" type="Microsoft.Configuration.ConfigurationBuilders.AzureAppConfigurationBuilder, Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration" />
</builders>
</configBuilders>
<appSettings configBuilders="Environment,Json">
...
即使我不使用 xml 配置,我假设这是不可能的,有没有办法修改ConfigurationManager.AppSettings
ConfigBuilders 似乎发生的情况?
ConfigurationManager.AppSettings
在我访问的时候是只读的,所以我不能自己更新它。
我们确实有一个IAppSettings
接口,我为此编写了一个实现以使用 Azure 应用程序配置 REST api。但是,这意味着将与服务关联的机密存储在通常的函数应用设置中,而不是能够使用托管服务标识。
此外,函数运行时需要一些其他设置才能执行我的任何代码,这意味着我无法从标准位置移动所有设置。
迁移到 Azure Functions V2 目前不可行。
解决方案
1.安装包Microsoft.Extensions.Configuration.AzureAppConfiguration
2.在VS中创建Function .net,使用如下代码:
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration(Environment.GetEnvironmentVariable("ConnectionString"));
var config = builder.Build();
string message = config["TestApp:Settings:Messagejoey"];
return message == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "Hello " + message);
}
更多细节可以参考这篇文章(也适用于.net框架)。
推荐阅读
- android - Flutter“正在运行 Gradle 任务 'assembleDebug'...”(启动 Gradle 守护程序)永无止境
- azure-iot-hub - 从 github 下载 - 似乎缺少一个目录 (azure-iot-sdk-c)
- openpgp - 无法使用从密钥服务器 (keys.openpgp.org) 检索到的密钥 (gpgme)
- ui-automation - 无法通过剧作家执行空手道脚本
- azure - Azure AD 对本地应用程序进行身份验证(令牌转换服务和类似服务)
- javascript - 根据 2 个值和 1 对对象的 Javascript 数组进行排序
- solidity - 通过 javascript 计算 uniswap 对地址
- typescript - 如何根据泛型输入类型返回类型?
- javascript - Safari 14“Safari 无法下载此文件”
- javascript - 使用 Cheerio 和 javascript 抓取内容