Microsoft AZURE blob触发函数间歇性地工作

时间:2017-03-03 17:19:36

标签: azure azure-functions

我们遇到Blob触发功能的问题。 该函数是用javascript编写的。 我们很难为其实施自动部署流程。 以下是我们遵循的步骤。

  1. 使用ARM模板和参数文件在现有资源组中创建功能应用程序 New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile $templateFilePath -TemplateParameterFile $armParametersFilePath;

  2. 通过Kudu api部署功能代码 Invoke-RestMethod -Uri "$apiUrl" -Method Put -InFile "$functionCodeArchivePath" -Credential $credentials -DisableKeepAlive -UserAgent "powershell/1.0" -TimeoutSec 600

  3. 通过kudu api运行npm install命令 Invoke-RestMethod -Uri "$apiCommandUrl" -Method Post -Body $json -DisableKeepAlive -ContentType "application/json" -Credential $credentials -UserAgent "powershell/1.0" -TimeoutSec 1200

  4. 在最后一步 - 获取Kudu上的依赖项(npm install)的命令超时,这似乎是known issue

    为了解决这个问题,我们开始使用WebPack将所有依赖项打包到this approach之后的一个JavaScript文件中。

    现在部署速度更快,但功能似乎没有正确执行。

    当我们将文件放入我们的blob存储帐户时,该函数被触发,该函数似乎不会始终记录执行跟踪。 有些运行具有完整日志,并且运行中只有Function started而没有任何自定义日志语句。

    以下是来自Kudu的日志(D:\ home \ LogFiles \ Application \ Functions \ Function \ functionname>)

    2017-03-03T11:24:33.835 Function started (Id=77b5b022-eee0-45e0-8e14-15e89de59835)
    2017-03-03T11:24:35.167 JavaScript blob trigger function started with blob:
    2017-03-03T11:24:35.167 Name: _1486988111937 
     Blob Size: 8926 Bytes
    2017-03-03T11:24:35.167 Extracting file
    2017-03-03T11:24:35.167 JavaScript blob trigger function processed blob 
     Name: _1486988111937 
     Blob Size: 8926 Bytes
    2017-03-03T11:24:35.183 Function completed (Success, Id=77b5b022-eee0-45e0-8e14-15e89de59835)
    2017-03-03T11:24:35.292 { Error: [** SENSITIVE ERROR MESSAGE, INTERNAL TO FUNCTION, REMOVED **] }
    2017-03-03T11:28:34.929 Function started (Id=8bd96186-50bc-43b0-916c-fefe4bd0cf51)
    2017-03-03T11:38:18.302 Function started (Id=7967cc93-73cf-4acf-8428-20b0c70bbac9)
    2017-03-03T11:39:32.235 Function started (Id=a0abb823-9497-429d-b477-4f7a9421132e)
    2017-03-03T11:49:25.164 Function started (Id=ab16b1d9-114c-4718-aab2-ffc426cfbc98)
    2017-03-03T11:53:51.172 Function started (Id=87ed29bc-122f-46d2-a658-d933330580c9)
    2017-03-03T11:56:06.512 Function started (Id=23f8ee3f-cda0-45a3-8dd0-4babe9e45e4e)
    2017-03-03T12:02:58.886 Function started (Id=c7ef7ad5-62b8-4b43-a043-bc394d9b02f5)
    

    PS:我们的功能代码是获取blob,压缩文件,解压缩并为压缩文件夹中的每个文件进行API调用。日志中标有[** SENSITIVE ERROR MESSAGE, INTERNAL TO FUNCTION, REMOVED **]的错误与我们API的连接有关。

1 个答案:

答案 0 :(得分:4)

看起来Blob触发不可靠,至少根据这个页面:How to use Azure blob storage with the WebJobs SDK

  

WebJobs SDK扫描日志文件以监视新的或更改的blob。这个过程不是实时的;在创建blob后几分钟或更长时间内,函数可能不会被触发。此外,存储日志是在“尽力而为”的基础上创建的; 无法保证将捕获所有事件。在某些情况下,可能会遗漏日志。如果blob触发器的速度和可靠性限制对于您的应用程序是不可接受的,建议的方法是在创建blob时创建队列消息,并使用QueueTrigger属性而不是BlobTrigger 属性。处理blob的函数。

您应该更改逻辑并为您放入Blob存储的每个文件创建一个队列消息