本文已参与「新人创作礼」活动,一起开启掘金创作之路。
文章
SDK由两个关键的Python软件包组成:Botocore(提供Python SDK和AWS CLI之间共享低级功能的库)和Boto3(实现Python SDK本身的软件包)。
在安装boto3之前,安装python 3.6或更高版本;对Python 3.5和更早的支持得到了弃用。在每个Python版本列出的折旧日期之后,Boto3的新版本将不包括对该版本的Python的支持。有关详细信息,包括弃用时间表以及如何更新您的项目以使用Python 3.6,请参见迁移到Python 3。
boto3文档:boto3.amazonaws.com/v1/document… boto3的连接的高级接口有几个,分别是:boto3.client()、boto3.resource()
Client级别的接口则是返回Dictionary来表示查询到的资源信息。而Resource级别的接口是对Client级别的接口进行了面向对象的封装,接口的返回值大部分都是Resource对象(如果返回值是某个Resource的信息的话),我们可以对返回的对象再进行操作(比如删除,修改等)。
boto3的连接的低级接口: boto3.session(), boto3.Session
下面我讲我经常用的boto3.resource()的用法:
import boto3
s3 = boto3.resource(service_name='s3', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, region_name='cn-north-1')
参数的意义:
- service_name:连接亚马逊服务的名称,这里就是连接aws的s3服务,默认为s3
- aws_access_key_id:连接s3服务的密钥Id
- aws_secret_access_key:连接s3服务的密钥key
- region_name:连s3服务的区域名称
注意:
- 实际生产环境region_name一定要准确填写,不然连接不上又比如:cn-north-1。
当我们连上以后想查看一下有多少个bucket,可以使用下面方法:
for bucket in s3.buckets.all():
print(bucket.name)
当想查看某一个bucket的key结构(可以看成路径结构)的时候,使用下面的办法:
# bucket_name为桶的名称
for page in s3.Bucket(bucket_name).objects.pages():
print(page)
for obj in page:
print(obj.key)
当需要下载时:
# key为上面输出的key,及为一个文件的唯一标识,path为你本地存储的路径
s3.Bucket(bucket_name).download_file(key, path)
如果你想要本地存储像key值一样的路径,可参考下面的办法:
- 可以先判断key每一级路径是否存在,不存在使用os模块创建。最后使用上面的下载方法。