MongoDB 的 Elastic Beanstalk 部署

Elastic Beanstalk Deployment with MongoDB

非常感谢有关如何使用以下堆栈正确部署 Elastic Beanstalk 的资源建议:

我需要在 ebextension 文件中设置所有这些东西吗?或者是在 AWS 中手动设置,然后将它们正确路由到某个地方?

您绝对不想 运行 您的 Elastic Beanstalk 服务器上的所有这些。 Elastic Beanstalk 将根据您的 traffic/server 负载自动添加或删除服务器。您不希望您的数据库在被删除时位于其中一台服务器上。

Elastic Beanstalk 是一种平台即服务,非常适合 运行 网络服务器。 AWS 上还有其他服务,例如 ElastiCache(Redis/Memcached 作为服务)和 Elasticsearch 作为服务。还有第三方在 AWS 上提供 运行 的服务,例如 RedisLabs(Redis 即服务)和 MongoLab(MongoDB 即服务)。

您可以决定使用这些服务中的任何一个来减少您必须自己完成的系统管理工作量。或者您可以手动设置 EC2 Linux 服务器(在 Elastic Beanstalk 之外)并在其上安装 Rails 和 MongoDB 以及 ElasticSearch 并自行管理它们。

对于你的情况,我建议如下:

  • Rails:ElasticBeanstalk
  • MongoDB:MongoLab
  • Redis:RedisLabs
  • 弹性搜索:AWS 弹性搜索服务

您可能希望设置这些服务中的每一个,然后只需将每个服务的连接信息添加到您的 Elastic Beanstalk 环境中,以便 Rails 可以使用它们。

编辑:

以下是在 EC2 上手动设置 MongoDB 的最佳说明:https://docs.mongodb.org/ecosystem/platforms/amazon-ec2/

对于 ElastiCache 和 Elasticsearch,您只需在 AWS 控制台中四处单击即可配置 Redis 服务器并获取要连接的 URL。完成所有这些设置后,您只需将连接参数作为自定义环境变量放入 ElasticBeanstalk 环境中,例如:

MONGO_DB_URL="Your MongoDB EC2 internal IP address"

REDIS_URL="the url ElastiCache provided you"

然后在创建与这些服务的连接时读取应用程序中的那些环境变量。

此外,您将必须学习如何设置您的 VPN 和安全组以使一切都能够连接。例如,您希望 Elastic Beanstalk 服务器位于一个安全组中,而 MongoDB 服务器位于另一组中。然后,您必须配置 MongoDB 安全组以允许从 MongoDB 端口上的 beantalk 组进行访问。 ElastiCache 类似。我认为对于 Elasticsearch,您必须创建一个 IAM 角色来访问 Elasticsearch API,然后将该角色分配给您的 Beanstalk 服务器。

当然还有为 MongoDB 集群设置 Linux 服务器、配置集群、故障转移、自动备份、日志存档、定期安全更新等管理任务。我知道您拥有所有这些 AWS 信用,但您应该权衡将所有内容转移到 AWS 与您将花时间处理的所有管理任务的成本。如果您免费获得 Elastic Beanstalk、Elasticsearch 和 ElasticCache,那是不费吹灰之力的,但我的 MongoLab 账单必须相当高才能证明自己设置和管理它们是合理的。