Node.js 在elastic beanstalk上安装mongodb的推荐方法

Node.js 在elastic beanstalk上安装mongodb的推荐方法,node.js,mongodb,ssh,amazon-ec2,amazon-elastic-beanstalk,Node.js,Mongodb,Ssh,Amazon Ec2,Amazon Elastic Beanstalk,我已经看了2014年的,不再有效的。以及 我已经在node.js上设置了一个新的弹性beanstalk环境,其中有一个ec2微实例“64位Amazon Linux 2016.03 v2.1.0运行node.js” 我已经尝试使用ssh连接到我的实例,并使用yum命令安装mongodb包: $ sudo yum install -y mongodb-org-server mongodb-org-shell mongodb-org-tools 并且收到了这个回电: Loaded plugins:

我已经看了2014年的,不再有效的。以及

我已经在node.js上设置了一个新的弹性beanstalk环境,其中有一个ec2微实例“64位Amazon Linux 2016.03 v2.1.0运行node.js”

我已经尝试使用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的方法?

如果有人在寻找答案,以下是我从aws业务支持部门收到的建议

部署到Elastic Beanstalk的所有代码都需要是“无状态”的,即永远不要使用SSH或FTP直接更改正在运行的Beanstalk实例。。。。因为这将导致不一致和/或数据丢失! -Elastic Beanstalk不是为非无状态应用程序设计的。 该环境旨在根据您的网络/CPU负载进行上下扩展,并从基本AMI构建新实例。如果实例存在问题或底层硬件,Elastic Beanstalk将终止这些正在运行的实例并替换为新实例。因此,为什么不必对现有实例“直接”应用或执行代码修改,因为新实例不会意识到这些直接更改。所有更改/代码都需要上载到Elastic Beanstalk控制台或CLI工具,并推送到所有正在运行的实例。 有关Elastic Beanstalk设计概念的更多信息,请访问以下链接

建议的解决办法: 考虑到上述情况,如果使用MongoDB存储应用程序数据,我们建议将MongoDB环境与Node.js应用程序分离。 例如,在Elastic Beanstalk之外创建MongoDB服务器,直接在EC2实例上启动MongoDB,并使用应用程序中的连接设置将Elastic Beanstalk Node.js应用程序连接到MongoDB服务器

-创建MongoDB 下面是一些可能用于创建MongoDB服务器的场景的示例链接。 在EC2上部署MongoDB, MongoDB节点客户端 AWS云上的MongoDB快速入门指南

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

选项设置: -选项名称:MONGO\u DB\u URL 值:“您的MongoDB EC2内部IP地址”

下面可以看到有关如何使用环境属性以及如何从应用程序中读取它们的信息。 和使用.ebextensions.config的信息可以在以下链接中找到

或者,您也可以使用cli或通过AWS控制台设置环境变量 eb cli set环境变量可通过以下链接读取。 使用AWS控制台 设置系统属性的步骤(AWS管理控制台) 打开弹性豆茎控制台。 导航到您环境的管理控制台。 选择配置。 在软件配置部分,选择编辑。 在“环境属性”下,创建您的名称/值

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

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

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
同样,如果实例被auto scaler终止,则必须再次连接,但不必手动安装mongo CLI


3) 创建一个单独的实例来托管mongo CLI,如@amyloula的回答中所述。如果您的mongodb位于专有网络内,则需要在专有网络内创建该独立实例。然后,您需要创建一个网关来公开访问该实例,因为您无法直接连接到VPC中的实例。

您不想在Elastic Beanstalk上安装数据库。您甚至不应该通过ssh对您的EB环境进行任何更改。您是否意识到EB将自动从您的环境中添加和删除服务器?它添加的新服务器将不会有您的更改,运行数据库等功能的旧服务器将被删除,您将丢失所有内容。阅读我对这个问题的回答,了解将MongoDB与Elastic Beanstalk结合使用的正确方法:是的,我意识到了这一点。这就是为什么我解释说我目前正在运行一个单服务器应用程序,但我想知道升级到自动缩放时的推荐安装。感谢您的链接。不幸的是,亚马逊业务支持遗漏了一个重要原因,即您希望将mongo安装在与应用服务器相同的服务器上;