当前位置: 首页 > 知识库问答 >
问题:

触发器不再冷启动Azure功能(消耗)

羊舌迪
2023-03-14

在过去的14个月里,我有一个Azure功能运行没有问题。每当在blob存储容器中创建新的blob时,它都使用BlobTrigger来运行。BLOB是间歇性创建的,因此该功能几乎完全依赖于冷启动(无需考虑延迟)。然而,截至一周前,BlobTrigger不再启动冷启动(如中所示,3天后该功能仍然没有运行)。但是当我访问门户中的功能时。为了唤醒它,BlobTrigger会为存储中的每个blob触发一次。

有趣的是,我至少有6个月没有对这个函数进行任何更改,所以我很难确定原因。

关于Azure功能:

  • 消费计划
  • 运行时版本3.2.0.0
  • Blob存储触发器
  • 我使用Java /Maven部署
  • 功能代码(触发器)
  @FunctionName("veninv")
     public void blob(
      @BlobTrigger(
      name = "blob",
      dataType = "binary",
      path = "veninv-prod/{name}",
      connection = "AzureWebJobsStorage") 
      byte[] content,
      @BindingName("name") String blobname,
      final ExecutionContext context
      )

AzureWebJobsStorage是一种应用程序设置,包含到StorageV2帐户的连接字符串。

预期行为:在指定的存储容器中创建新blob时,函数的BlobTrigger启动冷启动并唤醒函数。

实际行为:当创建一个新blob时,函数的BlobTrigger不会启动冷启动。相反,函数必须在portal.azure中手动唤醒,之后BlobTrigger将为每个blob触发一次。

到目前为止,我所做的事情:

  • “诊断和解决问题”在我的函数中没有显示错误。
  • 我已确认函数设置为消耗计划
  • 我重启了Function App
  • 我已经完成了一个HTTP POST请求来同步触发器
  • 我启用了Scale Controller日志记录,它显示了函数上次运行后的以下四个日志:

2021-10-14T20:35:11.0707779Z添加或更新触发器。{"类别":"ScaleControlllerLogs","AppName":"veninv-Prod","时间戳":"2021-10-14T20:35:11.0707779Z","TriggersHash":"35243DA6","SlotName":"生产","FunctionName":"veninv","Action":"刷新触发器","触发器更新":"[{"连接":"AzureWebJobStorage","函数名":"veninv","路径":"veninv-prod\/{name}","dataType":"二进制","类型":"bbloTrigger","方向":"in","name":"blob","useMonitor": null}]"}

2021-10-14T20:35:11.0707779Z使用ConnectionString创建CloudStorageAccount。{"类别":"ScaleControlllerLogs","AppName":"veninv-Prod","时间戳":"2021-10-14T20:35:11.0707779Z","TriggersHash":"35243DA6","SlotName":"生产","FunctionName":"veninv","Action":"TriggerInformation"}

2021-10-14T20:58:41.7386529Z实例计数已更改{"类别":"ScaleControlllerLogs"、"AppName":"veninv-Prod"、"时间戳":"2021-10-14T20:58:41.7386529Z"、"SlotName":"生产"、"Action":"ScaleResult"、"Reason":"由于所有函数都处于空闲状态或html" target="_blank">负载稳步下降,因此删除了一个实例。"、"货币即时计数":"0"、"上一个即时计数":"1"}

2021 10月14日20:58:41.7386529Z App不再分配给任何实例,并可能随时空闲。{“Category”:“ScaleControllerLogs”,“AppName”:“veninv Prod”,“Timestamp”:“2021-10-14T20:58:41.7386529Z”,“SlotName”:“Production”,“Action”:“triggerminformation”,“FunctionName”:“N/A”,“TriggersHash”:“35243DA6”}

共有1个答案

尉迟正奇
2023-03-14

根据本文件,冷启动是

未使用的应用程序需要更长时间才能启动的现象。

在消耗计划中,Azure Functions主机的实例会根据传入事件的数量动态添加和删除。

如果您编写了大量代码并部署在消耗计划上,这需要大量内存和资源来加载以执行它可能需要更多时间。所以您面临的问题可能取决于代码、资源、函数主机。

由于您在解决此问题时没有遇到任何错误,而不是使用Blob触发器,因此您可能希望在此场景中使用事件网格触发器。当客户端通过调用blob RESTAPI创建、替换或删除blob时,会触发这些事件。

 类似资料:
  • 我有一个azure函数v3,用C#写的,用类库的方法。 < li >该功能由blob存储触发。 < li >该功能正在使用消费计划。 问题是冷启动可能长达30分钟!我已经查阅了这个链接的文档 但是没有关于预期冷起动正时的具体数字。 一个有趣的观察是,如果我导航到门户,并点击刷新按钮: 那么该功能会立即被触发。 这是正常的预期行为吗 您能给我指一下任何明确说明消费计划中冷启动时间为0-30-50分钟

  • 我在Azure上有一个函数,包含以下function.json文件: 除非我错了,否则这个函数应该每天运行一次,在凌晨3点? 这是函数的签名: 我到底做错了什么?当我手动触发(在门户中单击“运行”)时,该功能工作正常,但它在今天凌晨3点没有运行,昨天也没有运行。 编辑:所以,正如建议的那样,我已经将计划更改为付费计划,并且我选择了一个动态计划。日志仍然没有说明功能在今天早上3点被激活。

  • 就像我们对在Azure blob存储中创建或删除的blob有blob触发器或事件触发器一样,我需要有一个在文件共享中上传或创建文件时触发的函数。Blob存储触发器、事件网格触发器不适用于Azure文件共享。你能建议任何自定义触发器函数或任何其他在文件共享上使用触发器函数的方法吗?

  • 创建了Azure函数,该函数是在Visual Studio中触发并从Visual Studio发布到Azure的服务总线。 每当消息进入队列时,手动运行时,该函数在本地正常运行。但我们的期望是,当消息在队列中时,函数应该自动触发。 我只是手动添加一条新消息,并查看日志,如果函数被自动触发,但它不是。当我检查应用程序洞察时,我发现下面的错误日志 函数“ProcessVideos”的侦听器无法启动。服

  • 直到最近,我的Discord机器人一直工作得很好,我没有对代码做任何更改,它与工作时处于相同的状态。但是出于某种原因,现在当我尝试通过控制台启动bot时(在我的情况下): 节点my-discord-bot.js 它什么也不做,没有错误,只是空白,我应该收到一个确认,说‘准备好了!’我的机器人应该上线,但这一切都不会发生。 下面是我用来启动我的bot(直到最近才开始工作)的代码: 我真的不知道问题出

  • 当我的函数方法签名如下时,我有一个成功触发的v3 WebJob: 然而,当我添加一个输出blob时,BlobTrigger永远不会触发。 下面的文档如下:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob#output