使用boto3库的Amazons3的get请求是什么



我正在使用AWS lambda和Amazon s3进行存储。亚马逊s3对获取bucket请求有一定的定价。但考虑使用Pythonboto3,得到请求是什么呢。例如,我想获得100个最后上传的对象,但我在一个bucket中有1000个对象。以下是我做的

for obj in list(buck.objects.all())[-100:]:
key = obj.key
body = obj.get()['Body'].read()
#something

我的问题是list(buck.objects.all(((是否意味着我得到了所有1000个对象并为1000个get请求付费,或者我真的只得到了100个我想要的对象?

TL;DR,它将执行ListObjects,然后执行100个GetObjects。

资源代表一个面向对象的AmazonWebServices(AWS(接口。它们提供了比服务客户端进行的原始低级调用更高级别的抽象。

所以答案是否定的,资源将按需发出请求。在您的示例中,由于您编写了一个针对100个对象的for循环,它将执行ListObjects低级操作。然后,由于obj.key信息已经在ListObjects呼叫中提供,因此它将不会进行像HeadObject那样的额外呼叫。接下来,由于您为100个对象中的每一个请求了对象内容,Boto3将为每个对象执行一个GetObject

最新更新