我公司有一个应用程序,它运行在多个 EC2 实例上,共享 1 个 EFS 实例,该实例在美国东部地区保存我们应用程序的文件,但我们的应用程序在全国范围内使用,而我们西海岸的客户遇到了延迟问题。因此,我们已开始在美国西部地区设置 EC2 实例。
不幸的是,EFS 实例无法跨区域共享,这意味着我们现在必须手动确保这些实例保持同步。对于我们的应用程序来说,两个 EFS 实例之间的文件始终匹配至关重要;因此需要一个自动化解决方案。
我的问题:我可以自动保持 2 个 EFS 实例在多个区域同步的最佳方法是什么?
答案1
您可以使用EFS File Sync
AWS 服务。
您可以在一个 AWS 区域中的 EFS 文件同步代理之间进行同步,并同步到另一个 AWS 区域中的 EFS 文件系统。
定价为每 GB 复制到 EFS 0.01 美元 + 您在新区域上使用 EFS 的空间(存储)
答案2
由于这个问题显然引起了一些关注,但没有准确的答案,我将继续分享我们最终的最佳解决方案。我们目前使用这两种解决方案,具体取决于我们部署的系统类型。
然而,这基本上意味着我们需要放弃 EFS 来存储我们的代码。它不是适合这项工作的工具,我们并不后悔放弃它。如果您仍然需要在服务器之间共享非代码文件,那么最好的解决方案可能是切换到结合使用 AWS S3 和 AWS CloudFront。
解决方案 1:
(设置非常容易,但仅适用于某些系统)
如果你的系统兼容,那么你应该使用AWS Amplify。它设置起来非常简单,基本上可以为您处理解决方案 2 中的所有问题。根据我们的经验,这对于前端 ReactJS 应用程序特别有用,并且可以完全处理全局复制,而无需设置每个区域。
解决方案 2:
(适用于大多数基于 EC2 的系统,但优化程度较低且需要更多设置)
可以说,最好的解决方案之一是结合亚马逊AWS官方博客和亚马逊AWS官方博客。这几乎适用于在 EC2 实例上运行的任何代码库。
- 代码部署允许您使用 GitHub 之类的服务集中托管您的代码,然后手动将特定的提交部署到您的 EC2 服务器或自动扩展组。
- 代码管道允许您在提交到 GitHub 上的特定分支时自动启动 CodeDeploy。(以及其他事情)
您必须为想要服务的每个区域设置 CodeDeploy 和 CodePipeline,但配置完成后,您所要做的就是将提交推送到特定分支之一,然后它就会开始同时部署到每个区域。
结果不仅有利于轻松地将代码部署到多个区域,而且还强制您的生产代码通过版本控制进行管理(轻松回滚)并使自动扩展更加可行,但不是必需的。
边注:不要使用“AWS CodeCommit”,除非出于某种原因必须使用。(在我看来,它是垃圾,更有可能引发问题而不是解决问题)