当前位置: 首页 > 工具软件 > boto > 使用案例 >

【Boto3学习笔记】session client resource的区别和使用

孔鸿宝
2023-12-01

Boto3是什么

通过适用于 Python 的 AWS 开发工具包 boto3 , 可以支持您轻松将 Python 应用程序、库或脚本与 AWS 服务进行集成,包括 Amazon S3、Amazon EC2 和 Amazon DynamoDB 等。
Boto 是AWS的基于python的SDK(当然还支持其他语言的SDK,例如Ruby, Java等),Boto允许开发人员编写软件时使用亚马逊等服务像S3和EC2等,Boto提供了简单,面向对象的API,也提供了低等级的服务接入。

安装和配置

安装boto3和awscli:pip install boto3 awscli
配置aws:aws configure

根据提示输入access_key_id, secret_access_key和 region。

其中access_key_id, secret_access_key的默认存储位置为:~/.aws/credentials:

[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY

region的存储位置为~/.aws/config:
[default]
region=us-east-1

快速开始

如下代码,首先创建一个s3服务,然后查看全部Bucket,最后上传一个文件。

import boto3

# Let's use Amazon S3
s3 = boto3.resource('s3')
# Print out bucket names
for bucket in s3.buckets.all():
    print(bucket.name)
# Upload a new file
data = open('test.jpg', 'rb')
s3.Bucket('my-bucket').put_object(Key='test.jpg', Body=data)

Session&client&resource

Boto3 有两个独特的 API 级别。client(或“低级别”)API 提供对基础 HTTP API 操作的一对一映射。 resource API 隐藏显式网络调用,而是提供资源对象和集合以访问属性并执行操作。
其中低级 API 是和 AWS 的 HTTP 接口一一对应的,通过 boto3.client(“xxx”) 暴露。高级接口是面向对象的,更加易于使用,通过 boto3.resource(“xxx”) 暴露,美中不足是不一定覆盖了所有的 API.

  1. Client级别的接口则是返回Dictionary来表示查询到的资源信息。而Resource级别的接口是对Client级别的接口进行了面向对象的封装,接口的返回值大部分都是Resource对象(如果返回值是某个Resource的信息的话),我们可以对返回的对象再进行操作(比如删除,修改等)。所以一般通过如下代码来得到Resource级别的API对象和Client级别的API对象:
      res = boto3.resource('service name')
      client = boto3.client('service name')
  1. session是对一组configuration的抽象表达,通过同一session调用的所有api共享一组configuration. session也是访问所有API的入口。默认的session是boto3.
  session = boto3.session.Session('profilename', 'regionname')
  client = session.client('service name')
  1. Resource分为Service Resource和Individual Resource. Service Resource表示某个服务,而Individual Resource表示某个服务里面的资源
    3.1 resource identifier
    Resource的唯一标示符,一般就是id或是url。很明显Service Resource不需要identifier,因为它是通过名字标识(例如:‘ec2’)
    3.2 attribute
    其实就是Resource的属性
    3.3 action
    就是Resource支持的操作
    3.4 subResource
    Resource的子级Resource,可以通过identifier来获取Resource对象
    3.5 collection
    Resource的子级Resource的集合,可以对collection进行查询,筛选等(对AWS的网络请求只有在collection执行操作(遍历,转换为list, 批量处理)的时候才会产生并发出)

  2. 一般使用方式
    4.1 Resource级别

var serviceRes = boto3.resource('ec2') //得到Service Resource
var instance = serviceRes.create_instances(**kwargs) //执行Service Resource级别的操作
var instance = serviceRes.Instance(id) // 通过identifier得到Sub Resource(Individual Resource)
var instances = serviceRes.instances.filter(filter) // 通过filter得到一个Sub Resource的collection
instance.start() //执行Sub Resource上的操作

4.2 Client级别

var ec2Client = boto3.client('ec2') //得到对应服务的client
ec2Client.run_instances(**kwargs) //执行操作
 类似资料: