标签归档:s3

aws s3支持BT协议

今天在浏览aws官网资料时,发现S3竟然支持bt协议,使用也很简单,原文是这么说的:

“BitTorrent 是一个开源互联网分发协议。Amazon S3 的带宽费率非常低廉,但 BitTorrent 允许用户同时从 Amazon 和其他用户下载进行下载,让开发人员进一步节省常用数据的带宽费用。除了默认的客户端/服务器传输机制之外,Amazon S3 中的任何公开提供数据均可通过 BitTorrent 数据下载。只需在 REST API 中的 GET 请求中添加 ?torrent 参数。”

介绍归介绍,想变成自己的东西还是要做实验去验证,所以实验如下:

我在s3上有1个bucket 名称是bicher

正常访问:

http://bicher.s3.amazonaws.com/install.log

这个页面会显示install.log的内容,是一个文本。

然后测试bt协议:

http://bicher.s3.amazonaws.com/install.log?torrent

这个操作会提示让下一个bt种子,下载下来就可以用类似bt工具进行下载了,这么做的好处官方说的也很明白了,我没必要再重复解释了,希望这个小方法可以帮到大家。

 

 

aws s3上传大文件的4种方法

aws s3 上对存储的数据容量是没有限制的,各个 Amazon S3 数据元的大小可在 1 字节至 5 TB 之间,可在单个 PUT 中上传的最大数据元为 5 GB,对于大于 100 MB 的数据元,官方建议是要采用分段上传的方式,所以如果你有很大的文件要上传到S3上,而目前还不知道采用哪种方式最好,今天这篇文章我们就是专门来讨论如何把一个大文件上传到S3上的,经过我自己汇总,S3对上传大文件有四种方式,以下我们分别介绍:

1、第一种,用命令行方式上传,采用s3put命令进行上传:

参数介绍,–bucket 后跟的是要上传的bucket名称,–multipart是支持多块上传,注意这个参数s3put默认是没有的,需要安装filechunkio 模块,用

pip install filechunkio 进行安装,安装完后就可以到这个参数选项了,–callback是回调函数,后面跟分几次进行上传,这个参数起到回显的功能,可以看到一个大文件分别上传到多少bytes,如果参数省略也可以上传成功,就是没有任何回显了。

2、第二种也是采用命令行方式,可以用s3cmd上传,因为这个命令我之前已经有详细介绍,今天就不在重复介绍了,可以在这里查看详细使用方法:

3、api方式,如果你觉得命令行方式用的不过瘾,就想用代码实现,也是可以的,其实aws针对大数据上次,也基本提供的是api接口模式,就是调用aws的api接口把文件分块上传到服务器上,然后服务器再把每个块组合成一个大的文件,这样的好处是如果传输中间网络断掉了,下次还可以根据传输的块编号进行续传,这就是基本原理,代码我是采用官方的例子,大家如果要用,可以根据自己的情况自行修改:

4、使用适用于分段上传的 REST API,官方介绍:

针对s3上传到文件的方式就写到这里里,这4种方式肯定沟通用了,各位看官可以根据自己业务实际情况进行选择,今天就到这里,如有问题,请各位看官斧正。

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名称,目的对象名称。

以下是代码:

 

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

 

aws 统计S3上占用存储总量

s3是亚马逊对象存储设备,是亚马逊云平台推出的第一个产品,采用键值的方式进行存储,底层数据块存在不同交换机不同服务器上,以保障数据不会丢失,官方给出的承诺是99.999999999%,晕么,各位看官也别数了,我数过了是11个9,也就是说存储在S3上的数据,你可以非常放心,再也不用担心数据丢失问题了,可以理解为永远也不会丢失,S3呢,是按使用量和访问量来收取费用的,存储收取的费用非常低,所以非常适合存储一些大数据,例如日志,数据库备份等,在S3上需要创建一个一个bucket,就是桶的概念,来存储数据,单文件可以支持近50T左右,具体数据不记得了,想具体了解的可以上官网上去查数字,对于一般来说,是肯定够通用了,S3的出现解决了传统运维的很大问题,例如:你做一个应用架构,涉及存储方面,你需要存储选型,考虑未来扩展,如果1T数据,你可以用1块盘,10T用10块盘,100T,你估计要上专业存储设备了,而且可能是一个数据集群,然后就是随着数据的扩展,不断扩展,这是传统运维的思路,到了云时代,一切就变了,数据可以直接存储在S3上,你在做应用架构时,你不需要考虑存储的扩展了,可以直接用S3做你应用的后台存储,而且用S3的API可以灵活的开发出你所需要的任何应用,关于S3的介绍咱就介绍到这里,说着说着就多了,今天这篇文章主要还是解决我们日常使用S3面对的问题(仅从运维角度,开发时另一个维度)。

开始前我们先假设一个场景,你们公司在S3上存储创建了一个bucket,bucketI下有超过1000个文件,每个文件大小不一,你要问这种场景会不会出现,那我告诉你,这是很正常的,随着业务发展,文件你传一个,我拷一个,慢慢就积攒起来了,容量上升会导致费用的产生,如果有一天你老板说,小张呀,你帮我查下目前S3上都我们用到多少存储了,你就打开bucket一看,我靠,这么多文件,难道让小弟我一个一个加起来,如果量级这么大,我估计你用你一个计算器我估计要算10天,而且如果中间有个地方算错了,那么恭喜你,你可以从头再来算一次了,虽然是假设的场景,但也的确反映了现状,其实我们有更好的方法来解决这么问题,不是有API吗,我调用API写一个计算方法是不是可以,到这,我肯定的告诉你,绝对可以,好了,我们上代码:

 

代码总体来讲比较简单,就是调用每个文件的size进行相加的操作,注意key.size是用字节来计算的,最后要自己要换算成G或T的单位,要不一串数字,老板会看疯的,:(      今天就到这里了,后续我会针对S3日常对运维操作会连载几篇文章,让大家彻底对S3有一个了解,喜欢的朋友可以给点个赞,:)

aws s3 做静态网站站点

最近看s3内容,发现很好玩,s3竟然支持静态网站内容的设置,也就意味着,如果你的网站全部是静态页面,就可以全部放到s3上了(存储超级便宜),不用部署任何apache、nginx程序了,而且还非常合适,那今天我们就看看如何设置S3做website的吧,首先,我们创建一个bucket的,然后上传我们的网站内容,最后进行访问,因为s3是建立bucket是不区分region的,所以创建的名称不能与其他人的相同,在创建的时候要检查是否已经有同名的bucket了,如果存在就打日志,如果没有就可以创建了,以下是这部分代码实现:

 

如果没问题,以上函数就是创建一个你独有的bucket,往下就是上传你的web站点文件了,因为是测试,我的相对很简答,就上传1个文件看效果:

到此就创建完了,最后是测试,get_website_endpoint()的返回的是访问网站的域名,但并不代表这个bucket的配置是正确的,原文如下:

运行完返回的是s3的一个访问域名,当然我们不能用这个来访问,谁也记不住,所以你需要在你的DNS后台CNAME到这个域名,这样就可以输入类似http://www.xxx.com来访问你的网站了,不过提醒下,s3是按访问次数来收取费用的,如果访问量很大,需要关注下费用情况,今天就到这里,关于s3还有很多好玩的事值得去研究,有兴趣的兄弟可以去看官网文档。