mysql - nodeJS 脚本在笔记本电脑上运行时可以连接到 aws mySQL 服务器,但在亚马逊 EC2 实例上运行时则无法连接

标签 mysql node.js amazon-web-services amazon-ec2

我有以下脚本:

const pug = require('pug');
var cloudinary = require('cloudinary');
var express = require('express');
var multer  = require('multer');
var upload = multer({ dest: 'uploads/' });
var request = require('request');
var https = require('https');
var fs = require('fs');
var morgan = require('morgan');
var bodyParser = require('body-parser');
var mysql      = require('mysql');
var JSON = require('JSON');
var bluebird = require('bluebird');

var databaseConnection = mysql.createConnection({
    host     : 'assignment3cloud.cfavdkskfrrc.us-west-2.rds.amazonaws.com',
    port: 3306,
    user     : '<>',
    password : '<>',
    database : 'assign3'
});

databaseConnection  .connect(function(err){
    if(!err) {
        console.log("Database is connected ... \n\n");
    } else {
        console.log(err);
        console.log("Error connecting database ... \n\n");
    }
});

当我在笔记本电脑上运行此脚本时,它运行正常。

当我在亚马逊 EC2 Ubuntu 实例上运行它时,出现以下错误:

{ [Error: connect ETIMEDOUT]
  errorno: 'ETIMEDOUT',
  code: 'ETIMEDOUT',
  syscall: 'connect',
  fatal: true }
Error connecting database ... 


/home/ubuntu/home/skrpt.js:38
    if (error) throw error;
               ^

Error: connect ETIMEDOUT
    at Connection._handleConnectTimeout (/home/ubuntu/home/node_modules/mysql/lib/Connection.js:419:13)
    at Socket.g (events.js:260:16)
    at emitNone (events.js:67:13)
    at Socket.emit (events.js:166:7)
    at Socket._onTimeout (net.js:318:8)
    at _runOnTimeout (timers.js:524:11)
    at _makeTimerTimeout (timers.js:515:3)
    at Timer.unrefTimeout (timers.js:584:5)
    --------------------
    at Protocol._enqueue (/home/ubuntu/home/node_modules/mysql/lib/protocol/Protocol.js:141:48)
    at Protocol.handshake (/home/ubuntu/home/node_modules/mysql/lib/protocol/Protocol.js:52:41)
    at Connection.connect (/home/ubuntu/home/node_modules/mysql/lib/Connection.js:130:18)
    at Object.<anonymous> (/home/ubuntu/home/skrpt.js:27:22)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Function.Module.runMain (module.js:442:10)
    at startup (node.js:136:18)
    at node.js:966:3

我的猜测是,为了让数据库与 EC2 服务器通信,需要一些额外的安全要求。我能做什么?

最佳答案

您可能必须在实例的入站安全规则中添加 MYSQL 端口(当您位于包含 AWS 实例的页面上时,水平滚动到右侧)。

关于mysql - nodeJS 脚本在笔记本电脑上运行时可以连接到 aws mySQL 服务器,但在亚马逊 EC2 实例上运行时则无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42168301/

相关文章:

android - 在 AWS IOT 中调用 getShadow/updateShadow 时出现 ForbiddenError 403

amazon-web-services - 如何使用boto3快速提取S3中的文件?

mysql - Rails SQL 中的日期比较

php - Mysql广义搜索

mysql - 将 Power BI 桌面从虚拟机连接到 Ubuntu

MySQl 查询给出错误结果

node.js - Incontext Paypal Integration-无需离开站点 [Nodejs, Expressjs]

node.js - zeromq.node安装报错Ubuntu 12.04 : ' node-gyp rebuild'

node.js - node-http-proxy 不传递发布数据

amazon-web-services - AWS S3-将对象移到其他文件夹