如何设置由 S3(或类似)支持的 SFTP 服务器

Dan*_*ola 8 sftp amazon-s3 amazon-ebs amazon-web-services

我需要设置一个本质上具有非常大容量的 SFTP 服务器。我需要向我们的合作伙伴之一提供 SFTP 登录详细信息到服务器,他们将在其中上传数百万个文件,总计数百 TB。然后我会选择性地阅读其中的一些文件。这是唯一的实际要求,任何技术选择都可供选择。

我想到的最简单的方法是让某种 EC2 实例运行 SFTP 服务器,这样上传的任何内容要么直接发送到 S3,要么某种进程在上传时发现新文件,将它们复制到S3,并从磁盘中删除它们。

这是最好的方法吗?有没有其他方法可以获得基本上具有“无限且神奇增长的磁盘空间”的服务器?

谢谢你的帮助!丹尼尔

Mic*_*bot 10

在 Stack Overflow 上回答了同样的问题

s3fs 确实是一个合理的解决方案,就我而言,尽管存在理论/潜在问题,但我将其与 proftpd 结合使用并取得了出色的结果。

在我写答案的时候,我只为我的一个咨询客户设置了这个……但从那时起,我也开始喝我自己的 kool-aid 并在我的日常工作中在生产中使用它。我们整天在我的 sftp 服务器上通过上传和下载文件交换数据,该服务器将所有内容直接存储在 S3 上。作为奖励,我的报告导出系统——将 excel 电子表格直接写入 S3——可以将报告“导出到 FTP 服务器”,只需将它们直接放入 ft​​p 服务器的存储桶中,并使用适当的元数据来显示 uid、gid 和每个文件的模式。(s3fs 使用 x-amz-meta-uid、-gid 和 -mode 标头来模拟文件系统权限)。当客户端登录到服务器时,报告文件就在……那里。

我确实认为理想的解决方案可能是 S3 网关服务的 sftp,但我仍然没有开始设计一个,因为这个解决方案非常有效......当然有一些警告:

并非 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
Run Code Online (Sandbox Code Playgroud)

最好使用 US-Standard 以外的区域,因为这是唯一不对新对象提供先写后读一致性的区域。(或者,如果您需要使用 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
Run Code Online (Sandbox Code Playgroud)

当然,您可以将桶安装在任何地方。我碰巧在 /srv/s3fs 中有它。


Jef*_*eff 5

查看AWS Marketplace 上SFTP 网关

我们在使用 s3fs 时遇到了可靠性问题,因此我们专门为此开发了自定义解决方案。我们已经在生产中使用它好几年了,没有问题,最近将它发布到 AWS Marketplace。