簡體   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