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

参考

相关推荐
2401_857622666 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_857589366 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
哎呦没7 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch7 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
杨哥带你写代码9 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
AskHarries9 小时前
读《show your work》的一点感悟
后端
A尘埃9 小时前
SpringBoot的数据访问
java·spring boot·后端
yang-23079 小时前
端口冲突的解决方案以及SpringBoot自动检测可用端口demo
java·spring boot·后端
Marst Code9 小时前
(Django)初步使用
后端·python·django
代码之光_19809 小时前
SpringBoot校园资料分享平台:设计与实现
java·spring boot·后端