通过适用于 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)
Boto3 有两个独特的 API 级别。client(或“低级别”)API 提供对基础 HTTP API 操作的一对一映射。 resource API 隐藏显式网络调用,而是提供资源对象和集合以访问属性并执行操作。
其中低级 API 是和 AWS 的 HTTP 接口一一对应的,通过 boto3.client(“xxx”) 暴露。高级接口是面向对象的,更加易于使用,通过 boto3.resource(“xxx”) 暴露,美中不足是不一定覆盖了所有的 API.
res = boto3.resource('service name')
client = boto3.client('service name')
session = boto3.session.Session('profilename', 'regionname')
client = session.client('service name')
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, 批量处理)的时候才会产生并发出)
一般使用方式
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) //执行操作