背景
AWS S3是一种低价的分布对象存储系统,非常适合存放大量的文件,比如音视频等。S3相比块存储(AWS EBS)和文件存储(AWS EFS)的优势就是低价和近乎无限的存储空间和水平扩展能力,但三AWS S3作为对象存储服务也有其使用不方便的地方,那就是我们只能以文件为单位进行读取或者写入,不能直接进行文件内容级别的修改,比如你想修改一个存放在S3上的txt文件的某一行内容,你必须见下载完整的文件然后进行本地修改最后再保存到S3,此外S3只能通过API的方式进行文件的读写,不能像我们读写本地文件那样进行读写,也就是S3不支持文件系统的完整 POSIX 标准规范。
当我们在使用S3时,我们一般可以使用HTTPS RESTFul API、AWS SDK和AWS Cli来进行S3文件对象的读写,那么当我们想尽量做到类似POSIX 标准规范的文件读写,我们怎么解决呢?答案是使用Mountpoint for Amazon S3或者开源的S3FS-FUSE,它们可以让你将S3 bucket挂载在Linux服务器的某个文件路径下,挂载完成后你对这个文件路径的文件操作就可以像操作本的文件一样,这种挂载方式也不能完全的实现POSIX,只能作有限的操作。比如对于Mountpoint for Amazon S3而言,我们只能作完整文件的存放和读取而不能对文件作字节块级别的修改,不过相较于以前的传统S3对象操作方式,这依然大大简化了我们读写大量S3对象的难度。
安装Mountpoint for Amazon S3
EC2 IAM role设置
Mountpoint for Amazon S3需要我们的EC2有合适和S3读写权限,这里我们需要为EC2赋予一个IAM Role并给这个role合适的权限
这里我为AWS EC2 instance的赋予了一个IAM role,名为ec2-instance-role
;我们同时为这个role赋予S3权限
我为了方便赋予的是AmazonS3FullAccess
,如果你在正式环境使用建议对权限做精细化的管理,比如限制只能访问某些S3 bucket下的某类文件,这样会更安全
安装Mountpoint for Amazon S3插件
我们可以参考Installation进行安装,我的操作系统是Amazon linux 2023,这里值得注意的是老旧的CentOS 7是无法安装的,因为部分依赖的版本国语老旧。如果你使用Debian、Ubuntu或者其他的发行版建议使用最近3年的版本,基本都可以支持。
我计划安装Mountpoint for Amazon S3
,并将我自己的S3 bucket挂载在Linux的~/s3-p
文件目录下
# 下载Mountpoint for Amazon S3安装包
wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
# 安装Mountpoint for Amazon S3
sudo yum install ./mount-s3.rpm
# 创建Liunx本地文件目录,目录为~/s3-p
mkdir s3-p
# 将名称为thinktik-xxx-devops的S3 bucket挂载到~/s3-p
mount-s3 thinktik-xxx-devops ~/s3-p/
然后我们在~/s3-p
文件目录下直接创建一个文件进行测试
[ec2-user@ip-172-31-4-201 s3-p]$ pwd
/home/ec2-user/s3-p
[ec2-user@ip-172-31-4-201 s3-p]$ touch a.txt
[ec2-user@ip-172-31-4-201 s3-p]$
当我们检查S3时发现这个文件已经自动同步过来了
总结:
参考
- The inside story on Mountpoint for Amazon S3, a high-performance open source file client
- Mountpoint for Amazon S3
- Working with Mountpoint for Amazon S3
- Mountpoint for Amazon S3 GitHub
- Mountpoint for Amazon S3 file system behavior