繁体   English   中英

AWS Lambda函数未运行完毕

[英]AWS Lambda Function not running to completion

我有一个AWS Lambda函数,该函数采用ZipCode并查找半径内的位置。 通过在一系列业务流程中运行返回的每个位置,可以对其进行进一步处理。 我的测试数据包含针对每个请求返回的24个位置。 每个请求都有一个GUID,代表我正在使用console.log语句添加代码的请求,因此我可以通过CloudWatch日志跟踪正在发生的事情。

每当我运行lambda函数时,CloudWatch日志都会在过程完成之前结束。 随后,我使用不同的Guid向Lambda发出了另一个请求,并且在CLoudWatch日志中看到了先前请求的条目。

为什么CloudWatch不能保持活动状态并在整个过程中捕获日志条目? - 我假设Lambda函数会在CloudWatch Log中显示“ End”时结束。

来自先前请求的日志条目如何与后续请求混在一起出现?

更新

包含24个位置的数据构造来自异步方法。 24个位置中的每个位置都是一个任务。 因为异步是对未来结果的承诺,所以lambda函数是否有可能在满足异步之前关闭? 这可以解释为什么在注册“ End”之前在CLoudWatch日志中仅输出24个位置中的少数几个。 关于在“结束”事件发生之前处理/记录的24个中的多少并不一致。 后续通话似乎从原始通话中收取了余额。

我发现了问题。 我遇到的问题与在代码中使用“任务”有关。 任务有望在将来的某个时刻接收数据。 我可以肯定的是,在所有任务都实现之前,我的Lambda函数已经退出。 我添加了以下内容以强制Lambda等待所有任务完成:

...

var futureList = new List<Task>();

foreach (var range in outerRange.TrySplit(_config.HashKeyLength))
{
    var task = RunGeoQuery(geoQueryRequest, geoQueryResult, range, cts.Token);
    taskList.Add(task);
}

Task.WhenAll(taskList).Wait();

...

添加Task.WhenALl(taskList).Wait()之后,我的Lambda函数处理了所有24个位置并反映在CloudWatch日志中。

我不确定使用此方法是否有影响。 任何见解都表示赞赏。

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM