在Azure中,我开发了一个功能(应用服务),当新的csv文件放在特定的存储帐户中时会触发该功能。该功能是在Azure中开发的,每次上传新的csv文件时功能都没有问题。但是考虑到CI / CD,我决定将我的开发过程从Azure转移到Visual Studio(2017)。
代码在本地运行没有任何问题,但是一旦我将代码发布到Azure(通过VSTS),挑战就开始了。当新的csv文件上传到存储帐户时,似乎触发器未被激活。顺便提一下,这个功能确实触发了,但是我无法确定原因,或者重新创建它。
为了使问题更容易理解,我将代码简化为Blobtrigger和一些日志记录。此外,我删除了VSTS中的构建,并通过Visual Studio 2017直接发布了我的构建,但结果相似。代码在本地工作正常,但在发布后,函数不会被触发(或非常偶然地发生)。
我使用的代码:
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
namespace TestApp
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([BlobTrigger("csv-files-in/{name}.csv", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, TraceWriter log)
{
log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}
}
}
“AzureWebJobsStorage”是指local.settings.json,其中定义了Blobstorage的端点。此设置自动部署到Azure,但即使我手动设置此连接,也不会触发该功能。经过多次尝试自己解决这个问题后,我决定向本网站上的聪明人询问建议。这是一个错误还是我错过了什么?在将此功能发布到Azure后,我该怎么做才能确保我的功能(可靠地)被触发?提前谢谢。
答案 0 :(得分:0)
你可能会碰到这个:
如果您的功能应用程序处于消费计划中,则在功能应用程序闲置时,处理新blob可能会有10分钟的延迟。要避免此冷启动延迟,您可以切换到启用了Always On的App Service计划,或使用其他触发类型。
取自Azure Blob storage bindings for Azure Functions
触发该功能的另一种解决方案是使用Event Grid。
修改强>
另外,请注意BlobTrigger是一个轮询触发器。没有发现任何变化的时间越长,民意调查之间的时间就越长。这会给你一些延迟,可能会持续几分钟。
的更多信息如果受监视的blob容器包含超过10,000个blob,则Functions运行时会扫描日志文件以监视新的或已更改的blob。此过程可能会导致延迟。在创建blob后几分钟或更长时间内,函数可能不会被触发。
答案 1 :(得分:0)
我遇到了Azure Service Bus触发功能的问题,并且能够通过查看Storage Explorer中的功能日志来找到问题。就我而言,这是一个错误命名的设置,导致了问题。