推荐的方法在弹性豆茎上安装mongodb

时间:2016-04-25 22:01:25

标签: node.js mongodb ssh amazon-ec2 amazon-elastic-beanstalk

首先,在你向我投票之前,我已经看过2014年的How to install mongodb in Elastic Beanstalk?,它已经不再适用了。以及https://docs.mongodb.org/ecosystem/platforms/amazon-ec2/#manually-deploy-mongodb-on-ec2

我已经在node.js上运行了一个新的弹性beanstalk环境,其中包含1个ec2微实例@ 64bit运行Node.js的Amazon Linux 2016.03 v2.1'

我已经尝试使用ssh连接到我的实例并使用yum命令安装mongodb软件包:

$ sudo yum install -y mongodb-org-server mongodb-org-shell mongodb-org-tools

并收到此回电:

Loaded plugins: priorities, update-motd, upgrade-helper
No package mongodb-org-server available.
No package mongodb-org-shell available.
No package mongodb-org-tools available.
Error: Nothing to do

当我第一次ssh到我的实例时,我收到了此错误警告:

This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH 
WILL BE LOST if the instance is replaced by auto-scaling. For more information 
on customizing your Elastic Beanstalk environment, see our documentation here: 
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

目前,我的环境已设置为单实例环境,以节省成本。但是,将来我会升级到自动缩放环境。

因此,我要求在ec2中通过ssh进行任何更改,或者我应该只使用EB CLI吗?

我在本地安装了EC2和EB CLI,但之前从未使用过EB CLI。如果我应该使用EB,是否有人建议安装mongodb?

2 个答案:

答案 0 :(得分:36)

如果有人正在寻找答案,这是我从aws业务支持获得的建议。

部署到Elastic Beanstalk的所有代码都需要“无状态”。切勿使用SSH或FTP直接对正在运行的beanstalk实例进行更改....因为这会导致不一致和/或数据丢失! - Elastic Beanstalk不适用于非无状态应用程序。 该环境旨在根据您的网络/ CPU负载进行扩展和缩小,并从基础AMI构建新实例。如果实例有问题或底层硬件,Elastic Beanstalk将终止这些正在运行的实例并替换为新实例。因此,为什么不必对现有实例“直接”应用或完成代码修改,因为新实例不会意识到这些直接更改。所有更改/代码都需要上传到Elastic Beanstalk控制台或CLI工具,并推送到所有正在运行的实例。 有关Elastic Beanstalk设计概念的更多信息,请参见以下链接 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.concepts.design.html

建议的解决方案: 考虑到上述情况,如果使用MongoDB存储应用程序数据,我们的建议是从Node.js应用程序中对MongoDB环境进行DE耦合。 I.E在Elastic Beanstalk之外创建一个MongoDB服务器,例如直接在EC2实例上启动MongoDB,并让您的Elastic Beanstalk Node.js应用程序使用您应用中的连接设置连接到MongoDB服务器。

创建MongoDB 下面是一些可能用于创建MongoDB服务器的方案的示例链接。 在EC2上部署MongoDB, https://docs.mongodb.org/ecosystem/platforms/amazon-ec2/ MongoDB节点客户端 https://docs.mongodb.org/getting-started/node/client/ AWS Cloud上的MongoDB快速入门指南 http://docs.aws.amazon.com/quickstart/latest/mongodb/architecture.html

- 将环境变量添加到Elastic Beanstalk以引用您的MongoDB服务器 创建MongoDB服务器后,可以使用环境变量将所需的连接设置传递到Elastic Beanstalk环境。 使用.ebextensions .config的示例,您可以添加Mongo URL / ports / users等。

option_settings:   - option_name:MONGO_DB_URL    值:“您的MongoDB EC2内部IP地址”

有关如何使用环境属性并从应用程序中读取它们的信息,请参见下文。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#create_deploy_nodejs_custom_container-envprop 使用.ebextensions .config的信息可以在以下链接中找到 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html

或者,您也可以使用cli或通过AWS控制台设置环境变量 eb cli设置环境变量可以通过以下链接读取。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-setenv.html 使用AWS控制台 设置系统属性(AWS管理控制台)    打开Elastic Beanstalk控制台。    导航到您的环境的管理控制台。    选择配置。    在“软件配置”部分中,选择“编辑”。    在“环境属性”下,创建您的名称/值...

访问环境配置设置 在AWS Elastic Beanstalk中运行的Node.js环境中,您可以使用process.env.ENV_VARIABLE访问环境变量,类似于以下示例。 process.env.MONGO_DB_URL process.env.PARAM2

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#create_deploy_nodejs_custom_container-envprop

要点: 总之,我建议将MongoDB与Elastic Beanstalk环境集成以下步骤。 步骤1)在Elastic Beanstalk之外创建一个MongoDB服务器 步骤2)在Elastic Beanstalk中创建连​​接到MongoDB服务器的Node.js应用程序

答案 1 :(得分:0)

3个选项:

1)SSH进入eb实例并手动安装mongo CLI:

sudo yum-config-manager --add-repo https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/4.0/x86_64/
sudo yum install --nogpgcheck -y mongodb-org-shell

缺点是,如果EB缩减其实例数量,并且当前正在运行的实例被终止,则会被踢出SSH会话:

The system is going down for halt NOW!
Connection to 1.2.3.4 closed by remote host.
Connection to 1.2.3.4 closed.
ERROR: CommandError - An error occurred while running: ssh.

然后您需要重新开始:连接到实例,安装mongo CLI ...

2)通过使用.config文件在实例上预安装mongo CLI:

container_commands:
  01-mongocli:
    command: "sudo yum-config-manager --add-repo https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/4.0/x86_64/;sudo yum install --nogpgcheck -y mongodb-org-shell"
    ignoreErrors: true //use this the ensure instance deployment even if mongo CLI installation fails

同样,如果实例被自动缩放器终止,则必须再次连接,但不必手动安装mongo CLI。

3)按照@amyloula的回答,创建一个托管mongo CLI的单独实例。如果mongodb在VPC内,则需要在VPC内也创建该单独的实例。然后,您将需要创建一个网关以公开访问该实例,因为您无法直接连接到VPC中的实例。