Jus*_*ing 5 continuous-integration visual-studio c#-3.0 azure-blob-storage azure-functions
在 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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
“AzureWebJobsStorage”指的是定义了 Blobstorage 端点的 local.settings.json。此设置会自动部署到 Azure,但即使我手动设置此连接,也不会触发该功能。经过多次尝试自己解决这个问题后,我决定向本网站上的聪明人寻求建议。这是一个错误还是我错过了什么?在将其发布到 Azure 后,我该怎么做才能确保我的函数确实(可靠地)被触发?提前致谢。
你可能会碰到这个:
如果您的函数应用处于消耗计划中,并且函数应用处于空闲状态,则处理新 Blob 时可能会出现最多 10 分钟的延迟。为了避免这种冷启动延迟,您可以切换到启用了“始终开启”的应用服务计划,或使用不同的触发器类型。
取自Azure Functions 的 Azure Blob 存储绑定
触发该函数的另一种解决方案是使用事件网格。
编辑:
另外,请注意 BlobTrigger 是轮询触发器。没有发现任何变化的时间越长,民意调查之间的时间间隔就越长。这会给您带来一些延迟,可能长达几分钟。
如果正在监视的 Blob 容器包含超过 10,000 个 Blob,Functions 运行时将扫描日志文件以监视新的或更改的 Blob。此过程可能会导致延迟。创建 blob 后几分钟或更长时间可能不会触发函数。
详细信息请参阅Azure Functions 的 Azure Blob 存储绑定 - 轮询
| 归档时间: |
|
| 查看次数: |
2704 次 |
| 最近记录: |