http://mp.weixin.qq.com/s?__biz=MzA4ODMwMDcxMQ==&mid=2650891653&idx=1&sn=f1e4c62f00834e51329b97301b29618b&chksm=8bd9884dbcae015b917659c3f8a3373ea4c671477aba57ce43b697c475dabeda2b88963cfb32&scene=0#wechat_redirect

S3fs介绍
S3fs是基于FUSE的文件系统,允许Linux和Mac Os X挂载S3的存储桶在本地文件系统,S3fs能够保持对象原来的格式。关于S3fs的详细介绍,请扫描或长按识别下方的二维码:
利用S3fs挂载S3存储桶

准备
1. 使用拥有足够权限的IAM账号登录AWS控制台。

2. 创建S3存储桶,给存储桶命名如“s3fs-mount-bucket”(如果使用已有存储桶,本步骤可略过)。

3. 创建具有该S3存储桶访问权限的IAM用户,并为该IAM用户创建访问密钥。

a) 关于如何创建IAM用户,请参见:http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_users_create.html#id_users_create_console

b) 关于如何为IAM用户创建访问密钥,请参见:
http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_credentials_access-keys.html

c) 关于如何为IAM用户设置权限策略,请参见:
http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/access_policies_create.html

https://aws.amazon.com/cn/blogs/security/writing-iam-policies-how-to-grant-access-to-an-amazon-s3-bucket/
4. 创建并启动Amazon EC2 Linux实例

具体过程请参见:http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/launching-instance.html


安装和配置S3fs
1. 安装S3fs
a) 使用Amazon EC2默认用户“ec2-user”和对应的私钥文件登录启动的Linux实例(请注意将下边例子中的私钥文件和EC2实例域名替换为用户自己的值)

b) 安装必要的软件包

c) 下载,编译并安装S3fs

d) 检查S3fs是否安装成功

2. 创建IAM用户访问密钥文件
IAM用户访问密钥内容可以写入当前用户默认密钥文件比如“/home/ec2-user/.passwd-s3fs”或者用户自己创建的文件。
命令格式:echo [IAM用户访问密钥ID]:[ IAM用户访问密钥] >[密钥文件名]
命令举例:下面的例子将在当前用户默认路径创建密钥文件

请注意:访问海外AWS S3服务和中国S3服务使用的是不同的IAM账号,对应不同的密钥。
3. 设置密钥文件只能够被当前用户访问
命令格式:chmod 600 [密钥文件名]
命令举例:下面的例子将设置密钥文件只能被当前用户访问


手动挂载S3存储桶
S3fs挂载存储桶使用的命令是S3fs。S3fs的命令格式是:
S3fs BUCKET MOUNTPOINT [OPTION]
S3fs [S3存储桶名] [本地目录名] [OPTION]
OPTION是可选项,格式是–o=,常用的Options有:
1. 手动挂载AWS海外区域S3存储桶
命令格式:s3fs [S3存储桶名] [本地目录名] -o passwd_file=[密钥文件名] -o endpoint=[区域名]
命令举例:下面的例子将名为“s3fs-mount-bucket”的新加坡区域S3存储桶挂载到指定的本地目录“/home/ec2-user/s3mnt”。
2. 手动挂载AWS中国北京区域S3存储桶
命令格式:s3fs [S3存储桶名] [本地目录名] -o passwd_file=[密钥文件名] -o url=http://s3.cn-north-1.amazonaws.com.cn -o endpoint=cn-north-1
命令举例:下面的例子将名为“s3fs-mount-bucket”的北京区域S3存储桶挂载到本地目录“/home/ec2-user/s3mnt”。
3. 检查挂载结果
挂载操作执行结束后,可以使用Linux “df”命令查看挂载是否成功。出现类似下面256T的S3fs文件系统即表示挂载成功。用户就可以进入本地挂载目录去访问存储在S3存储桶中的对象。
4. 卸载挂载的S3存储桶
如果不再需要通过挂载方式访问S3存储桶,可以使用Linux “umount”命令卸载。
5. 调 试
如果遇到手动挂载不成功的问题,请尝试在执行的命令后面添加下面的参数,并检查输出日志中的错误提示信息:
命令格式:[完整的s3fs挂载命令] -d -d -f -o f2 -o curldbg
命令举例:下面的例子试图将名为“s3fs-mount-bucket”的S3存储桶挂载到指定的本地目录“/home/ec2-user/s3mnt”下,并输出挂载过程详细调试日志。


设置开机自动挂载S3存储桶
1. 创建全局IAM用户访问密钥文件
切换Linux系统用户账号到“root”用户,把IAM用户访问密钥内容写入/etc/passwd-s3fs文件中,并限制该文件的访问权限。“/etc/passwd-s3fs”文件是s3fs保存IAM用户访问密钥的全局默认路径。

请注意:访问海外AWS S3服务和中国S3服务使用的是不同的IAM账号,对应不同的密钥。
2. 修改/etc/fstab文件
编辑/etc/fstab文件,添加后面的自动挂载命令。

2.1 自动挂载海外区域S3存储桶
命令格式:s3fs#[S3存储桶名] [本地目录名] fuse _netdev,allow_other,endpoint=[区域名] 0 0
命令举例:添加下面的语句到/etc/fstab后,Linux系统启动后将自动把名为“s3fs-mount-bucket”的新加坡区域S3存储桶挂载到本地目录“/home/ec2-user/s3mnt”,并允许其它操作系统用户(非root用户)访问。

2.2 自动挂载中国北京区域S3存储桶
命令格式:s3fs#[S3存储桶名] [本地目录名] fuse allow_other,url=http://s3.cn-north-1.amazonaws.com.cn,endpoint=cn-north-1 0 0
命令举例:添加下面的语句到/etc/fstab后,Linux系统启动将自动把名为“s3fs-mount-bucket”的北京区域S3存储桶挂载到本地目录“/home/ec2-user/s3mnt”下,并允许其它操作系统用户(非root用户)访问。
局限性
利用S3fs可以方便的把S3存储桶挂载在用户本地操作系统目录中,但是由于S3fs实际上是依托于Amazon S3服务提供的目录访问接口,所以不能简单的把S3fs挂载的目录和本地操作系统目录等同使用。用户使用S3f3挂载S3存储桶和直接访问S3服务有类似的使用场景。适用于对不同大小文件对象的一次保存(上传),多次读取(下载)。不适用于对已保存文件经常做随机修改,因为每次在本地修改并保存文件内容都会导致S3fs上传新的文件到Amazon S3去替换原来的文件。从访问性能上来说,通过操作系统目录方式间接访问Amazon S3存储服务的性能不如直接使用SDK或CLI接口访问效率高。以本地配置文件方式保存访问密钥的安全性也不如使用EC2 IAM角色方式高。

关于S3fs使用时候需要注意的更多细节,请参考下面S3fs官网内容:

Generally S3 cannot offer the same performance or semantics as a local file system. More specifically:
· random writes or appends to files require rewriting the entire file
· metadata operations such as listing directories have poor performance due to network latency
· eventual consistency can temporarily yield stale data
· no atomic renames of files or directories
· no coordination between multiple clients mounting the same bucket
· no hard links
总 结
利用S3fs可以把共享的Amazon S3存储桶直接挂载在用户服务器本地目录下,应用不需要做修改就可以直接使用Amazon S3存储服务,这种方式可以作为临时解决方案将传统应用快速迁移到AWS平台。

在已经提供了Amazon EFS(Elastic File System)服务的AWS区域,建议用户优先考虑使用Amazon EFS服务,因为它具有更高的性能。在目前还没有提供EFS服务的AWS区域,用户可以先暂时使用S3fs实现快速业务迁移。然后逐步调整S3数据访问实现方式,最终修改为使用AWS SDK或CLI方式高效并更加安全地访问S3存储服务。

Advertisements