发布后似乎没有触发 Azure Function App

Posted

技术标签:

【中文标题】发布后似乎没有触发 Azure Function App【英文标题】:Azure Function App doesn't seem to trigger after Publish 【发布时间】:2018-11-17 08:58:34 【问题描述】:

在 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”指的是定义 Blobstorage 端点的 local.settings.json。此设置会自动部署到 Azure,但即使我手动设置此连接,该功能也不会被触发。经过多次尝试自己解决这个问题后,我决定向这个网站上的聪明人寻求建议。这是一个错误还是我错过了什么?在将其发布到 Azure 后,我可以做些什么来确保我的函数确实(可靠地)被触发?提前致谢。

【问题讨论】:

您是如何部署的?您的连接字符串 AzureWebJobsStorage 以及您的所有设置都已在功能应用的 appsettings 刀片中设置 我以两种不同的方式部署到该函数。第一次部署是通过 VSTS 中的构建和发布,第二次部署是通过在 Visual Studio 中发布。我的 local.settings 文件中的所有设置(例如 AzureWebJobsStorage)也在我的应用程序设置中设置。我也尝试将 'AzureWebJobsStorage 作为连接字符串而不是应用程序设置,但没有任何成功 您是否有针对同一个存储帐户运行此函数的多个实例? 我确实有多个由同一个存储帐户触发的功能,是的,但为了测试部署的功能,我禁用了所有这些功能。我认为这应该可以防止它们影响我部署的功能。 是的,功能主机获得了租约,所以可能是这个问题......我想你将不得不添加更多细节或在 github 上打开一个问题 【参考方案1】:

你可能会遇到这个:

如果您的函数应用在消耗计划中,则在函数应用空闲时处理新 blob 最多可能会延迟 10 分钟。为了避免这种冷启动延迟,您可以切换到启用 Always On 的应用服务计划,或使用不同的触发器类型。

取自Azure Blob storage bindings for Azure Functions

触发该功能的另一种解决方案是使用Event Grid。

编辑: 另外,请注意 BlobTrigger 是轮询触发器。没有发现任何变化的时间越长,轮询之间的时间就越长。这会给您带来可能长达数分钟的延迟。

如果受监视的 Blob 容器包含超过 10,000 个 Blob,则 Functions 运行时会扫描日志文件以监视新的或更改的 Blob。此过程可能会导致延迟。在创建 Blob 几分钟或更长时间后,函数可能不会被触发。

更多信息Azure Blob storage bindings for Azure Functions - polling

【讨论】:

你好 rick,即使有延迟,该功能似乎也没有触发。我已经在使用 Always On 设置(我已经尝试了一些事情),但这并不能解决我的问题。 Blob 容器是一个轮询触发器这一事实对我来说是新的,这是一件值得稍后记住的好事情,但目前它似乎不会影响我的触发器。出于研究目的,我使用了一个空的 blob 存储,因此我可以轻松监控何时/是否有新的上传触发了我的函数【参考方案2】:

我在 Azure 服务总线触发的函数中遇到了这个问题,并且能够通过查看存储资源管理器中的函数日志找到问题。就我而言,这是一个错误命名的设置导致了问题。

【讨论】:

在我的情况下,发布存储帐户连接字符串不同后,我只是添加了与本地相同的连接字符串。有效。谢谢。

以上是关于发布后似乎没有触发 Azure Function App的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有绑定的情况下运行 Azure Function

Azure Function App Python Blob 触发器巨大的文件大小

如何知道 Azure Function 已重启?

Azure Function QueueTrigger - 将新项目放回队列

Azure 流分析无法触发 Azure Function

C# Azure Function - CosmosDB 触发和解析文档数据