gpt4 book ai didi

c# - 将 CosmosDB const 连接字符串注入(inject) Azure Function V4 CosmosDB 输入/输出绑定(bind)?

转载 作者:行者123 更新时间:2023-12-05 03:33:46 24 4
gpt4 key购买 nike

有人知道是否可以从 Azure Functions 配置 Blade 传递/注入(inject) const 连接字符串(或其他配置值)?

以这个绑定(bind)签名为例:

[Function("APIHttpInput")]
[CosmosDBOutput("%CosmosDb%", "%CosmosContainerOut%", ConnectionStringSetting = "CosmosDBConnection", CreateIfNotExists = true)]
public static async Task<object> RunAsync(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "cosmosin")] HttpRequestData req,
FunctionContext executionContext)
{
var logger = executionContext.GetLogger("APIHttpInput");
logger.LogInformation("C# HTTP trigger function processed a request.");
// etc...
}

它从 local.settings.json 获取连接字符串,这很好,它可以以这种方式文件工作,但它们不会在默认 CI/CD 管道中被覆盖,也不意味着投入生产。

我已阅读官方文档:https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#customizing-configuration-sources但这不允许在绑定(bind)中使用它们,因为它们是通过 DI 传入的(这很好,但不完全是)。

另一种方法是手动将它们写入 Cosmos 并使用 DI。这并不是我真正想要的,因为我有以下消耗数据的函数:

[Function("APICosmosTrigger")]
//[CosmosDBOutput("%CosmosDb%", "%CosmosContainerOut%", ConnectionStringSetting = "CosmosDBConnection", CreateIfNotExists = true)]
public static void RunCosmos([CosmosDBTrigger(
databaseName: "%CosmosDb%",
collectionName: "%CosmosContainerOut%",
ConnectionStringSetting = "CosmosDBConnection",
LeaseCollectionName = "leases")] IReadOnlyList<Record> leads,
FunctionContext executionContext,
IRestClient client)
{
// do stuff...
}

最终结果有望是可以通过配置 Blade 配置绑定(bind)字段(如下):

  • “%CosmosDb%”
  • “%CosmosContainerOut%”
  • ConnectionStringSetting = "CosmosDBConnection"

PS:我见过一些与此非常接近的问题,但没有处理绑定(bind)属性问题。

最佳答案

所有函数绑定(bind)(Cosmos、Storage、EventHub 等)均由配置中的值的相同替换机制控制,也称为 binding expressions .

通常 local.settings.json 文件不会被推送/发布,因为它是环境本地的。

例如,您可以在 DevOps 管道中使用环境变量来覆盖 local.settings.json 值。

您链接的文章正在初始化配置,如下所示:

builder.ConfigurationBuilder
.AddJsonFile(Path.Combine(context.ApplicationRootPath, "appsettings.json"), optional: true, reloadOnChange: false)
.AddJsonFile(Path.Combine(context.ApplicationRootPath, $"appsettings.{context.EnvironmentName}.json"), optional: true, reloadOnChange: false)
.AddEnvironmentVariables();

因此,如果您在 DevOps 中定义环境变量,您应该能够覆盖 json 文件中定义的任何内容。

关于c# - 将 CosmosDB const 连接字符串注入(inject) Azure Function V4 CosmosDB 输入/输出绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70293179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com