S3 Bucket AWS CLI 需要很长时间才能获取特定文件

S3 Bucket AWS CLI takes forever to get specific files

我有一个日志存档桶,那个桶有超过 250 万个对象。

我想下载一些特定时间段的文件。为此,我尝试了不同的方法,但都失败了。

我的观察是那些查询从最旧的文件开始,但我寻找的文件是最新的。所以要花很长时间才能找到它们。

aws s3 sync s3://mybucket  . --exclude "*" --include "2021.12.2*" --include "2021.12.3*" --include "2022.01.01*"  

我也尝试过使用 S3 浏览器和 CloudBerry。同样的问题。尝试使用同一 AWS 网络内的 EC2。同样的问题。

一个Amazon S3 bucket中2.5m+个objects确实是一个很大的objects!

列出 Amazon S3 存储桶的内容时,S3 API 每个 API 调用仅 returns 1000 个对象。因此,当 AWS CLI(或 CloudBerry 等)列出 S3 存储桶中的对象时,它需要 2500+ API 次调用。这很可能是请求花费这么长时间的原因(并且可能由于缺乏存储结果的内存而失败)。

您可以通过指定 前缀 来减少时间,这会减少从 API 调用返回的对象数量。如果您要复制的对象都在 sub-folder.

中,这将有所帮助

否则,您可以使用 Amazon S3 Inventory,它可以提供列出所有对象的每日或每周 CSV 文件。然后,您可以从该 CSV 文件中提取要复制的对象列表(例如,使用 Excel 或编写程序来解析该文件)。然后,使用 aws s3 cp 或从编程语言专门复制这些对象。例如,Python 程序可以解析脚本,然后使用 download_file() 下载每个所需的对象。

一个简单的事实是 flat-structure 包含 2.5m+ 对象的 Amazon S3 存储桶总是很难列出。如果可能,我鼓励您使用 'folders' 构建存储桶,这样您一次只需要列出存储桶的一部分。