【问题标题】:What considers to be a get request for Amazon s3 using boto3 library?什么被认为是使用 boto3 库对 Amazon s3 的获取请求?
【发布时间】:2020-05-13 00:29:51
【问题描述】:

我使用 AWS lambda 和 Amazon s3 进行存储。 Amazon s3 对获取桶的请求有一些定价。但是考虑使用 Python boto3 的获取请求是什么。例如,我想获取 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 个获取请求付费,或者我真的只得到了我想要的 100 个对象?

【问题讨论】:

  • 您发出 1 次列表请求,最多 100 次获取请求。

标签: amazon-web-services amazon-s3 boto3


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-08-20
    • 2012-03-03
    • 1970-01-01
    • 2016-04-01
    • 2013-10-02
    • 2012-07-18
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多