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' 构建存储桶,这样您一次只需要列出存储桶的一部分。
我有一个日志存档桶,那个桶有超过 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' 构建存储桶,这样您一次只需要列出存储桶的一部分。