如何将 node.js 应用程序部署到 AWS Elastic Beanstalk
Posted
技术标签:
【中文标题】如何将 node.js 应用程序部署到 AWS Elastic Beanstalk【英文标题】:How to deploy a node.js app into AWS Elastic Beanstalk 【发布时间】:2015-07-17 15:35:01 【问题描述】:我正在尝试通过 AWS 控制台在 AWS Elastic Beanstalk 中部署示例 Nodejs 应用程序。我的 Nodejs 应用程序仅包含 HelloWorld 消息。 我的问题是单击 Elastic Beanstalk URL 时没有收到 Hello world 消息。我还检查了日志,但 Nodejs.logs 和 Error.logs 中没有错误消息。 当我检查 Elastic Beanstalk URL 时收到 "Connection Refused-due to Internal Server Error" 。我正在使用 JSON 模板通过控制台创建堆栈,我的模板包含应用程序、应用程序版本、环境和 ConfigurationTemplate 资源类型。我的 ConfigurationTemplate 资源类型 包含以下选项设置,如下所示-
"OptionSettings": [
"Namespace": "aws:autoscaling:asg",
"OptionName": "MinSize",
"Value": "1"
,
"Namespace": "aws:autoscaling:asg",
"OptionName": "MaxSize",
"Value": "2"
,
"Namespace": "aws:autoscaling:launchconfiguration",
"OptionName": "EC2KeyName",
"Value": "Fn::FindInMap": [ "Environments","Ref": "EnvironUsed","InstanceKeyName" ]
,
"Namespace": "aws:autoscaling:launchconfiguration",
"OptionName": "IamInstanceProfile",
"Value": "Fn::FindInMap": ["Environments","Ref": "EnvironUsed","IamRoleProfile"]
,
"Namespace": "aws:autoscaling:launchconfiguration",
"OptionName": "InstanceType",
"Value": "t2.micro"
,
"Namespace": "aws:autoscaling:launchconfiguration",
"OptionName": "SecurityGroups",
"Value": "Fn::FindInMap": [ "Environments","Ref": "EnvironUsed","BeanstalkSecurityGroup" ]
,
"Namespace": "aws:ec2:vpc",
"OptionName": "VPCId",
"Value": "Fn::FindInMap": ["Environments", "Ref": "EnvironUsed","VPC" ]
,
"Namespace": "aws:ec2:vpc",
"OptionName": "Subnets",
"Value": "Fn::FindInMap": [ "Environments","Ref": "EnvironUsed","PrivateSubnet"]
,
"Namespace": "aws:ec2:vpc",
"OptionName": "ELBSubnets",
"Value": "Fn::FindInMap": [ "Environments", "Ref": "EnvironUsed", "PrivateSubnet" ]
,
"Namespace": "aws:ec2:vpc",
"OptionName": "ELBScheme",
"Value": "internal"
,
"Namespace": "aws:elasticbeanstalk:environment",
"OptionName": "EnvironmentType",
"Value": "LoadBalanced"
,
"Namespace": "aws:autoscaling:trigger",
"OptionName": "MeasureName",
"Value": "CPUUtilization"
,
"Namespace": "aws:autoscaling:trigger",
"OptionName": "Unit",
"Value": "Percent"
,
"Namespace": "aws:autoscaling:trigger",
"OptionName": "UpperThreshold",
"Value": "50"
,
"Namespace": "aws:autoscaling:trigger",
"OptionName": "LowerThreshold",
"Value": "49"
],
以下是我的示例 Nodejs 应用程序 -
var express = require('express');
var http=require('http');
var app = express();
app.set('port', process.env.PORT || 8081);
app.get('/',function(req,res)
res.send('Hello World');
);
http.createServer(app).listen(app.get('port'), function ()
console.log('Express server listening on port ' + app.get('port'));
);
由于我对这个 AWS 服务比较陌生,请指导我如何解决这个错误,因为我按照 AWS 文档中给出的所有说明来创建这个 Elastic Beanstalk 来部署应用程序。
【问题讨论】:
请回答这个问题。 我也有这个问题,有解决办法吗? 【参考方案1】:我会检查安全组允许的端口 8081(或其他)上的连接
【讨论】:
对不起,我没明白你的意思。请你解释清楚为什么 Elastic beanstalk URL 不起作用。 安全组(在你的例子中是 BeanstalkSecurityGroup)代表了管理网络流量的规则,就像防火墙一样。默认情况下,它们非常严格,您可能必须允许端口上的连接。 但是我使用的是默认安全组,它允许所有流量和所有端口。这里的问题是当我点击弹性 beanstalk URL 时 servcie 没有命中,因为我没有在日志中收到任何错误。不是了解为什么服务没有点击这里并且 EB URL 需要很长时间才能显示消息,例如 - “内部服务器错误 - 连接终止”。请帮我解决这个问题。 对不起,如果不是安全组,我不知道会是什么。以上是关于如何将 node.js 应用程序部署到 AWS Elastic Beanstalk的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用哪些 aws 服务来部署 node.js 应用程序?
将 Node.js 页面部署到 AWS Elastic Beanstalk 后出现“hell.php”错误和“502 Bad Gateway”错误
如何从部署在 AWS Elastic beanstalk 上的 node.js express 应用程序获取客户端 IP?