我在 Ubuntu 16.04 LTS 中使用 Python 2.7.12。我正在通过以下链接学习如何使用 boto3:https://boto3.readthedocs.io/en/latest/guide/quickstart.html#using-boto-3 .我的疑问是何时使用资源、客户端或 session ,以及它们各自的功能。
最佳答案
Client 和 Resource 是 boto3 SDK 中用于发出 AWS 服务请求的两个不同抽象。如果您想使用 boto3 对 AWS 服务进行 API 调用,则可以通过客户端或资源进行。
您通常会选择使用客户端抽象或资源抽象,但您可以根据需要同时使用两者。我在下面概述了不同之处,以帮助读者决定使用哪个。
Session 在很大程度上与 Client 和 Resource 的概念正交(但两者都使用)。
这里有一些关于 Client 的更详细信息, Resource , 和 Session都是关于。
客户:
以下是对 S3 存储桶对象进行客户端级访问的示例:
import boto3
client = boto3.client('s3')
response = client.list_objects_v2(Bucket='mybucket')
for content in response['Contents']:
obj_dict = client.get_object(Bucket='mybucket', Key=content['Key'])
print(content['Key'], obj_dict['LastModified'])
注意:此客户端级代码最多只能列出 1000 个对象。您必须使用 paginator ,或者实现你自己的循环,如果有超过 1000 个对象,使用继续标记重复调用 list_objects_v2()
。
好的,这就是低级客户端接口(interface)。现在进入更高级别(更抽象)的资源接口(interface)。
资源:
以下是使用资源级访问 S3 存储桶对象的等效示例:
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket')
for obj in bucket.objects.all():
print(obj.key, obj.last_modified)
注意:在这种情况下,您不必进行第二次 API 调用来获取对象;它们可以作为存储桶上的集合提供给您。这些子资源的集合是延迟加载的。
您可以看到 Resource
版本的代码更简单、更紧凑,并且具有更多功能(例如,它为您进行分页并公开属性而不是原始字典)。如果你想包含分页,Client
版本的代码实际上会比上面显示的更复杂。
最后,讨论对客户端和资源都至关重要的 session ,以及两者如何访问 AWS 凭证。
session :
了解更多关于这些 boto3 概念的有用资源是 introductory re:Invent video .
https://stackoverflow.com/questions/42809096/