簡體   English   中英

如何在 Elastic Beanstalk AWS 上使用 MySQL 托管節點 js / express 服務器

[英]How to host a node js / express server with MySQL on Elastic Beanstalk AWS

我正在嘗試在 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 時,我得到了預期的 output 'Hello World',但是當我下載日志以查看發生了什么時,會打印出 'THIS IS NOT CONNECTING' 語句。 顯然,當我從彈性 beanstalk 環境訪問這個節點服務器時,它沒有連接到我的數據庫。 我不確定為什么。 有人對我可能遺漏的東西有任何想法嗎? 我當然會感謝您的經驗/幫助!!!

看到您可以從本地環境而不是 Elastic Beanstalk 環境中進行連接,我認為這是連接問題。 您可以嘗試幾件事。

1. RDS Instance - 安全組:暫時允許所有連接

查看 RDS 實例的安全組是否允許從您的 Elastic Beanstalk 環境進行連接。 您可能已將自己的本地 PC 列入白名單,但可能沒有將其他 IP/安全組列入白名單。 作為一個簡單的檢查,您可以暫時允許所有連接以查看這是否是問題所在。

2. RDS 實例 - 公共可訪問性:設置為 Yes/True

為此,我相信它已經配置為 True,因為您可以使用提供的代碼從本地環境進行連接。 在這里提一下,以防萬一。

3. Elastic Beanstalk - VPC:設置為和RDS一樣

在不同的 VPC 中連接 EC2(通過 Elastic Beanstalk)和 RDS 更加復雜。 如果您同時擁有這兩個環境,那么將它們放在一起也是有意義的。 Elastic Beanstalk 控制台中配置 VPC 設置后,您可以在同一個 VPC 中為 DB 和 EC2 設置安全組

4. Elastic Beanstalk - 安全組:暫時允許所有連接

雖然您的 Elastic Beanstalk 環境可能接受 HTTP/S(TCP 端口 80/443)請求,但它可能尚未針對 RDS 連接(TCP 端口 3306)進行配置。 還要檢查它是否允許連接您的 RDS 實例(更多信息。


關於安全性的注意事項:以上兩個可能有助於暫時使連接正常工作,但不是生產環境的正確設置(也不適用於開發)。 最佳做法是將 RDS 公共可訪問性設置為 No/False。 如果您還沒有計划,我建議您通過SSH Tunneling 使用 Bastion Host設置更安全的數據庫環境。 請注意,這會增加 EC2 實例的成本,但您可以將 Bastion Host 的免費層實例用於小型項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM