我有一个AWS Lambda函数,该函数采用ZipCode并查找半径内的位置。通过在一系列业务流程中运行返回的每个位置,可以对其进行进一步处理。我的测试数据包含针对每个请求返回的24个位置。每个请求都有一个GUID,代表我正在使用console.log语句添加代码的请求,这样我就可以通过CloudWatch日志来跟踪发生的事情。
每当我运行lambda函数时,CloudWatch日志都会在过程完成之前结束。随后,我使用另一个Guid向Lambda发出了另一个请求,并且在CLoudWatch日志中看到了先前请求的条目。
CloudWatch为什么不保持活动状态并在整个过程中捕获日志条目? -我假设Lambda函数会在CloudWatch Log中显示“ End”时结束。
先前请求中的日志条目如何与后续请求混在一起出现?
更新
包含24个位置的数据构造来自 async 方法。 24个位置中的每个位置都是一个任务。因为 async 是未来结果的保证,所以lambda函数是否有可能在 async 被关闭之前关闭满意?这可以解释为什么在注册“ End”之前在CLoudWatch日志中仅输出24个位置中的少数几个。关于在“结束”事件发生之前处理/记录的24个中的多少并不一致。后续通话似乎从原始通话中收取了余额。
答案 0 :(得分:0)
我发现了问题。我遇到的问题与在代码中使用“任务”有关。任务有望在将来的某个时刻接收数据。我可以肯定的是,在所有任务都实现之前,我的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日志中。
我不确定使用此方法是否有影响。任何见解都会受到赞赏。
谢谢。