Ale*_*ejo 1 amazon-s3 amazon-web-services aws-billing
我正在用 python 编写脚本,我需要在存储桶中获取最新修改的文件(使用前缀),但据我所知,我不能直接从 python 执行该查询(至少使用 boto3),所以我必须检索存储桶中每个对象的信息。
我将不得不对数千个文件进行一些查询,而且我不想在我的账单中得到任何惊喜。
如果我执行查询以检索存储桶中所有对象的元数据,以便稍后在本地对它们进行排序,我会按单个请求收费还是按每个对象计算一个请求?
谢谢大家
人们使用的一种常见方法是通过s3api将多个调用合并为每 1000 个对象的单个 LIST 请求,然后用于--query定义您的过滤操作,例如:
aws s3api list-objects-v2 --bucket your-bucket-name --query 'Contents[?contains(LastModified, `$DATE`)]'
Run Code Online (Sandbox Code Playgroud)
但请记住,这不是一个好的解决方案,原因有两个:
--query参数不在服务器端执行。它恰好是这个 aws-cli 命令的一个特性。为了说明这一点,这就是它的外观boto3,正如您所看到的,我们仍然需要在客户端查询它:aws s3api list-objects-v2 --bucket your-bucket-name --query 'Contents[?contains(LastModified, `$DATE`)]'
Run Code Online (Sandbox Code Playgroud)
根据您的特定用例,您*可能*做的一件事是利用 S3 事件通知自动发布一个事件SQS,让您有机会轮询所有 S3 对象事件及其更轻量级的元数据信息。这仍然会花费一些钱,如果您已经有一个现有的大桶开始,它就行不通。加上您必须主动轮询消息的事实,因为它们不会持续太久。
这听起来像是 S3 Inventory 的一个很好的用例。它将为您提供每日文件,其中包含基于您的规范的对象列表及其元数据信息。请参阅https://docs.aws.amazon.com/AmazonS3/latest/user-guide/configure-inventory.html
| 归档时间: |
|
| 查看次数: |
984 次 |
| 最近记录: |