+86 135 410 16684Mon. - Fri. 10:00-22:00

aws bucket之间相互拷贝数据

aws bucket之间拷贝数据

aws bucket之间相互拷贝数据

在s3是使用过程中,最经常的操作基本就是拷贝了,s3上是按 这么结构存储数据的,在s3上可以创建bucket,然后就可以在bucket里放入数据了,每个 bucket下也可以建立不同目录, 这也是s3方便大家操作模拟的目录,其实在s3里全部都是对象存储,靠的是key来关联每个具体对象,这里的key 一般就是文件名, 每个目录下放不同的文件(为方便理解我们统一叫文件,其实在s3是面向对象存储的,每个数据专业名称应该叫对象),日常操作跟我们使用本地盘很相似,既然 很相似,那 剪切 、复制的操作基本就会平常了,所以一般来说,如果你想从一个bucket里拷贝文件到另一个bucket里,很简单的思路是,可以从源bucket中下载 下来文件,然后再上传刚到你目的bucket中,不过如果你真这样做就显得很low了,因为会浪费很多不必要的流量,其实s3提供了从一个bucket拷 贝到另一个bucket的接口,很方便操作,不过s3只提供了copy的功能,如果你想从一个bucket中剪切一个文件过来,对不起,s3的api接口 不提供这个功能,但你可以自己通过复制,删除来实现,比如你想剪切某bucket的一个对象,你可以先复制到目的bucket,然后在源bucket中删 除,其实就变相的实现了剪切功能了,讲了这么多,那接下来我们要具体说下bucket间的数据复制了,基本思路就是构造一个函数,这个函数只是包括四个参 数:

源bucket名称,源对象名称,目的bucket名称,目的对象名称。

以下是代码:

#!/usr/bin/env python

import boto

def copyobject(src_bucket, src_keyname, dst_bucket, dst_keyname):
s3 = boto.connect_s3()
src_bucket = s3.lookup(src_bucket)
src_keyname = src_bucket.lookup(src_keyname)
src_keyname.copy(dst_bucket, dst_keyname, preserve_acl=True)

copyobject(“bicher”, “install.html”, “bicherweb”, “install.html”)

测试结果就是从bicher中拷贝install.html文件到bicherweb中,对象名称没有修改,其中preserve_acl参数的意思是 如果是True,拷贝过去的对象会携带之前的访问权限(acl)到目的bucket,如果是False,会设置问缺省权限。