aws 中最便宜的方法 move/obtain 基于日期的文件子集
Cheapest way in aws to move/obtain a subset of files based on date
我的主要问题是:
我如何才能根据日期范围移动文件,而不会引起客户端 api 付费调用?
背景:
我想将 AWS S3 存储桶中的一部分文件下载到 linux 服务器上,但在一个文件夹中有数百万个文件,除了序列号外没有任何区别;根据创建日期,我需要其中的一部分。 (实际上,文件内部是一个事件时间戳,所以我想先按创建日期减少体积)。
坦率地说,我不知道每次我在该数据集上执行 ls 时会产生什么成本,例如用于测试。
目前我正在考虑:
aws s3api list-objects --bucket "${S3_BUCKET}" --prefix "${path_from}" --query "Contents[?LastModified>='${low_extract_date}'].{Key: Key}"
但如果我理解正确的话,那是客户端。所以我想先根据创建日期将相关文件移动到不同的文件夹。
然后 运行 aws S3 ls 在那个集合上。
这可能吗?
因为那样的话,我会:
- 将文件移动到另一个文件夹,同时限制在我感兴趣的日期范围 (2-5%)
- 列出所有这些文件(据我了解,这是产生成本的地方?),然后提取它们(并将它们移动到存档)
- 删除子文件夹
或:
- 将存储桶同步到新存储桶
- 从该存储桶中删除我不需要的所有文件(早于日期 X)
- 运行 ls 在剩余的集合上
或:
其他方式?
而且:这比使用查询列出文件便宜吗?
谢谢!
PS 澄清一下:我想做一个服务器端操作来减少集合,然后列出结果。
我认为一个好的方法如下:
- 如果您的实例在 VPC 中,请为 S3 创建一个 VPC 端点,以允许直接私有连接到 Amazon S3,而不是通过互联网
- 移动您想要的对象键,包括前缀(最好是
Y/m/d
),例如prefix/randomfile.txt
可能会变成 2020/07/04/randomfile.txt
。如果您打算废弃其余文件,则将其移至新存储桶而不是同一个存储桶中。
- 根据前缀获取对象(对于本月的所有文件,前缀为
2020/07
您可以从 CLI 使用当前语法移动文件
aws s3 mv s3://bucketname/prefix/randomfile.txt s3://bucketname/2020/07/04/randomfile.txt
要复制特定前缀的文件,您可以运行在 CLI 上执行以下操作
aws s3 cp s3://bucketname/2020/07 .
要获取特定日期的文件,您可以运行以下
aws s3api list-objects-v2 --bucket bucketname --query 'Contents[?contains(LastModified, `$DATE`)]'
运行宁的结果需要通过 CLI运行
我的主要问题是:
我如何才能根据日期范围移动文件,而不会引起客户端 api 付费调用?
背景:
我想将 AWS S3 存储桶中的一部分文件下载到 linux 服务器上,但在一个文件夹中有数百万个文件,除了序列号外没有任何区别;根据创建日期,我需要其中的一部分。 (实际上,文件内部是一个事件时间戳,所以我想先按创建日期减少体积)。
坦率地说,我不知道每次我在该数据集上执行 ls 时会产生什么成本,例如用于测试。
目前我正在考虑:
aws s3api list-objects --bucket "${S3_BUCKET}" --prefix "${path_from}" --query "Contents[?LastModified>='${low_extract_date}'].{Key: Key}"
但如果我理解正确的话,那是客户端。所以我想先根据创建日期将相关文件移动到不同的文件夹。
然后 运行 aws S3 ls 在那个集合上。
这可能吗?
因为那样的话,我会:
- 将文件移动到另一个文件夹,同时限制在我感兴趣的日期范围 (2-5%)
- 列出所有这些文件(据我了解,这是产生成本的地方?),然后提取它们(并将它们移动到存档)
- 删除子文件夹
或:
- 将存储桶同步到新存储桶
- 从该存储桶中删除我不需要的所有文件(早于日期 X)
- 运行 ls 在剩余的集合上
或: 其他方式?
而且:这比使用查询列出文件便宜吗?
谢谢!
PS 澄清一下:我想做一个服务器端操作来减少集合,然后列出结果。
我认为一个好的方法如下:
- 如果您的实例在 VPC 中,请为 S3 创建一个 VPC 端点,以允许直接私有连接到 Amazon S3,而不是通过互联网
- 移动您想要的对象键,包括前缀(最好是
Y/m/d
),例如prefix/randomfile.txt
可能会变成2020/07/04/randomfile.txt
。如果您打算废弃其余文件,则将其移至新存储桶而不是同一个存储桶中。 - 根据前缀获取对象(对于本月的所有文件,前缀为
2020/07
您可以从 CLI 使用当前语法移动文件
aws s3 mv s3://bucketname/prefix/randomfile.txt s3://bucketname/2020/07/04/randomfile.txt
要复制特定前缀的文件,您可以运行在 CLI 上执行以下操作
aws s3 cp s3://bucketname/2020/07 .
要获取特定日期的文件,您可以运行以下
aws s3api list-objects-v2 --bucket bucketname --query 'Contents[?contains(LastModified, `$DATE`)]'
运行宁的结果需要通过 CLI运行