Amazon web services 使用boto3库对AmazonS3的get请求是什么?

Amazon web services 使用boto3库对AmazonS3的get请求是什么?,amazon-web-services,amazon-s3,boto3,Amazon Web Services,Amazon S3,Boto3,我使用AWS lambda和Amazon s3进行存储。AmazonS3对bucket的get请求有一些定价。但考虑到使用Python boto3,get请求是什么呢。例如,我想得到100个最后上传的对象,但我有1000个对象在一个桶。我就是这么做的 for obj in list(buck.objects.all())[-100:]: key = obj.key body = obj.get()['Body'].read() #something 我的问题是list(

我使用AWS lambda和Amazon s3进行存储。AmazonS3对bucket的get请求有一些定价。但考虑到使用Python boto3,get请求是什么呢。例如,我想得到100个最后上传的对象,但我有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,它将执行一个
列表对象
,然后执行100个
获取对象
s

资源表示AmazonWeb服务(AWS)的面向对象接口。它们提供了比服务客户机发出的原始低级调用更高级别的抽象


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

TL;DR,它将执行一个
列表对象
,然后执行100个
获取对象
s

资源表示AmazonWeb服务(AWS)的面向对象接口。它们提供了比服务客户机发出的原始低级调用更高级别的抽象


所以答案是否定的,资源将根据需要发出请求。在您的示例中,由于您编写了一个超过100个对象的for循环,因此它将执行
ListObjects
低级操作。由于
ListObjects
调用中已经提供了
obj.key
信息,因此它不会进行额外调用,如
HeadObject
。接下来,由于您为100个对象中的每一个请求了对象内容,Boto3将为它们中的每一个执行一个
GetObject

您将执行1x列表请求,最多执行100x get请求。您将执行1x列表请求,最多执行100x get请求。