首先,在你向我投票之前,我已经看过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?
答案 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
要点: 总之,我建议将MongoDB与Elastic Beanstalk环境集成以下步骤。 步骤1)在Elastic Beanstalk之外创建一个MongoDB服务器 步骤2)在Elastic Beanstalk中创建连接到MongoDB服务器的Node.js应用程序
答案 1 :(得分:0)
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中的实例。