列出AWS S3存储桶中的所有文件的成本是多少? 受欢迎可能完美排序

问题描述

我正在用python编写脚本,需要在存储桶中获取最新的修改文件(使用前缀),但据我所知,我无法直接从python进行查询(至少使用boto3) ,因此我必须检索存储桶中每个对象的信息。

我将不得不查询几千个文件,而且我不想在帐单上感到惊讶。

如果我执行查询以检索存储桶中所有对象的元数据,以便稍后在本地对它们进行排序,那么我将按单个请求收费,还是将其计为每个对象的请求?

提前谢谢大家

解决方法

受欢迎

人们常用的一种方法是通过s3api将每1000个对象的多个调用合并为一个LIST请求,然后使用--query定义您的过滤操作,例如:

aws s3api list-objects-v2 --bucket your-bucket-name --query 'Contents[?contains(LastModified,`$DATE`)]'

尽管请记住,这不是一个好的解决方案,其原因有两个:

  1. 这不能很好地扩展,尤其是在使用大存储桶时,并且在最大程度地减少数据出站方面也无济于事。
  2. 它不会减少S3 API调用的次数,因为--query参数不是在服务器端执行的。恰好是此aws-cli命令的功能。为了说明这一点,它是在boto3中的样子,如您所见,我们仍然需要在客户端进行查询:
import boto3

client = boto3.client('s3',region_name='us-east-1')

response = client.list_objects_v2(Bucket='your-bucket-name')

results = sorted(response['Contents'],key=lambda item: item['LastModified'])[-1])

可能

您可能*可能会 *根据您的特定用例来做的事情是利用S3事件通知将事件自动发布到SQS,这使您有机会轮询所有事件S3对象事件以及它们的元数据信息(更轻量级)。这仍然会花费一些钱,并且如果您已经有一个现有的大型存储桶,那么它将无法正常工作。加上您必须主动轮询消息的事实,因为消息不会持续太久。

完美(排序)

在我看来,这听起来像是S3广告资源的好用例。它将为您提供每日文件,该文件由对象列表及其基于您的规范的元数据信息组成。参见https://docs.aws.amazon.com/AmazonS3/latest/user-guide/configure-inventory.html

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...