【问题标题】:How to host a node js / express server with MySQL on Elastic Beanstalk AWS如何在 Elastic Beanstalk AWS 上使用 MySQL 托管节点 js/express 服务器
【发布时间】:2021-04-29 20:28:17
【问题描述】:

我正在尝试在 AWS Elastic Beanstalk 上托管我的 Node js / express 服务器。我的快递服务器连接到 MySQL 数据库。到目前为止,我已经在 AWS 上的 RDS 实例上托管了 MySQL 数据库。我还创建了一个弹性 beanstalk 环境并使用 CodePipeline(连接到 GitHub)“部署”了 Node js 服务器。我发现这个过程很有趣,感觉我很接近。但是,我遇到了 MySQL 连接问题。以下是来自我的 Node 服务器的相关代码行:

const express = require("express");
const mysql = require("mysql");
const cors = require("cors")
const formData = require("express-form-data");
const { PORT = 5000 } = process.env

const app = express();
app.use(cors());
app.use(formData.parse({maxFieldSize: '10mb'}));

var mysqlConnection = mysql.createConnection({
    host: "my-rds-dbconnection-endpoint",
    user: "my-username",
    password: "****",
    database: "nameOfSchema"
})

mysqlConnection.connect((err) => {
    if(err) {
        console.log('THIS IS NOT CONNECTING #20')
        throw err;
    }
    console.log("Connected to AWS!")
})
console.log('PORT', PORT)
app.get('/', (request, response) => {
    response.send('Hello World!')
    console.log('hello from /')
});
app.listen(PORT, function() {
    console.log(`App listening on port ${PORT}`);
});

当我在命令提示符下使用 Node 运行服务器以进行测试时,我一直到消息“已连接到 AWS”,它似乎已连接到数据库。但是,当我连接到环境 URL 时,我得到了预期的输出“Hello World”,但是当我下载日志以查看发生了什么时,会打印“THIS IS NOT CONNECTING”语句。显然,当我从弹性 beanstalk 环境访问这个节点服务器时,它没有连接到我的数据库。我不确定为什么。有人对我可能遗漏的东西有任何想法吗?我当然会感谢您的经验/帮助!!!

【问题讨论】:

    标签: javascript mysql node.js amazon-web-services amazon-elastic-beanstalk


    【解决方案1】:

    看到您可以从本地环境而不是在 Elastic Beanstalk 环境中进行连接,我认为这是连接问题。您可以尝试一些方法。

    1. RDS 实例 - 安全组:暂时允许所有连接

    查看 RDS 实例的安全组是否允许从您的 Elastic Beanstalk 环境进行连接。您可能已将自己的本地 PC 列入白名单,但可能没有将其他 IP/安全组列入白名单。作为一个简单的检查,您可以暂时允许所有连接以查看是否是问题所在。

    2。 RDS 实例 - 公共可访问性:设置为 Yes/True

    为此,我相信它已经配置为 True,因为您可以使用提供的代码从本地环境进行连接。在这里提一下以防万一。

    3. Elastic Beanstalk - VPC:设置为和RDS一样

    在不同的 VPC 中连接 EC2(通过 Elastic Beanstalk)和 RDS 更加复杂。如果您同时拥有这两个环境,那么将它们放在一起也是有意义的。在configuring the VPC settings in the Elastic Beanstalk Console之后,你可以set up the security group for the DB and EC2 in the same VPC

    4. Elastic Beanstalk - 安全组:暂时允许所有连接

    虽然您的 Elastic Beanstalk 环境可能接受 HTTP/S(TCP 端口 80/443)请求,但它可能尚未针对 RDS 连接(TCP 端口 3306)进行配置。还要检查它是否允许连接您的 RDS 实例(更多信息。


    关于安全性的注意事项:以上两个可能有助于暂时使连接正常工作,但不是生产环境的正确设置(也不适用于开发环境)。 best practice 将 RDS 公共可访问性设置为 No/False。如果您还没有计划,我建议您通过SSH Tunnelling using a Bastion Host 设置更安全的数据库环境。请注意,这会增加 EC2 实例的成本,但您可以将 Bastion Host 的免费层实例用于小型项目。

    【讨论】:

    • Ziwon,感谢您为我提供有关此问题的见解。非常感谢您的经验和指导。在我的具体情况下,我必须打开 RDS 端口,类似于您建议的允许所有连接的方式。我还从您的其他 cmets 中学到了很多东西,并且能够充分利用这些知识。非常感谢!
    猜你喜欢
    • 2016-01-17
    • 2014-01-21
    • 2018-02-09
    • 1970-01-01
    • 2013-11-19
    • 2023-03-23
    • 2017-09-20
    • 2021-02-10
    • 1970-01-01
    相关资源
    最近更新 更多