Heroku 到 AWS 的迁移建议

Heroku to AWS Migration Advice

根据我收集到的信息,我的问题有很多解决方案,但我希望得到一些关于从哪里开始的建议。这是我们目前在 heroku 上 运行 的堆栈:

使用 Elastic Beanstalk、OpsWorks、CloudFormation 还是自己手动设置所有内容的决定是什么?此外,出于经济原因,我真的更希望尽可能不要使用 Docker 等第三方服务。太多的选择让我有点困惑,不知道从哪里开始,甚至不知道如何选择。背景:现在我真的很喜欢 Heroku b/c 我不必过多考虑系统管理员(在我的团队中我是唯一的开发人员),但我们最近获得了很多年度 AWS 学分,所以看起来使我们转向 AWS 具有财务意义。

对于您的 Rails 应用程序,Elastic Beanstalk 将与 Heroku 非常相似。如果您已经熟悉像 Heroku 这样的 PaaS,我建议您使用 Elastic Beanstalk。一开始配置起来可能会有点困难(您可以配置的选项更多),但之后的部署过程将与您习惯的部署过程非常相似。

当然,Heroku 和大多数(可能是所有)您正在使用的其他服务 运行 已经在 AWS 之上,因此您实际上只是从一组构建在 AWS 上的服务切换到亚马逊自己的这些服务的版本。您可能会继续使用您在 Heroku 上使用的一些相同服务。例如,我认为 MongoLab 是 Heroku 上 MongoDB 的推荐服务,也是我在 AWS 上首选的 MongoDB-as-a-Service。如果您想将这些 AWS 积分用于 MongoDB,您将必须设置 EC2 服务器并自行安装和管理 MongoDB。

对于 Redis,您可以使用 Amazon 的 ElastiCache 服务或 RedisLabs。我发现 RedisLabs 的功能和价格比 ElastiCache 更好,但您可以将 AWS 积分用于 ElastiCache。

对于 Elasticsearch,您可能希望使用 Amazon 的新托管 Elasticsearch 服务。

我想扩展 Mark 的精彩回答。

可用的替代品

由于您是唯一的开发人员,Cloud Formation 和 OpsWorks 不是您的好选择。

使用 OpsWorks,您需要编写或至少了解配置实例的 Chef 自动化代码。另一方面,Cloud Formation 本身是不够的。它将帮助您创建 AWS 云资源,但您仍然需要弄清楚如何编排您的应用程序部署,仅供初学者使用。 这些选项都不能为您提供 运行 和部署代码所需的一切,就像 Heroku 开箱即用一样。您需要自己实现其中的一部分。

由于在 EC2 上实现您自己的自动化比上述选项需要更多的努力,我认为您在 AWS 中有两种选择可以满足您的需求:

1) 弹性豆茎

这是您在 AWS 中最接近 Heroku 的地方。一开始您可能需要花一些时间来了解该平台,因为它不像 Heroku 那样直观,但最终 Elastic Beanstalk 将为您提供继续 运行 运行应用程序所需的所有工具,而无需花时间在系统管理员上任务。

2) ECS + 帝国

虽然您提到使用 Docker 对您来说是不可能的,但我仍然想强调使用 ECS 的选项,Amazon 的 Docker 编排服务,作为 Heroku 的替代方案。

ECS 本身并没有提供足够的自动化来完成您期望从 PaaS 获得的一切。该服务旨在用作构建块,您应该对其进行扩展以满足您的需求。

幸运的是,来自 Remind 的人已经为您完成了这项工作。他们发布了一个名为 Empire 的开源项目,根据其自己的描述,该项目是“ECS 之上的一个控制层,提供类似 Heroku 的工作流”。

Empire 兼容 Heroku 的 API,其命令行实现了 Heroku 最重要的功能。

Empire 是一个开源项目,所以如果您选择使用它,您应该准备好不时地挖掘它的代码。文档并不完美,尽管该项目有一些吸引力,但社区不是很大。

总的来说,如果您愿意 运行 您的应用程序使用 Docker,它是 Heroku 的一个很好的替代品——为什么不呢?

插件

我看到从 Redis Labs 切换到 Amazon 的 Redis 服务 (ElastiCache) 的主要好处是,除了您拥有免费的 AWS 积分之外,它会更容易(也更便宜)保护您的当您还 运行 您在 AWS 上的应用程序时的 Redis 实例。

总的来说,当您迁移到 AWS 时,复制您在 Heroku 中使用的插件相对容易。对于像 Elasticsearch 这样的第三方插件,您只需继续将您的应用程序指向相关端点。复制 Heroku 的本地插件(如 deploy hooks)有点复杂,因为当你迁移到 AWS 时你不能继续使用它们。在这些情况下,通常可以找到在 AWS 中复制其功能的替代方法。

如果你想了解如何迁移最常见的插件,我写了一篇文章详细介绍了如何做到这一点,你可以在这里找到它:how to replicate Heroku’s addons on AWS

希望对您有所帮助。