在EC2上使用S3FS以文件系统方式挂载S3

一、背景

在某些特殊场景下,例如测试、数据临时校验等,需要在EC2的虚拟机层面,通过操作系统以文件和目录形式对S3做读写,这时候可以使用第三方的S3文件系统工具,将S3挂载到某磁盘目录。

注意:本工具因为性能和可靠性原因,不建议用于生产,建议只用于测试。

二、安装

本文假设采用Amazon Linux 2操作系统。执行如下命令安装。

amazon-linux-extras install epel
yum install s3fs-fuse -y

输入yes同意安装,安装即可完成。

三、编写配置文件

将Access Key写到配置文件中。

echo <access-key-id>:<secret-access-key> > /etc/passwd-s3fs
chmod 600 /etc/passwd-s3fs

请替换上面命令的API key和密钥为实际的密钥和密码,命令不包含 < > 括号。注意,AWS海外和国内是独立的账号,因此请填写正确的API密钥。

四、手工执行挂载

执行如下命令挂载。

mkdir /s3fs
s3fs s3upload-lxy /s3fs -o passwd_file=/etc/passwd-s3fs -o url=http://s3.cn-north-1.amazonaws.com.cn -o endpoint=cn-north-1

请替换如下:

  • 替换 /s3fs 为要挂载的路径;
  • 替换s3upload-lxy为存储桶的名称;
  • 当前命令是北京的S3桶,如果是ZHY宁夏区域,则请替换url为 http://s3.cn-northwest-1.amazonaws.com.cn,并替换endpoint为cn-northwest-1

执行结果成功的话,将不会报错,执行 ls 命令即可看到S3上的数据。

五、设置启动自动挂载

一般开机自动挂载是修改 /etc/fstab 实现。但本次要挂载的S3是AWS中国区的,要额外声明中国区endpoint,因此就不再使用 fstab了,而是改成用 /etc/rc.local 自动执行的办法。

执行如下脚本。

echo "s3fs s3upload-lxy /s3fs -o passwd_file=/etc/passwd-s3fs -o url=http://s3.cn-north-1.amazonaws.com.cn -o endpoint=cn-north-1" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

由此即可实现在EC2重启后,自动挂载目录。