如何使用来自功能应用程序中存储的应用程序值中的值设置CosmosDBTrigger参数?

时间:2019-07-17 22:36:38

标签: c# azure azure-functions azure-cosmosdb decorator

我正在研究Azure功能,每次在CosmosDB中更新文档时都会触发该功能。我已经成功完成了它,但是现在我想避免在CosmosDBTrigger装饰器中对值进行硬编码。

正如我在另一篇SO帖子中所看到的,我已经尝试使用'%'符号引用存储的应用程序值。但是,它似乎不起作用。帖子是:Is it possible to configure Azure C# function DocumentDB attribute arguments?

这是我要努力工作的解决方案:

 public static void Run([CosmosDBTrigger(
            databaseName: "%LogLevelsCachingDatabaseName%",
            collectionName: "%LogLevelsCachingCollectionName%",
            ConnectionStringSetting = "%LogLevelsCachingDatabaseSetting%",
            LeaseCollectionName = "%LogLevelsCachingLeaseCollectionName%",
            StartFromBeginning = true
            )]IReadOnlyList<Document> input, ILogger log)
        {
            if (input == null || input.Count <= 0) return;

工作解决方案完全相同,但是'%'之间的值是硬编码值。

这是我将Azure函数发布到Azure DevOps时的输出。请注意,ConnectionStringSetting值有效,因为我能够运行Azure函数,而硬编码值没有任何问题。

错误:

  

函数(CacheLogLevels)错误:Microsoft.Azure.WebJobs.Host:错误索引方法'CacheLogLevels'。 Microsoft.Azure.WebJobs.Extensions.CosmosDB:无法为数据库%LogLevelsCachingDatabaseName%中具有租约%LogLevelsCachingLeaseCollectionName%的数据库%LogLevelsCachingDatabaseName%中的%LogLevelsCachingCollectionName%创建集合信息:无法解析属性'CosmosDBTriggerAttribute.ConnectionStringSetting'的应用程序设置。确保应用设置存在并且具有有效值。 Microsoft.Azure.WebJobs.Extensions.CosmosDB:无法解析属性“ CosmosDBTriggerAttribute.ConnectionStringSetting”的应用程序设置。确保应用设置存在并且具有有效值。   会话ID:34dd30479d6a440caf063493bd1abc3d

时间戳:2019-07-17T22:35:01.376Z

我想使用来自Azure Function App配置的值:

Azure Function应用配置

enter image description here

非常感谢您阅读我的问题,祝您有美好的一天!

维托里奥

2 个答案:

答案 0 :(得分:1)

同意@vladimir

ConnectionStringSettings和LeaseConnectionStringSetting参数自动将值解析为应用设置

有两种方法可以做到这一点:

  1. 通过azure门户手动更新值 enter image description here

  2. 通过Azure门户上的发布管道进行设置 enter image description here

希望有帮助

答案 1 :(得分:0)

ConnectionStringSettings LeaseConnectionStringSetting 参数自动将值解析为应用程序设置,没有百分号(请参见trigger configuration):

public static void Run([CosmosDBTrigger(
            databaseName: "%LogLevelsCachingDatabaseName%",
            collectionName: "%LogLevelsCachingCollectionName%",
            ConnectionStringSetting = "LogLevelsCachingDatabaseSetting", // <-- remove %-signs
            LeaseCollectionName = "%LogLevelsCachingLeaseCollectionName%",
            StartFromBeginning = true
            )]IReadOnlyList<Document> input, ILogger log)