【AWS】Lambda S3 listobjects 超過1000筆 (二)

16 3月, 2020

【AWS】Lambda S3 listobjects 超過1000筆 (二)




暨之前s3取得1000筆以上數據的作法之後
目前有另一種繞s3數據的作法,listObjectV2



之前的做法是可以將數據完整跑完沒錯。

但是問題是在結合其他aws服務的時候,可能會有問題


譬如假設是以apigetway + lambda的方式,去取得所有s3物件列表。

以lambda來說是可以設置超時時間(可以設置很長)

是沒有什麼問題的。

但是會有問題的就出在apigetway,

因為apigetway的超時最大值,不能超過29秒

假設今天s3的list資料量已經很巨大。

又有需求需要透過apigetway+lambda的形式來獲取的話。

就會死在apigetway的超時配置。


不過這個問題,aws也有發覺到了。

上篇文章使用的是listobjects,這算是aws的第一代版本。

後面為了避免這種執行過久的問題。

由於v1版本的分頁,只能在lambda進行下一頁

後來Aws出了v2版本,可以藉由token分頁的形式,

當listobject respon時,可以使用IsTruncated來判斷是否有下一頁

並且可以取得token(NextContinuationToken)

來進行獲取下一頁"頁碼"的概念。

實做的方式如下:


方式變更為只取得該頁的資訊,不要全部一次繞完

否則資料量超過1萬6千筆以上時,可能會讓apigetway超時

改採用頁碼(nextToken)直接回應出去,

有需要去查找在用頁碼去指定就可以了。



張貼留言