当前位置: 首页 > 面试题库 >

使用MongoDB进行Elastic Beanstalk部署

章茂
2023-03-14
问题内容

我们将非常感谢有关如何通过以下堆栈使用Elastic Beanstalk正确部署的资源的一些建议:

  • MongoDB
  • Rails(Puma)
  • Sidekiq / Redis
  • Elasticsearch

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


问题答案:

您绝对不希望在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服务

您可能想要设置每个服务,然后将每个服务的连接信息添加到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 =“为您提供的URL ElastiCache”

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

另外,您将必须学习有关设置VPN和安全组以使所有内容都能连接的知识。例如,您希望将Elastic
Beanstalk服务器放在一个安全组中,而将MongoDB服务器放在另一个安全组中。然后,您将必须配置MongoDB安全组,以允许来自MongoDB端口上的beantalk组的访问。ElastiCache与此类似。我认为对于Elasticsearch,您将必须创建一个可以访问Elasticsearch
API的IAM角色,然后将该角色分配给您的Beanstalk服务器。

当然,还有一些管理任务,包括为MongoDB集群设置Linux服务器,配置集群,故障转移,自动备份,日志存档,定期安全更新等。我知道您拥有所有这些AWS功劳,但是您应该权衡一下将所有内容转移到AWS以及您将花费时间的所有管理任务的成本。如果您免费获得Elastic
Beanstalk,Elasticsearch和ElasticCache,那么他们就很容易了,但是我的MongoLab账单必须相当高才能证明自己进行设置和管理。



 类似资料:
  • 我最近创建了一个AWS CodePipeline管道,从Github中提取,使用Jenkins/Maven构建,并部署到现有的ElasticBeanstalk项目中。构建步骤的输出和部署步骤的输入是build.war文件。成功构建WAR后,AWS EB控制台出现此错误,部署失败。 [实例:i-6605c4e1]命令在实例上失败。返回代码:2输出:(TRUNCATED)...opt/elasticb

  • 问题内容: 我选择的数据库是MongoDB。我正在编写一个数据层API,以从客户端应用程序中抽象实现细节- 也就是说,我实质上是在提供一个公共接口(一个充当IDL的对象)。 我正在以TDD方式测试自己的逻辑。在每个单元测试之前,调用一个方法来创建数据库单例,此后,当测试完成时,将调用一个方法来删除数据库。这有助于促进单元测试之间的独立性。 几乎所有单元测试(即 执行上下文查询 )都需要先进行某种插

  • 我正在使用从创建的联接。 例如,假设我有一个的名为并且每个都有一个。 例如: 下面的会给我一个的“CSV”; (是的--我知道我可以使用来检测最后一次迭代并删除ing。 是否可以使用此来和以便我们可以 ? 谢谢!

  • 谢谢你的任何提示或帮助。

  • 使用 now.sh 部署,推荐的 package.json 配置如下: { "name": "my-app", "dependencies": { "nuxt": "latest" }, "scripts": { "dev": "nuxt", "build": "nuxt build", "start": "nuxt start" } } 运行

  • Capistrano 与 Git GitHub Guide on Deploying with Cap Git and Capistrano Screencast