使用Mountpoint for Amazon S3为AWS EC2挂载S3存储

背景

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文件目录下

bash 复制代码
# 下载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文件目录下直接创建一个文件进行测试

sql 复制代码
[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时发现这个文件已经自动同步过来了

总结

  1. Mountpoint for Amazon S3主要是以类似POSIX的方式简化S3文件的读写,主要文件对象级别的整存整取,不支持某个文件中部分内容的读写
  2. Mountpoint for Amazon S3不支持全部的POSIX文件操作,如果需要完整的POSIX功能需求可以考虑AWS EBS、AWS EFS、AWS FSX
  3. 关于Mountpoint for Amazon S3目前支持的类POSIX操作可以看Mountpoint for Amazon S3 file system behavior

参考

相关推荐
魔镜魔镜_谁是世界上最漂亮的小仙女1 分钟前
java-集合
java·后端·程序员
前端世界7 分钟前
ASP.NET ListBox控件多选实战:3步打造高效兴趣收集系统
后端·asp.net
海奥华211 分钟前
go中的接口返回设计思想
开发语言·后端·golang
weixin_4383354023 分钟前
Spring Boot实现接口时间戳鉴权
java·spring boot·后端
寻月隐君28 分钟前
探索Web3新速度:Sonic高性能Layer-1上的BlindAuction智能合约实践
后端·web3·github
知之则吱吱1 小时前
亚马逊AWS云服务器高效使用指南:最大限度降低成本的实战策略
服务器·云计算·aws
天天摸鱼的java工程师1 小时前
Redis 集群缓存不一致?这篇把坑给你挖明白了
后端
天天摸鱼的java工程师1 小时前
Redis 除了做缓存还能干什么?
后端
AntBlack1 小时前
Trae Agent :能提高开发效率的功能都值亲自体验一下
后端·ai编程·trae
江梦寻2 小时前
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
开发语言·后端·python·macos·架构·策略模式