【问题标题】:Aws Boto3 Client (Low level) vs Resource (High Level)Aws Boto3 客户端(低级)与资源(高级)
【发布时间】:2018-05-07 06:19:06
【问题描述】:
我正在使用 AWS Boto3 SDK 进行一些自动化。我不知道 Client(low-level) 和 Resource(high-level) 有什么区别
这里的 Low-Level(Client) 和 High-Level(Resource) 有什么区别?
【问题讨论】:
标签:
python-2.7
amazon-web-services
sdk
boto3
【解决方案1】:
根据我的理解,这里提到的参考是针对 API 编程中使用的低级和高级接口。就这样吧,
high-level interface, are designed to enable the programmer to write code in shorter amount of time and to be less involved with the details of the software module or hardware device that is performing the required services. Which is in direct contrast with the other one.
low-level interface, are more detailed allowing the programmer to manipulate functions within a software module or within hardware at very granular level.
在 AWS 中,当您使用 Boto3 进行 API 编程时,客户端提供的低级接口与服务 API 非常接近。这意味着,所有服务操作都将由客户端支持。而资源提供了一个高级接口,这意味着与客户端提供的原始低级调用不同。
【讨论】:
-
那么为什么人们建议在你想 update_table 时使用 dyno.client 并在执行 crud 操作时使用 dyno.resource 呢?我想通过添加 GSL 来更新表格并解决了一个错误并遵循 - codeolives.com/2020/05/22/… 链接。
【解决方案2】:
-
客户端为 AWS 服务提供低级接口。它们的定义由 botocore 库中的 JSON 服务描述生成。 botocore 包在 boto3 和 AWS CLI 之间共享。
检索现有存储桶列表
s3 = boto3.client("s3")
响应 = s3.list_buckets()
输出存储桶名称
print("现有存储桶:")
响应中的存储桶['Buckets']:
print(f'{bucket["Name"]}')
-
与客户端相比,资源是更高级别的抽象。它们是从 boto 库本身中存在的 JSON 资源描述生成的。例如。这是 S3 的资源定义。
资源提供了一个面向对象的接口,用于与各种 AWS 服务进行交互。资源可以像下面这样实例化:
# S3 bucket identifier
s3 = boto3.resource("s3")
bucket = s3.Bucket(name="my_bucket")
总而言之,与客户端相比,资源是 AWS 服务的更高级别抽象。资源是使用 boto3 的推荐模式,因为您在与 AWS 服务交互时不必担心很多底层细节。因此,使用 Resources 编写的代码往往更简单。
但是,资源并非适用于所有 AWS 服务。在这种情况下,别无选择,只能使用客户端。