为Azurefunction生成输出blob的名称
使用Azurefunction的绑定选项,可以根据从触发器派生的参数(例如,触发该function的队列消息)指定要写入的Blob的名称; 文档显示了一个例子。
我的问题是:处理blob名称事先不知道的情况的最佳方法是什么,但实际上是作为函数执行的一部分计算的?
并且相关:如果函数可能会或可能不会产生输出blob(或多个输出blob!),根据其计算结果怎么办?
据我所知,Azure Function的绑定机制在这些情况下没有多大帮助,最简单的方法是引用一个用azure blob编写“经典方式”的程序集。 但是有更惯用的方式吗?
实际上你可以在C#Azure Functions中使用它,我们在repo中有一个跟踪项,以便为Node.js函数启用它。 我们很快就会到达那里。
下面是一个示例工作函数,它使用运行时指定的路径绑定到blob。 由于Azurefunction是基于Azure WebJobs SDK构建的,因此您会注意到这依赖于使用您可能不熟悉的WebJobs SDK Binder
。 有关IBinder
/ Binder
更多文档,请参阅WebJobs SDK。 在WebJobs SDK中,声明性属性用于绑定(例如QueueAttribute
/ TableAttribute
/ BlobAttribute
等)。 您可以通过Binder
在运行时指定所有这些。 在Azure Functions中,我们使用外部元数据来描述绑定,但在此高级方案中,您可以使用混合。 请注意,使用Binder
时, function.json
没有相应的绑定。 有关Binder
动态绑定的更多详细信息,请参阅此 SO问题/答案。
一般来说,你会发现很多很棒的WebJobs SDKfunction都可以在Azurefunction中使用 – 我们的文档需要赶上让人们意识到这一点:)
另外需要注意的是:有一些内置支持为输出生成随机新标识符。 例如,如果要将输出blob路径设置为test-output / {rand-guid} ,系统将自动为您生成新ID。 如果这符合您的需求,那么您不需要Binder
。
using System; using System.IO; using System.Net; using Microsoft.Azure.WebJobs; public static async Task Run(HttpRequestMessage req, Binder binder, TraceWriter log) { log.Verbose($"C# HTTP function processed RequestUri={req.RequestUri}"); using (var writer = await binder.BindAsync( new BlobAttribute("test-output/result"))) { writer.Write("Hello World!!"); } return new HttpResponseMessage(HttpStatusCode.OK); }
对于第二个问题,如果要有条件地写入输出绑定,只是不要为绑定分配任何值 – 不应生成任何输出。
- 配置entity framework以从Azure CloudConfiguration文件中选择连接字符串?
- 从azure blob存储文件生成Zip文件
- 在Windows Azure上部署WCF服务
- 使用ADAL C#作为机密用户/守护程序服务器/服务器到服务器 – 401未经授权
- 元素下面的元素在Azure中无法识别
- 从用于Google API的Azure网站中的p12证书生成X509Certificate2时出现502错误
- 服务结构服务远程处理
- CloudBlockBlob.DownloadToStream与DownloadRangeToStream
- 如何使用Azure流畅的资源管理注册资源提供程序?