¿Alguien sabe si es posible pasar/inyectar una cadena de conexión constante (u otro valor de configuración) desde la hoja de configuración de Azure Functions?
Tome esta firma vinculante, por ejemplo:
[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... } Obtiene la cadena de conexión de local.settings.json , lo cual está bien, funciona de esa manera, pero no se sobrescriben en la canalización de CI/CD predeterminada y no están destinados a ser enviados a producción.
He leído la documentación oficial: https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#customizing-configuration-sources pero esto no permite utilizarlos en el enlace porque se pasan a través de DI (lo cual es genial, pero no del todo).
Una alternativa es escribirlos manualmente en Cosmos y usar DI. Esto no es realmente lo que quiero porque tengo la siguiente función que consume datos:
[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... }Con suerte, el resultado final sería que los campos de enlace (a continuación) se pueden configurar a través de la hoja de configuración:
PD: He visto algunas preguntas muy cercanas a esto, pero no se trata del problema del atributo vinculante.
Todos los enlaces de funciones (Cosmos, Storage, EventHub, etc.) se rigen por la misma mecánica de reemplazo para los valores en las configuraciones, también conocidas como expresiones de enlace .
Normalmente, el archivo local.settings.json no se inserta/publica porque es local para el entorno.
Podría, en su canalización de DevOps, tener variables de entorno que anulen los valores de local.settings.json , por ejemplo.
El artículo que vincula está inicializando la configuración de esta manera:
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();Entonces, si define una variable de entorno en DevOps, debería poder anular lo que esté definido en el archivo json.