云计算技术

❖ AWS S3 静态对象存储

2019-01-14  本文已影响2人  Solomon_Xie

静态对象存储的意思就是,和FTP差不多,只能上传、下载、删除,不能修改、更新,更不能存动态数据库一类的东西。
虽然还是有很多差别,但是S3和CDN差不多。

为什么不选择可以当硬盘一样随便操作的EBS而是用静态对象存储的S3呢?

Cost 花销计算

S3一样传承了AWS复杂的Cost Calculation。

每月需要上缴的费用主要是这3部分的总和:

几种个人常见案例(月):

也就是说,API请求非常便宜,数据传输可以通过EC2内部传输的免费额度来省钱,最贵的是数据存储费用。这样来算,个人直接用Glacier最划算。

其中比较乱的是传输费用。

Cost优化

参考:Optimizing Costs for S3
参考:10 Things You Might Not Know About Using S3

创建Bucket

登录AWS进入S3 -> create bucket -> 创建S3全网唯一名称 -> 默认选项 -> 选择公开数据的浏览权限 -> 完成创建Bucket。

过程十分简单,就不截图占地方了。之后都可以修改,填错了也没问题。

下一步:获取secret_key,用于之后各种访问。

进入官网: Security Credential创建key:
选择左侧User -> 为s3创建专门的用户(IAM) -> 输入名称、密码 -> 成功后,获取这个用户独有的key pair -> 记住key pair。

用s3fs将S3挂载为本地文件夹 Map S3 as local drive

注意:Public access权限必须设置成Everyone,要不然无法从各种程序访问。
进入bucket的管理后台,选择Permissions,然后设置Public access.
具体步骤参考:

# https://cloud.netapp.com/blog/amazon-s3-as-a-file-system
sudo apt-get install -y s3fs

# Change key pairs to yours
echo ACCESS_KEY:SECRET_KEY > ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs

mkdir ~/s3-drive

# Mount the aws S3 bucket (replace your uid and gid)
/usr/bin/s3fs Your-Bucket-Name ~/s3-drive -o umask=0007,uid=1000,gid=1000

# Show all the mounted devices
mount

# Show what's in the bucket
ls ~/s3-drive

s3fs的文件读取权限问题

注意,S3的权限问题十分严格。而且每个文件的权限都有可能不一样。
如果是网页上传的,有可能和本地s3fs上传的权限不同,这样就不能互通操作。但是一旦用s3fs上传全部的文件,那么权限就都是统一的。
一旦文件权限没有统一,那么就会在访问时出现No such filePermission denied问题。

目前解决方案有两种:

  1. 为文件设置Headers,格式是x-amz-meta-(mode,mtime,uid,gid)
  2. (推荐) 在启动s3fs挂载时,明确指定umask, uid, gid。如-o umask=0007,uid=1000,gid=1000

有几点需要注意:

如何修改header: x-amz-meta-?
在后台文件管理界面,批量选择文件,然后点Actions,点change metadata,选择x-ama-meta-,输入对应value。

将S3作为Webdav服务器

搜遍了全网,都没找到靠谱的S3转Webdav服务器方案,差点就自己写Webdav的protocol实现了。还好,经过各种换词搜索,灵机一动,换了种思路:可不可以先把S3映射为本地drive,然后再正常把本地drive共享为webdav?
答案是:可以的。

具体做法就是:用s3fs映射到本地文件夹,再用wsgidav或apache或nginx将文件夹共享为webdav服务器。
亲测可用,而且十分好用。因为同属AWS资源,同属一个Region区,所以访问速度和访问EBS硬盘感受不到什么区别。

上一篇 下一篇

猜你喜欢

热点阅读