Mountpoint for Amazon S3初探——暨Amazon S3 17周年

今年3月16日是S3发布的17周年,S3之于AWS的重要性在此不多赘述,我们主要看一看17周年发布的七项功能,他们分别是

1. Mountpoint for Amazon S3(内测版):Amazon S3 的开源文件客户端

2. 现已正式推出:AWS Data Exchange for Amazon S3

3. Amazon S3 多区域接入点现在支持跨多个 AWS 账户的复制数据集

4. 作为CloudFront 源的 S3 对象Lambda 接入点的别名

5. 简化本地网络的私有连接

6. Outposts 上的本地 Amazon S3 复制

7. Amazon OpenSearch 安全分析

笔者对第一项和第五项有一些兴趣,首先简单说一下第五项。

优化本地网络的私有连接,其实给本地网络提供了S3的私有DNS解析,而不需要更改应用中的S3端点。

现在我们看看第一项。

首先S3作为一个对象存储,自从其诞生之日起就有很多个S3 Mount的项目,将S3的Bucket映射成本地存储,大都设计成为兼容POSIX的大部分操作,这些项目简单罗列一下开源的有

https://github.com/s3fs-fuse/s3fs-fuse

https://github.com/kahing/goofys

而商业化的产品也有

https://objectivefs.com/

当然AWS官方的Storage Gateway也可以看作这其中的一种。

这些Mount的方案和EFS或者FSx不同,都是将S3的API兼容实现的,用起来非常方便,这次周年发布的Mountpoint for Amazon S3实际上也是类似的项目,但是它的应用场景更明确,所以在设计上不再尽力满足所有POSIX操作。需求越明确,实现成本和性能开销就越小,这可以从这篇DOC看出。

https://github.com/awslabs/mountpoint-s3/blob/main/doc/SEMANTICS.md

需要注意的是,目前Mountpoint还处在Alpha,还只支持Linux,操作上也只读取,接下来我们就按照官方的指南来实际操作一下。

本次使用了Amazon Linux 2023环境,目前官方尚未提供二进制包,所以以下过程都是为了编译。

sudo yum install git fuse fuse-devel cmake3 clang-devel
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
git clone --recurse-submodules https://github.com/awslabs/mountpoint-s3.git
cd mountpoint-s3
cargo build –release

要下载的依赖非常多,c6g.medium编译也使用了13分钟。

请请配置一个好的网络,或者在AWS EC2上完成这个实验。

接下来就比较简单了,配置凭据可以用credentials,自然也可以用IAM role。

mkdir ~/s3mpdemo
mount-s3 my-s3-bucket-name ~/s3mpdemo --endpoint-url https://s3.cn-northwest-1.amazonaws.com.cn --region cn-northwest-1

注意,因为我们这里使用的是中国区,所以需要加上endpoint参数。

执行后不会输出,但是已经可以看到它在后台运行,这时我们进入创建的目录就可以看到我们bucket下的文件了。

可以和console印证下。

事实上就目前mountpoint的完成度来看,已经符合我们之前使用的s3fs的场景,所以我们会直接将这个产品用于生产环境,这样可以获得更多的反馈。