有没有人知道是否可以从Azure函数配置刀片中传递/注入const连接字符串(或其他配置值)?
以这个具有约束力的签名为例:
[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。这并不是我真正想要的,因为我有以下函数,它使用数据:
[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...
}
希望最终结果是可以通过配置刀片配置绑定字段(如下所示):
PS:我看到了一些与此非常接近的问题,但没有处理绑定属性问题。
发布于 2021-12-09 16:43:55
所有函数绑定(宇宙、存储、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文件中定义的任何内容。
https://stackoverflow.com/questions/70293179
复制相似问题