英文:
How to override Azure App Configuration with apsettings.json file for certain properties using .NET 7?
问题
I have 4 .NET 7 微服务部署在 Azure Kubernetes 服务中。对于本地开发环境,每个微服务都有 appsettings.json 和 appsettings.Development.json 文件。在这 4 个微服务中,appsettings.json 文件中有一些属性是通用的,还有一些是唯一的。为了集中管理所有应用程序相关的属性,我考虑利用 Azure 应用配置。它允许将应用程序配置集中到一个地方,并让不同的应用程序使用它。
我可以通过在 Azure 密钥保管库中管理的连接字符串连接到 Azure 应用配置。
例如,我有下面的设置,不同的微服务有不同的值:
{
"AppOptions": {
"Name": "Microservice1.API"
},
"SwaggerOptions": {
"Title": "Microservice1 Service",
"Description": "Microservice1 服务的开放 API 文档。",
"Name": "xxxxxxx",
"Email": ""
}
}
对于 Microservice 2,上述值是不同的,其他两个微服务也是如此。
有人可以建议我如何覆盖 Azure 应用配置属性并考虑 appsettings.json 文件中的值吗?
如果有更好的解决方法,请与我分享。
有人可以帮助我解决这个问题吗?
英文:
I have 4 .NET 7 microservices deployed in Azure Kubernetes Service. For local development environment, each microservice has appsettings.json and appsettings.Development.json file. Among these 4 microservices there are few properties in the appsettings.json file which are common and few are unique. In order to manage all the application related properties centrally I thought of leveraging Azure App Configuration It allows to centralize application configuration to a single place and have different applications use it.
I am able to connect to the Azure App Configuration via the connectionstring which is managed in Azure Key Vault.
For example, I have the below setting which has different value for different microservice
{
"AppOptions": {
"Name": "Microservice1.API"
},
"SwaggerOptions": {
"Title": "Microservice1 Service",
"Description": "Open API Documentation of Microservice1 Service API.",
"Name": "xxxxxxx",
"Email": ""
}
}
The above values are different in case of Microservice 2 and the same applies for other two microservices.
Can anyone suggest me what is the way to override the Azure App Configuration properties and consider the values in the appsettings.json file?
Please share with me in case there is any other better way to deal with this issue
Can anyone please help me to fix this issue
答案1
得分: 1
I think the best practice is using labeling for app configuration. so that you can define a label per microservices.
For example in app configuration:
And in the code you can retrieve them like this:
builder.Configuration.AddAzureAppConfiguration(options =>
{
options. Connect(connectionString)
.Select(KeyFilter.Any, "Microservice1");
});
The above code is for "Microservice1" and should be the same for other microservices with their label names.
英文:
I think the best practice is using labeling for app configuration. so that you can define a label per microservices.
For example in app configuration:
And in the code you can retrieve them like this:
builder.Configuration.AddAzureAppConfiguration(options =>
{
options. Connect(connectionString)
.Select(KeyFilter.Any, "Microservice1");
});
The above code is for Microservice1
and should be the same for other microservices with their label names.
答案2
得分: 0
在应用配置中,我建议你在键名前加上微服务的名称。例如,
键名 | 值 |
---|---|
Microservice1:AppOptions:Name | Microservice1.API |
Microservice2:AppOptions:Name | Microservice2.API |
然后在每个微服务中,你加载以该微服务开头的键,并修剪掉该前缀。这样,你的应用代码就不必处理前缀。例如,
builder.Configuration.AddAzureAppConfiguration(options =>
{
options.Connect(connectionString)
.Select("Microservice1:*", LabelFilter.Null)
.TrimKeyPrefix("Microservice1:");
});
对于本地开发,你可以在调用 AddAzureAppConfiguration(...)
之后 调用 AddJsonFile("appsettings.json")
。然后,appsettings.json 中的内容将覆盖从应用配置加载的内容。或者,如果你检测到处于开发环境,例如基于一个环境变量,你可以完全跳过调用 AddAzureAppConfiguration(...)
。
英文:
In App Configuration, I recommend you prefix the key name with the microservice name. For example,
Key | Value |
---|---|
Microservice1:AppOptions:Name | Microservice1.API |
Microservice2:AppOptions:Name | Microservice2.API |
Then in each of your microservice, you load keys that start with that microservice and trim that prefix. This way, you app code doesn't have to deal with the prefix. For example,
builder.Configuration.AddAzureAppConfiguration(options =>
{
options.Connect(connectionString)
.Select("Microservice1:*", LabelFilter.Null)
.TrimKeyPrefix("Microservice1:");
});
For local development, you can call AddJsonFile("appsettings.json")
after calling the AddAzureAppConfiguration(...)
. Then what's in the appsettings.json will override what's loaded from App Configuration. Alternatively, you can skip calling AddAzureAppConfiguration(...)
altogether if you detect you are in the dev environment, for example, based on an environment variable.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论