使用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

参考

相关推荐
子兮曰27 分钟前
PHP漏洞危机,你的网站升级了吗?
前端·后端·php
陈随易33 分钟前
搞钱点子之生态鱼缸
前端·后端·程序员
ModStart2 小时前
通知:两个致命紧急PHP漏洞需要修改
后端
高频因子挖掘机2 小时前
A股量化第一步:如何利用 QuantDash 实现日K数据清洗、前复权校验与缺失值处理
后端·github·api
张彦峰ZYF3 小时前
借与还之间:连接池设计的技术难点与实现推演
后端·架构·连接池·服务端与协议·无锁借还与尾延迟·失效模式与探活时机·状态污染与泄漏检测
LEE3 小时前
为什么你的 Claude Code 还在转圈等,别人的已经干完三件事了?
前端·后端·ai编程
喵个咪3 小时前
GoWind CMS 拆解:给 NL2SQL 上四把锁——智能问数的安全边界
后端
喵个咪3 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
后端·go·cms
不像程序员的程序媛3 小时前
springboot支持的web容器
前端·spring boot·后端
喵个咪3 小时前
GoWind Admin 拆解:一个 Sender 接口接 39 个通知渠道
后端·架构·go