S3事件,简单来说呢就是S3内部存储的数据发生变化时所触发的事件。
数据变化包括数据的删除,复制,上传存储等。比如上篇介绍到的低冗余存储类型,由于这个类型的数据是可以被允许丢失的,当这个类型图片的缩略图丢失之后,可以触发一个丢失事件,利用程序从通用类型中保存的正常图片再生成一个新的缩略图以低冗余类型保存起来就行了。
当S3事件发生时,S3可以和其他的AWS服务配合使用,别的服务可以接受S3事件的数据信号,进行触发运行其他的处理,可以相互配合的AWS服务包括:
•SNS
•Lambda
•SQS Queue
关于这里的服务以后还会讲到。
S3中,还可以对对象启用版本管理的功能,例如我上传了数据对象,可是不小心,我把原来的数据给覆盖掉了,这时候本地又没有保存原来的数据,可以通过启用版本管理在存储桶中保留多个对象版本,每个保留的对象都有自己的版本id,相同的数据有多个版本id的话就会有多个版本,可以对单个版本进行管理。默认情况下,版本控制处于禁用状态,一旦开启版本管理功能后就不能将这个功能关闭,只能暂停,在暂停版本管理功能后,以后的新版本不会再生成,只会对已经存在的老版本进行管理。在对数据进行版本管理时,通常也会配合生命周期管理,对数据进行操作。
生命周期,生命周期管理就是从数据创建以来到被删除之前的期间内对数据进行的管理,应用场景也很简单:比如说我上传了一些数据,我在前一个月需要经常访问这些数据,第二个月访问频率降低,第四个月之后就几乎不访问,想把这个数据直接存档起来,再过一段时间想有选择性的删除某些数据,这时候就可以利用生命周期管理来自动的完成上述的操作。我们可以手动的事先设置好改对象的生命周期,在某个时间点对这个对象进行存储类别的更换,到最后将这些数据存档并删除。
再来看s3中数据的安全性:
S3下的所有桶以及数据对象在默认情况下都是私有的,既除了拥有着之外别人无法访问的。
•数据的拥有者可以通过设置桶策略或者是acl向别人提供该数据的访问权限
•在开发中经常会用到signed url来设置数据对象的公开时间:数据在S3存储桶中默认情况下,是别人访问不了的,但是通过利用Signed Url,可以使任何人访问或下载某个数据对象。因为在对某个数据对象生成Signed Url时,需要在Url中包含安全证书,数据对象所在的S3存储桶,数据的Key,以及公开时间(比如只公开5分钟,通过Signed Url可以在5分钟以内对该数据进行某种操作,5分钟以后,这个Signed Url就会过期)等等信息。
•S3下的数据的权限设置可以通过以下方法进行:
•桶策略(Bucket policies):桶策略只能授权给桶对象(而非IAM用户); 桶策略能指定允许或不允许(Effect)谁(Principle)来对该桶进行操作;该桶策略会应用到该桶内的所有数据对象上;桶策略中能进行条件设置;
• S3访问控制列表(ACL):能对别的AWS账户用户进行授权;桶以及桶内的数据对象皆有ACL;数据对象的ACL能允许我们将数据对象通过URL链接进行公开。
应用场景中一般最常用的自然是利用s3的存储功能,在此之外还有比较重要的三个;首先就是利用S3的存储桶来提供静态网站的主机服务,默认状态下S3关闭主机服务功能,当启动后S3会生成一个URL链接作为自己配置的静态网站的地址,S3中支持的文件形式有HTML,CSS,JavaScript,可以同时利用Route53,配合静态网站,将自己的域名访问跳转至S3生成的URL链接上。
其次,CDN是一个可以向用户分发网站内容资源的分发网络系统,有两个概念经常出现,一个就是边缘站点edge location,另一个就是数据的来源origin。CDN的应用场景也很常见,比如说我在非洲,但是我想访问阿里巴巴的网站,这里假设阿里巴巴网站的内容都放在了s3的存储桶上,这个存储桶位置在中国,那网络从非洲路由到中国要路由好几次,自然少不了延迟,打开网站的速度会非常的慢,这时候呢,我可以在非洲建立一个edge location,edge location会从S3上拿到数据缓存起来,然后当我在非洲访问阿里巴巴的时候,这个访问就会请求到非洲建立的edge location上,然后在这里检查这个边缘站点上是否有我想要的数据,如果没有的话,边缘站点会去位于中国的存储桶中提取数据,然后在边缘站点上保存起来,这样第一次访问的时候速度可能也不会太快,因为也得从中国拿数据,第二次再访问这个网站的时候,就会直接使用放在边缘站点上的数据,这样访问的速度就会快很多,为了防止存放在边缘站点上的数据过期,我们可以设置数据在边缘站点上的有效时间。
最后Storagegateway的利用方法别的篇章里再做介绍。