Architecting on AWS 学习笔记系列文章导航页面
学习目标
- Amazon S3
- Amazon Glacier
- S3 存储类
正文
【Amazon S3】
Amazon S3是对象级别的存储,意味着如果你要更改一个文件的一部分,必须先做出更改,然后重新上传整个修改后的文件。
Amazon S3中可以存储尽可能多的数据,规定单个对象大小不能大于5TB。但是,对所存储的数据总量没有任何限制。默认情况下,S3中的数据将自动进行冗余存储。
可以通过基于Web的AWS管理控制台、API或者软件开发工具包以编程的方式访问S3。
Amazon S3包括事件通知功能,允许你设置在发生特定事件(例如正在向特定存储桶上传或者删除对象)时自动发送通知。这些通知可以发送给你,也可以用于触发其他进程,例如AWS Lambda脚本。
使用存储类分析,你可以分析存储访问模式并将正确的数据转换为正确的存储类。这个新的S3分析功能可以自动识别最佳生命周期策略,将不经常访问的存储转换为Amazon S3标准 - 低频率访问(S3标准-IA)。你可以配置存储类分析策略,以监视整个存储桶、前缀或对象标签。一旦观察到某个不常见的访问模式,你可以根据结果轻松创建新的生命周期期限策略。存储类分析还在AWS管理控制台中提供每天的存储使用情况可视化结果。你可以将这些信息导出到S3存储桶,以使用你选择的商业智能工具如Amazon QuickSight进行分析。
- 访问控制
默认情况下,所有的S3资源 – 存储桶,对象及相关的子资源(生命周期配置和网站配置) – 都是私有的:只有资源拥有者及创建资源的AWS账户可以访问该资源。资源拥有者可以通过编写访问策略向其他人授予访问权限。后续博客文章将提及IAM, ACL以及存储桶策略。
https://aws.amazon.com/blogs/aws/amazon-s3-block-public-access-another-layer-of-protection-for-your-accounts-and-buckets/
/*
* S3存储桶策略示例
* 假设您拥有一个网站,其域名为 (www.example.com 或 example.com),并且带有指向存储在 S3 存储桶
* 中的照片和视频的链接 examplebucket。默认情况下,所有 S3 资源都是私有的,因此只有创建资源的AWS
* 账户才能访问它们。要允许从您的网站对这些对象进行读取访问,您可以添加一个存储桶策略允许
* s3:GetObject 权限,并附带使用 aws:Referer 键的条件,即获取请求必须来自特定的网页。
* 以下策略指定带有 StringLike 条件键的 aws:Referer 条件。
*
* 确保您使用的浏览器在请求中包含 http referer 标头。
*/
{
"Version":"2012-10-17",
"Id":"http referer policy example",
"Statement":[
{
"Sid":"Allow get requests originating from www.example.com and example.com.",
"Effect":"Allow",
"Principal":"*",
"Action":"s3:GetObject",
"Resource":"arn:aws-cn:s3:::examplebucket/*",
"Condition":{
"StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
}
}
]
}
在S3存储桶中,你可以添加策略以允许其他的AWS账户或者用户访问其中存储的对象。存储桶策略可以补充,在某些情况下还可以替换标准的ACL访问策略。请注意单个存储桶策略的大小限制为20KB。
除去上述的存储桶策略,借助于跨域资源共享CORS,你可以使用S3构建丰富的客户端Web应用程序,并有选择的允许跨源访问你的S3资源。
要将你的存储桶配置为允许跨源请求,可以创建一个CORS配置。这是一个XML文档,其中包含某些规则,用以识别:
a. 允许访问你的存储桶的源;
b. 每个源支持的操作,即HTTP方法;
c. 其他特定操作信息;
- 版本控制
启动了版本控制的存储桶可以恢复因为意外删除或者覆盖操作而丢失的数据。例如:
a. 如果删除非永久移除对象,S3会插入一个删除标记,该标记将成为当前对象的版本,你始终可以恢复以前的版本。
b. 如果覆盖对象,则会在存储桶中创建一个新的对象版本,同样的,你始终可以恢复到以前的版本。 - 费用
收费参照:每月的GB数,传出到其他区域或者Internet,HTTP请求
具体费用因区域和执行的特定请求而异。一般来说,用户只需要为跨区域边界的传输支付费用,这意味着用户不必为传输到同一个区域内的EC2,或者Amazon CloudFront边缘站点付费。 - 生命周期
应该自动化Amazon S3中存储的数据的生命周期。使用生命周期策略,可以让数据在不同的Amazon S3存储类之间定期轮换。可以降低存储成本。
可以通过两种方式设置生命周期:
1.按照对象设置生命周期
2.按照存储桶设置生命周期 - 使用案例
– 可以考虑使用S3的场景
a. 需要一次写入,多次读取
b. 峰谷不均匀的数据访问
c. 大量用户和不同数量的内容
d. 不断增长的数据集
– 不适合使用S3的场景
a. 数据块存储需求
b. 经常更改数据
c. 档案数据存储
- 存储和分发静态Web内容和媒体
你可以使用S3来存储和分发静态Web内容和媒体,这些文件可以直接从S3交付,因为每个对象都拥有一个独一无二的URL。也可以将S3作为内容传输网络(如Amazon CloudFront)的源点。Amazon S3非常适合正在快速增长而且需要很强弹性的网站,这些网站可能包含大量的用户生成内容,如视频或者照片等。 - 托管整个静态网站
Amazon S3提供了低成本、高度可用且高度可扩展的解决方案,包括存储静态HTML文件、图像、视频以及JavaScript等格式的客户端脚本。 - 计算和大规模分析的数据存储
Amazon S3的水平扩展特性及多事务并发特性,使得其可以支持大型复杂交易系统,如金融交易分析、点击流分析和媒体转码等的数据存储。 - 备份工具
利用其持久性和可扩展性,S3也适合作为备份和存档工具。此外,你可以使用生命周期策略将长期数据移动到Amazon Glacier中。为了获得更多的持久性,你可以选择使用跨区域复制,自动将对象复制到其他区域的其他S3存储桶中。
- 移动数据到 Amazon S3
当你将文件上传到S3中时,文件会被存储为S3对象。该对象由文件数据和描述文件的元数据组成。存储桶可以容纳无限数量的对象。
可以通过以下几种方式将数据迁移到Amazon S3:
a. 使用控制台(文件大小上限78GB)、AWS命令行或者API传输;
b. 软件开发工具包;
AWS DataSync 可以实现本地存储到S3或者Amazon EFS之间自动迁移数据,其速度比开源工具快10倍,而且DataSync还可以自动处理许多会拖慢迁移速度的任务,包括运行自己的实例、处理加密、管理脚本、网络优化以及数据完整性验证;
AWS Transfer for SFTP 一种完全托管、高度可用的安全文件传输协议服务,支持应用程序通过SFTP将文件直接传送到S3。
AWS S3 Transfer Acceleration 利用Amazon CloudFront分布在全球的边缘站点,快速方便地将数据传输到S3存储桶。随后数据将通过优化的网络路径路由至S3。
AWS Snowball PB 级别数据传输方案。
AWS Snowmobile EB级别数据传输方案。
除此之外,S3支持分段上传。分段上传的优势在于:
a. 提高吞吐量;
b. 从网络问题快速恢复;
c. 暂停和恢复对象上传;
d. 可以在对象刚创建的时候就开始创建;
e. 上传大型对象;
【Amazon Glacier】
- Amazon Glacier是一种数据存储服务,旨在实现安全性、持久性及极低的陈本;
- 旨在为对象实现11个9的持久性存储;
- 支持对传输中的数据和静态数据进行SSL/TSL加密;
- 文件库锁定功能通过可锁定的政策来执行合规性;
- 极低成本的设计,非常适合长期存档(归档);
如果低廉的存储成本对你来说至关重要,而你又很少检索数据,并且可以接受数小时的检索延迟,那么Glacier是一个绝佳的存储选择,其存储对象的基本单位是档案。但是如果你的应用程序需要快速或者频繁的访问数据,则请考虑使用S3。检索Glacier中的存储的数据需要几小时的时间,因此其非常适合用于存档数据。
Glacier相关的费用主要在于数据检索方式:
- 加速检索 时间1到5分钟
- 标准检索 时间3到5小时
- 批量检索 时间5到12小时
【S3 存储类】
Amazon S3智能分层通过在访问模式发生变化时自动在两个存储访问层之间移动对象来优化存储成本。
S3 Glacier 深度存档将会成为对用户而言成本最低的可用存储层,同时仍然保留其持久性和长期数据保留能力。此类存储非常适合希望将很少或从不需要访问的数据制作成持久存档副本的客户。而且,采用此类存储类的客户无需再使用本地磁带库。且可以在12小时以内完成检索。