Azure函数BlobTrigger无法在新子文件夹中的新文件上触发

时间:2018-08-09 09:30:14

标签: azure-storage-blobs azure-functions

我的Azure功能在一夜之间变得无响应(新的Blob触发器不会触发),并且当我在Azure门户用户界面中单击该作业时再次开始工作。

更新8月9日11:17 -$ logs每小时创建一个新的子文件夹时,这些新文件不会触发BlobTrigger enter image description here

  

创建新文件夹时,新文件夹不会触发BlobTrigger   文件在该文件夹中创建。

结束更新

public static class Function2
{
    [FunctionName("Function2")]
    public static void Run([BlobTrigger("$logs/{name}", Connection = "ddavemstorage")]
    Stream blobStream, string name, TraceWriter log, ExecutionContext context)

我可以验证$ logs文件是否正在定期写入(使用Azure Storage Explorer),但不要在一夜之间触发BlobTrigger。

enter image description here

截屏时间为1016。30分钟前,我查看了门户网站Azure Function UI。然后,它处理了0600UTC(实际上是我的时间为0700)中的日志文件。然后它处理了所有其他错过的事情。

  • 计划:消费:0小
  • 运行时:1.0.11913.0(.NET完整版)

这可能与$ logs文件夹有关。几年前无法监控。 https://github.com/Azure/azure-webjobs-sdk/issues/715

enter image description here

$ logs文件夹正在按预期方式写入。

2 个答案:

答案 0 :(得分:0)

在存储中,子文件夹是虚拟的,与实际的文件系统不同。解决此问题的方法和可能的解决方案是通过在function.json中提供子文件夹名称(例如:namekey)来包含完整路径。

最近发布了一个类似的话题,也讨论相同的问题,您可以在here上查看其更多信息。

答案 1 :(得分:0)

通过每5分钟创建一个类型为TimerTrigger的第二个函数,我发现第一个BlobTrigger函数现在可以按预期拾取文件。

public static class TestTimer
{
    [FunctionName("TestTimer")]
    // runs every 5 minutes
    public static void Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, TraceWriter log)
    {
        log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
    }
}