使用MongoDB进行Elastic Beanstalk部署

3
非常感谢您寻求关于如何使用 Elastic Beanstalk 部署以下技术栈的资源建议:
- MongoDB - Rails(Puma) - Sidekiq/Redis - Elasticsearch
我需要在 ebextension 文件中设置所有这些内容,还是只需在 AWS 中手动设置并正确地将它们路由到一起即可?
1个回答

7
您绝对不希望在Elastic Beanstalk服务器上运行所有这些内容。根据流量/服务器负载,Elastic Beanstalk将自动添加或删除服务器。当其中一个服务器被删除时,您不希望数据库位于该服务器上。
Elastic Beanstalk是一种平台即服务,非常适合运行Web服务器。AWS上还有其他服务,例如ElastiCache(Redis/Memcached作为服务)和Elasticsearch作为服务。还有第三方提供的在AWS上运行的服务,例如RedisLabs(Redis作为服务)和MongoLab(MongoDB作为服务)。
您可以决定使用任何这些服务来减少必须自己执行的系统管理工作量。或者,您可以手动设置EC2 Linux服务器(在Elastic Beanstalk之外),并在其上安装Rails、MongoDB和ElasticSearch等内容,并自行管理它们。
对于您的情况,我建议使用以下内容:
- Rails:ElasticBeanstalk - MongoDB:MongoLab - Redis:RedisLabs - Elasticsearch:AWS Elasticsearch Service 您需要设置每个服务,然后只需将每个服务的连接信息添加到Elastic Beanstalk环境中,以便Rails可以使用它们。
编辑:
以下是手动在EC2上设置MongoDB的最佳说明:https://docs.mongodb.org/ecosystem/platforms/amazon-ec2/ 对于ElastiCache和Elasticsearch,您只需在AWS控制台中点击以配置Redis服务器并获取要连接到的URL。完成所有这些设置后,您只需要将连接参数作为自定义环境变量放入ElasticBeanstalk环境中,例如:
MONGO_DB_URL =“您的MongoDB EC2内部IP地址”
REDIS_URL =“ElastiCache提供给您的url”
然后,在创建与这些服务的连接时,在应用程序中读取这些环境变量。
此外,您还需要了解如何设置VPN和安全组以使所有内容连接。例如,您将希望将Elastic Beanstalk服务器放置在一个安全组中,将MongoDB服务器放置在另一个组中。然后,您将不得不配置MongoDB安全组以允许从beanstalk组连接MongoDB端口。对于ElastiCache也是类似的。我认为,对于Elasticsearch,您将不得不创建具有对Elasticsearch API访问权限的IAM角色,然后将该角色分配给您的Beanstalk服务器。
当然还有一些管理任务,例如为MongoDB集群设置Linux服务器、配置集群、故障转移、自动备份、日志归档、定期安全更新等。我知道你有AWS信用额度,但你需要权衡将所有内容迁移到AWS与你将要花费的所有管理任务成本。如果你免费获得Elastic Beanstalk、Elasticsearch和ElasticCache,那么这是毫无疑问的选择,但如果我的MongoLab账单很高,就需要我自己设置和管理它们了。

嗨,@mbaird!我正在尝试避免使用mongolab/redislabs等解决方案以降低成本(我们的团队已获得了一堆AWS年度信用额)。是否有关于如何在EC2上设置mongodb和在elasticache上设置redis,然后在我的eb配置中将它们全部路由在一起的好文档?一直在努力寻找正确的参考资源。 - Christopher Changchien
1
感谢 @mbaird 的深入回答!到目前为止,我在 AWS 上一直是孤军奋战,所以这对我来说非常有帮助,让我知道了应该往哪个方向去。我完全理解您关于自行管理 MongoDB 的观点,很可能会采纳您的建议! - Christopher Changchien
这是一个在亚马逊Linux上设置Elasticsearch的指南:http://blog.pushapps.mobi/installing-elasticsearch-2-2-and-kibana-4-4-on-amazon-linux/ - Orr
你也可以考虑在Mongo的位置上使用DynamoDB。它并不完全相同,需要一些准备工作来使其多态化,但它可以很好地适应AWS架构。 - Matt Fletcher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接