Adam Asked: 2016-08-26 00:30:46 +0800 CST2016-08-26 00:30:46 +0800 CST 2016-08-26 00:30:46 +0800 CST 在 AWS 之外挂载弹性文件系统 (EFS) 772 我有一台在 AWS 之外的服务器。我希望能够将 EFS 卷安装到它,但我不确定这是否可能。 也许如果您创建一个 VPC,并通过 VPN 创建一个隧道? 有人知道这是否可能吗? amazon-web-services amazon-efs amazon-vpc 2 个回答 Voted Best Answer Michael - sqlbot 2016-08-26T17:45:22+08:002016-08-26T17:45:22+08:00 重要更新: 2018 年 10 月,AWS 扩展了支持 EFS 的网络技术的功能,使其现在可以原生地跨托管 VPN 连接和跨区域 VPC 对等工作,而无需诉诸下文详述的代理解决方法。 https://aws.amazon.com/about-aws/whats-new/2018/10/amazon-efs-now-supports-aws-vpn-and-inter-region-vpc-peering/ EFS 在 2016 年末通过 AWS Direct Connect 电路增加了对连接的支持。 https://aws.amazon.com/blogs/aws/amazon-efs-update-on-premises-access-via-direct-connect-vpc/ 评论提出了一些有趣的问题,因为在我最初阅读该问题时,我可能假设我对 EFS 的熟悉程度比您可能更高。 所以,首先,有一点背景: Elastic File System 中的“Elastic”主要是指存储空间和吞吐量的自动扩展——而不是外部访问的灵活性。 EFS 似乎对您可以存储的数据量没有任何有意义的限制。EFS 卷上任何单个文件的记录最大大小为52,673,613,135,872 字节 (52 TiB)。大多数其他限制同样慷慨。 EFS 在计费方式上特别“有弹性”。与 EBS 卷上的文件系统不同,EFS 上没有预先分配空间,您只需按小时平均为存储的内容付费。您的费用会根据您存储的数量增加和减少(它们是“弹性的”)。当您删除文件时,您将在一小时内停止为它们占用的空间付费。如果您将 1 GB 存储 750 小时(≅1 个月)然后将其删除,或者如果您将 375 GB 存储 2 小时然后将其删除,那么您的每月账单将是相同的……0.30 美元。这当然与 EBS 完全不同,EBS 很乐意向您收取 37.50 美元的费用,0x00用于在当月剩余时间存储 375 GB 的空间。 S3 的存储定价模型与 EFS 非常相似,因为一旦您删除一个对象,存储就停止计费,成本约为 EFS 成本的 1/10,但正如我和其他人多次提到的那样,S3 不是文件系统。像 s3fs-fuse 这样的实用程序试图提供一个“阻抗桥”,但是在试图处理不是真正的文件系统的东西时存在固有的困难(覆盖的最终一致性并不是最不重要的)。因此,如果您需要一个真正的“文件系统”,并且它适用于需要共享访问权限的应用程序,或者难以确定所需的存储空间,或者您希望它按需扩展,那么 EFS 可能会很有用。 而且,当您拥有 8.0 EiB 的可用空间时,它看起来很酷。 $ df -h | egrep '^Filesystem|efs' Filesystem Size Used Avail Use% Mounted on us-west-2a.fs-5ca1ab1e.efs.us-west-2.amazonaws.com:/ 8.0E 121G 8.0E 1% /srv/efs/fs-5ca1ab1e us-west-2a.fs-acce55ed.efs.us-west-2.amazonaws.com:/ 8.0E 7.2G 8.0E 1% /srv/efs/fs-acce55ed 但是,使用最适合您的应用程序的存储服务当然很重要。每个选项都有其有效的用例。EFS 可能是 AWS 提供的最专业的存储解决方案,其用例范围比 EBS 或 S3 更窄。 但是您可以从 VPC 外部使用它吗? 官方回答是否定的: 不支持通过 VPC 私有连接机制(例如 VPN 连接、VPC 对等互连和 AWS Direct Connect)装载文件系统。 — http://docs.aws.amazon.com/efs/latest/ug/limits.html EFS 目前仅限于 EC2 Linux 访问。在 VPC 中也是如此。更多功能将很快添加。您可以关注 AWS 发布的新功能公告。 — https://forums.aws.amazon.com/thread.jspa?messageID=732749 但是,实际答案是 Yes,即使这不是官方支持的配置。为了使它工作,需要一些特殊的步骤。 每个 EFS 文件系统都使用弹性网络接口 (ENI) 在您的 VPC 中分配了端点 IP 地址,通常每个可用区一个,并且您希望确保将一个安装在与实例匹配的可用区中,这不仅是出于性能原因,而且还因为在跨可用区边界传输数据时会产生带宽费用。 这些 ENI 的有趣之处在于它们似乎不使用它们所连接的子网的路由表。无论安全组设置如何,它们似乎都只能响应 VPC 内的实例(每个 EFS 文件系统都有自己的安全组来控制访问)。 由于没有可访问的外部路由,我无法直接通过我的硬件 VPN 访问 EFS 端点……所以我求助于我的老朋友 HAProxy,这确实(正如 @Tim 预测的那样)是完成这项工作所必需的。这是一个简单的配置,因为 EFS 仅使用 TCP 端口 2049。 我在 t2.nano 上使用 HAProxy(HAProxy 非常高效),其配置如下所示: listen fs-8d06f00d-us-east-1 bind :2049 mode tcp option tcplog timeout tunnel 300000 server fs-8d06f00d-us-east-1b us-east-1b.fs-8d06f00d.efs.us-east-1.amazonaws.com:2049 check inter 60000 fastinter 15000 downinter 5000 server fs-8d06f00d-us-east-1c us-east-1c.fs-8d06f00d.efs.us-east-1.amazonaws.com:2049 check inter 60000 fastinter 15000 downinter 5000 backup server fs-8d06f00d-us-east-1d us-east-1d.fs-8d06f00d.efs.us-east-1.amazonaws.com:2049 check inter 60000 fastinter 15000 downinter 5000 backup 此服务器位于 us-east-1b 中,因此它使用 us-east-1b 端点作为主端点,如果 1b 中的端点未能通过健康检查,则另外两个用作备份。 如果您的 VPC 中有 VPN,则使用此代理实例的 IP 地址作为目标安装卷(而不是直接使用 EFS 端点),瞧,您已经从 VPC 外部安装了 EFS 文件系统。 我已经成功地将它安装在外部 Ubuntu 机器以及 Solaris¹ 服务器上(事实证明,EFS 非常方便,因为它可以更轻松地从它们那里迁移服务来加速它们的退役)。 在某些情况下,例如将数据移动到 AWS 或在迁移期间在特定数据上并行运行旧系统和云系统,EFS 似乎是赢家。 当然,具有较长往返时间的遗留系统的性能不会像 EC2 实例一样好,但这是意料之中的——物理定律也不例外。尽管如此,EFS 和 HAProxy 网关似乎是使其在外部工作的稳定解决方案。 如果您没有 VPN,那么一对 HAProxy 机器,一个在 AWS 中,一个在您的数据中心,也可以通过 TLS 建立 EFS 隧道,与包裹在 TLS 中的有效负载建立单独的 TCP 连接,以传输每个单独的 EFS通过 Internet 连接。从技术上讲,它不是 VPN,而是加密的连接隧道。这似乎也表现得很好。 ¹Solaris 10 默认情况下(不足为奇)有些损坏——最初,root 似乎没有特殊权限——由 root 创建的 EFS 卷上的文件归 root 所有,但不能chown从Solaris 机器 ( Operation not permitted),即使 Ubuntu 客户端一切正常。在这种情况下,解决方案是使用svcadm disable svc:/network/nfs/mapid:default. 停止此服务会使一切按预期工作。此外,每次登录时的调用/usr/sbin/quota都需要在/etc/profile. 可能有更好或更正确的解决方案,但它是 Solaris,所以我没有足够的好奇心去调查。 Alan Kis 2018-01-23T03:05:35+08:002018-01-23T03:05:35+08:00 截至 2016 年 12 月 20 日,亚马逊宣布 AWS Direct Connect 可用于在本地服务器上挂载 EFS 文件系统。因此,基本上,有一个本机功能允许您在 VPC 之外使用 AWS EFS。 作为先决条件,您必须启用并建立 AWS Direct Connect 连接,然后使用在 EC2 实例中安装 EFS 时应使用的 nfs-utils。 有关更多信息,请参阅Amazon EFS 更新 – 通过 Direct Connect 进行本地访问。我刚刚发布了这个,因为我也在寻找这个未来,让其他人知道在 VPC 之外存在 EFS 连接的本机解决方案。
重要更新:
2018 年 10 月,AWS 扩展了支持 EFS 的网络技术的功能,使其现在可以原生地跨托管 VPN 连接和跨区域 VPC 对等工作,而无需诉诸下文详述的代理解决方法。
https://aws.amazon.com/about-aws/whats-new/2018/10/amazon-efs-now-supports-aws-vpn-and-inter-region-vpc-peering/
EFS 在 2016 年末通过 AWS Direct Connect 电路增加了对连接的支持。
https://aws.amazon.com/blogs/aws/amazon-efs-update-on-premises-access-via-direct-connect-vpc/
评论提出了一些有趣的问题,因为在我最初阅读该问题时,我可能假设我对 EFS 的熟悉程度比您可能更高。
所以,首先,有一点背景:
Elastic File System 中的“Elastic”主要是指存储空间和吞吐量的自动扩展——而不是外部访问的灵活性。
EFS 似乎对您可以存储的数据量没有任何有意义的限制。EFS 卷上任何单个文件的记录最大大小为52,673,613,135,872 字节 (52 TiB)。大多数其他限制同样慷慨。
EFS 在计费方式上特别“有弹性”。与 EBS 卷上的文件系统不同,EFS 上没有预先分配空间,您只需按小时平均为存储的内容付费。您的费用会根据您存储的数量增加和减少(它们是“弹性的”)。当您删除文件时,您将在一小时内停止为它们占用的空间付费。如果您将 1 GB 存储 750 小时(≅1 个月)然后将其删除,或者如果您将 375 GB 存储 2 小时然后将其删除,那么您的每月账单将是相同的……0.30 美元。这当然与 EBS 完全不同,EBS 很乐意向您收取 37.50 美元的费用,
0x00
用于在当月剩余时间存储 375 GB 的空间。S3 的存储定价模型与 EFS 非常相似,因为一旦您删除一个对象,存储就停止计费,成本约为 EFS 成本的 1/10,但正如我和其他人多次提到的那样,S3 不是文件系统。像 s3fs-fuse 这样的实用程序试图提供一个“阻抗桥”,但是在试图处理不是真正的文件系统的东西时存在固有的困难(覆盖的最终一致性并不是最不重要的)。因此,如果您需要一个真正的“文件系统”,并且它适用于需要共享访问权限的应用程序,或者难以确定所需的存储空间,或者您希望它按需扩展,那么 EFS 可能会很有用。
而且,当您拥有 8.0 EiB 的可用空间时,它看起来很酷。
但是,使用最适合您的应用程序的存储服务当然很重要。每个选项都有其有效的用例。EFS 可能是 AWS 提供的最专业的存储解决方案,其用例范围比 EBS 或 S3 更窄。
但是您可以从 VPC 外部使用它吗?
官方回答是否定的:
但是,实际答案是 Yes,即使这不是官方支持的配置。为了使它工作,需要一些特殊的步骤。
每个 EFS 文件系统都使用弹性网络接口 (ENI) 在您的 VPC 中分配了端点 IP 地址,通常每个可用区一个,并且您希望确保将一个安装在与实例匹配的可用区中,这不仅是出于性能原因,而且还因为在跨可用区边界传输数据时会产生带宽费用。
这些 ENI 的有趣之处在于它们似乎不使用它们所连接的子网的路由表。无论安全组设置如何,它们似乎都只能响应 VPC 内的实例(每个 EFS 文件系统都有自己的安全组来控制访问)。
由于没有可访问的外部路由,我无法直接通过我的硬件 VPN 访问 EFS 端点……所以我求助于我的老朋友 HAProxy,这确实(正如 @Tim 预测的那样)是完成这项工作所必需的。这是一个简单的配置,因为 EFS 仅使用 TCP 端口 2049。
我在 t2.nano 上使用 HAProxy(HAProxy 非常高效),其配置如下所示:
此服务器位于 us-east-1b 中,因此它使用 us-east-1b 端点作为主端点,如果 1b 中的端点未能通过健康检查,则另外两个用作备份。
如果您的 VPC 中有 VPN,则使用此代理实例的 IP 地址作为目标安装卷(而不是直接使用 EFS 端点),瞧,您已经从 VPC 外部安装了 EFS 文件系统。
我已经成功地将它安装在外部 Ubuntu 机器以及 Solaris¹ 服务器上(事实证明,EFS 非常方便,因为它可以更轻松地从它们那里迁移服务来加速它们的退役)。
在某些情况下,例如将数据移动到 AWS 或在迁移期间在特定数据上并行运行旧系统和云系统,EFS 似乎是赢家。
当然,具有较长往返时间的遗留系统的性能不会像 EC2 实例一样好,但这是意料之中的——物理定律也不例外。尽管如此,EFS 和 HAProxy 网关似乎是使其在外部工作的稳定解决方案。
如果您没有 VPN,那么一对 HAProxy 机器,一个在 AWS 中,一个在您的数据中心,也可以通过 TLS 建立 EFS 隧道,与包裹在 TLS 中的有效负载建立单独的 TCP 连接,以传输每个单独的 EFS通过 Internet 连接。从技术上讲,它不是 VPN,而是加密的连接隧道。这似乎也表现得很好。
¹Solaris 10 默认情况下(不足为奇)有些损坏——最初,root 似乎没有特殊权限——由 root 创建的 EFS 卷上的文件归 root 所有,但不能
chown
从Solaris 机器 (Operation not permitted
),即使 Ubuntu 客户端一切正常。在这种情况下,解决方案是使用svcadm disable svc:/network/nfs/mapid:default
. 停止此服务会使一切按预期工作。此外,每次登录时的调用/usr/sbin/quota
都需要在/etc/profile
. 可能有更好或更正确的解决方案,但它是 Solaris,所以我没有足够的好奇心去调查。截至 2016 年 12 月 20 日,亚马逊宣布 AWS Direct Connect 可用于在本地服务器上挂载 EFS 文件系统。因此,基本上,有一个本机功能允许您在 VPC 之外使用 AWS EFS。
作为先决条件,您必须启用并建立 AWS Direct Connect 连接,然后使用在 EC2 实例中安装 EFS 时应使用的 nfs-utils。
有关更多信息,请参阅Amazon EFS 更新 – 通过 Direct Connect 进行本地访问。我刚刚发布了这个,因为我也在寻找这个未来,让其他人知道在 VPC 之外存在 EFS 连接的本机解决方案。