我在Stack Overflow上回答了同样的问题。
s3fs确实是一个合理的解决方案,尽管存在理论/潜在的问题,但就我而言,我将其与proftpd结合使用均获得了出色的效果。
在我写答案的时候,我只是为我的一位咨询客户设置的……但是从那时起,我也开始喝自己的酷儿辅助用品,并在日常工作中使用它。我们公司全天都在我的sftp服务器上与上载和下载文件交换数据,该服务器将所有内容直接存储在S3上。另外,我的报告导出系统-将excel电子表格直接写到S3-只需将报告直接放入ftp服务器的存储桶中,并使用适当的元数据显示uid,gid和,即可将报告“导出到FTP服务器”。每个文件的模式。(s3fs使用x-amz-meta-uid,-gid和-mode标头来模拟文件系统权限)。当客户端登录到服务器时,报告文件就在...那里。
我确实认为理想的解决方案可能是从SFTP到S3网关的服务,但是我仍然没有去设计一个解决方案,因为该解决方案确实很好用……当然,有一些警告:
并非s3fs的所有默认值都是正常的。您可能需要指定以下选项:
-o enable_noobj_cache # s3fs has a huge performance hit for large directories without this enabled
-o stat_cache_expire=30 # the ideal time will vary according to your usage
-o enable_content_md5 # it's beyond me why this safety check is disabled by default
最好使用除US-Standard之外的区域,因为这是唯一不对新对象提供写后读取一致性的区域。(或者,如果需要使用美国标准,则可以使用your-bucket.s3-external-1.amazonaws.com
us-east-1区域中几乎未记录的主机名,以防止对请求进行地理位置路由,这可以提高一致性。)
我在存储桶上启用了对象版本控制,而s3fs完全不知道。这样的好处是,即使文件应该被“踩踏”,我也总是可以进入存储桶版本控制来恢复“被覆盖”的文件。S3中的对象版本控制经过精妙的设计,使得不会意识到或不了解版本控制的S3客户端不会被禁用或感到困惑,因为如果您不进行支持版本控制的REST调用,则S3返回的响应将与具有以下功能的客户端兼容没有版本控制的概念。
还要注意,将数据传输到 S3中无需支付数据传输费用。您只需支付每个请求的价格。将数据从S3传输到区域内的EC2也不收取数据传输费用。仅当您从S3转移到Internet,Cloudfront或另一个AWS区域时,您才需要支付转移费用。如果要使用价格较低的减少冗余存储,则s3fs支持该功能-o use_rrs
。
有趣的是,当您看到256 TB的可用空间时(总是使用0,因为这样实际上无法计算大小是因为S3是对象存储而不是文件系统,因此您总是会感到温暖的模糊感) )。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.9G 1.4G 6.2G 18% /
s3fs 256T 0 256T 0% /srv/s3fs/example-bucket
当然,您可以将铲斗安装在任何地方。我刚好在/ srv / s3fs中拥有它。