Heroku到AWS迁移建议

时间:2015-11-18 04:01:41

标签: ruby-on-rails mongodb amazon-web-services heroku paas

从我收集的内容来看,我的问题有很多解决方案,但我很欣赏一些关于从哪里开始的建议。这是我们目前在heroku上运行的堆栈:

  • 美洲狮上的Rails
  • MongoDB的
  • elasticsearch
  • redis的
  • mini_magick

使用Elastic Beanstalk与OpsWorks vs CloudFormation的决定是什么,而不仅仅是手动设置所有内容?另外,出于经济原因,如果可能的话,我不想使用像Docker这样的第三方服务。过多的选择让我对于从何处开始或如何选择感到困惑。背景:现在我真的很喜欢Heroku b / ci不要过多考虑系统管理员(在我的团队中我是唯一的开发人员),但我们最近获得了很多年度AWS学分,所以它似乎让我们有经济意义转移到AWS。

2 个答案:

答案 0 :(得分:5)

我想扩展马克的好答案。

可用替代方案

由于您是唯一的开发人员,因此Cloud Formation和OpsWorks不适合您。

使用OpsWorks,您需要编写或至少知道配置实例的Chef自动化代码。另一方面,云形成本身是不够的。它将帮助您完成AWS云资源创建,但您仍需要弄清楚如何协调应用程序部署,仅适用于初学者。 这些选项都不能为您提供运行和部署代码所需的一切,例如Heroku开箱即用。你需要自己实现它的一部分。

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

1)Elastic Beanstalk

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

2)ECS + Empire

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

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

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

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

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

总的来说,如果你愿意使用Docker运行你的应用程序,那么它是Heroku的一个很好的替代品 - 为什么你不应该这样做?

扩展中心

我认为从Redis Labs切换到亚马逊的Redis服务(ElastiCache)的主要好处是,除了您有免费的AWS信用之外,还可以更安全地访问您的Redis实例(并且更便宜)当您还在AWS上运行应用程序时。

总的来说,在迁移到AWS时,复制与Heroku一起使用的插件相对容易。对于像Elasticsearch这样的第三方插件,您只需继续将应用程序指向相关端点即可。复制Heroku的本机插件(如部署挂钩)要复杂一些,因为迁移到AWS时无法继续使用它们。在这些情况下,通常可以找到在AWS中复制其功能的替代方法。

如果您想了解如何迁移最常见的插件,我写了一篇详细说明如何操作的文章,您可以在此处找到它:how to replicate Heroku’s addons on AWS

希望这有帮助。

答案 1 :(得分:1)

对于您的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,您可能希望使用亚马逊新的托管Elasticsearch服务。