您绝对不希望在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账单很高,就需要我自己设置和管理它们了。