我们遇到Blob触发功能的问题。 该函数是用javascript编写的。 我们很难为其实施自动部署流程。 以下是我们遵循的步骤。
使用ARM模板和参数文件在现有资源组中创建功能应用程序
New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile $templateFilePath -TemplateParameterFile $armParametersFilePath;
通过Kudu
api部署功能代码
Invoke-RestMethod -Uri "$apiUrl" -Method Put -InFile "$functionCodeArchivePath" -Credential $credentials -DisableKeepAlive -UserAgent "powershell/1.0" -TimeoutSec 600
通过kudu api运行npm install
命令
Invoke-RestMethod -Uri "$apiCommandUrl" -Method Post -Body $json -DisableKeepAlive -ContentType "application/json" -Credential $credentials -UserAgent "powershell/1.0" -TimeoutSec 1200
在最后一步 - 获取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的连接有关。
答案 0 :(得分:4)
看起来Blob触发不可靠,至少根据这个页面:How to use Azure blob storage with the WebJobs SDK
WebJobs SDK扫描日志文件以监视新的或更改的blob。这个过程不是实时的;在创建blob后几分钟或更长时间内,函数可能不会被触发。此外,存储日志是在“尽力而为”的基础上创建的; 无法保证将捕获所有事件。在某些情况下,可能会遗漏日志。如果blob触发器的速度和可靠性限制对于您的应用程序是不可接受的,建议的方法是在创建blob时创建队列消息,并使用QueueTrigger属性而不是BlobTrigger 属性。处理blob的函数。
您应该更改逻辑并为您放入Blob存储的每个文件创建一个队列消息