【问题标题】:AWS lambda timeourt exceptionAWS lambda 超时异常
【发布时间】:2019-11-17 16:08:33
【问题描述】:

我们有一个 .Net Core lambda 函数,在它之下,我们有一个异步 for 循环,它为每个循环项调用一个存储过程。它工作正常,但有时会引发异常

在操作完成之前命令超时已过期

我们在 AWS 云观察日志中发现了这个异常。请在这里提出可能的原因。

 locations.ForEach(async location =>
                        {
                                await _dataServiceWrite.SaveDeletedLocationDelegateAssignment(location.LocationId, obj.DelegateId, hsId, userId);
                                await Task.Delay(100);
                        });

【问题讨论】:

  • 增加超时并多尝试几次。是 Sql 的超时吗?在 AWS lambda 中运行它?还是只是 c# lambda 表达式?
  • .ForEach 看起来是做任何异步操作的不好方法
  • 这个 sn-p 在 .Net Core AWS lambda 函数中。

标签: c# .net for-loop async-await aws-lambda


【解决方案1】:

AWS lambda 的最大时间限制为 15 分钟,超过此时间就会超时。这是 Lambda 中的可配置设置,请查看是否可以将其增加到最大值以满足您的要求。不过,当需要处理更多记录时,该架构可能无法扩展。

【讨论】:

  • 我们已经为 AWS lambda 函数设置了 15 分钟的最大时间。
  • 请重新审视这个过程的架构。一种解决方案是使用 SQS 推送所有请求并使用 SQS 侦听器 (AWS Lambda) 拉取请求并进行处理。该过程完成后,可以使用另一个 SQS 推送所有已处理请求的更新状态。带有 SQS SDK 的 UI 侦听器可以侦听这个新队列并相应地呈现 UI。
  • 其实很抱歉,不要提,我们有相同的流程,我们有一个 SNS -> SQS -> 和 lambda 从队列中一次选择一个项目并处理它。问题是在 lambda 内处理的位置数量很大
  • 请评估 1. AWS 批处理或 2. AWS Glue
【解决方案2】:

另一种选择是调用另一个 lambda 函数,该函数将异步执行处理。

调用另一个 lambda 的 API 是 Invoke,您需要提供 InvokeInput 作为输入参数。

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 2021-06-08
    • 1970-01-01
    • 2021-08-01
    • 2020-01-15
    • 2022-09-29
    • 2021-03-07
    • 2017-09-20
    相关资源
    最近更新 更多