首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将CosmosDB连接字符串注入Azure函数V4 CosmosDB输入/输出绑定?

将CosmosDB连接字符串注入Azure函数V4 CosmosDB输入/输出绑定?
EN

Stack Overflow用户
提问于 2021-12-09 16:15:41
回答 1查看 498关注 0票数 3

有没有人知道是否可以从Azure函数配置刀片中传递/注入const连接字符串(或其他配置值)?

以这个具有约束力的签名为例:

代码语言:javascript
运行
复制
[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,但是这不允许在绑定中使用它们,因为它们是通过DI传入的(这很棒,但不是很好)。

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

代码语言:javascript
运行
复制
[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...
}

希望最终结果是可以通过配置刀片配置绑定字段(如下所示):

  • “%宇宙%”
  • “%宇宙容器-排放%”
  • ConnectionStringSetting = "CosmosDBConnection“

PS:我看到了一些与此非常接近的问题,但没有处理绑定属性问题。

EN

回答 1

Stack Overflow用户

发布于 2021-12-09 16:43:55

所有函数绑定(宇宙、存储、EventHub等)都由信任中的值(也称为binding expressions )的相同替换机制管理。

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

例如,在DevOps管道中,您可以拥有覆盖local.settings.json值的环境变量。

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

代码语言:javascript
运行
复制
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文件中定义的任何内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70293179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档