【发布时间】:2022-01-03 05:01:02
【问题描述】:
const express = require('express')
const bodyParser = require('body-parser')
const awsServerlessExpressMiddleware = require('aws-serverless-express/middleware')
const app = express()
app.use(bodyParser.json())
app.use(awsServerlessExpressMiddleware.eventContext())
// Enable CORS for all methods
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*")
res.header("Access-Control-Allow-Headers", "*")
next()
});
// Connect to DB
const sql = require("mssql")
const config = {
server: "SERVER",
user: "USER",
password: "PASSWORD",
port: 1433,
database: "DATABASE"
}
console.log("Attemping to connect...")
let q = "SELECT * FROM QUERY"
// Async Await
async function getDB() {
console.log("Inside getDB...")
try {
let pool = await sql.connect(config)
console.log("Connected")
let item = await pool.request().query(q)
console.log(item)
sql.close()
return item;
} catch(err) {
console.log("Query did not complete.")
console.log(err.message);
sql.close();
}
}
let result = getDB();
console.log("Result: " + result)
app.get('/', function(req, res) {
res.status(200).json({result, url:req.url})
});
我正在使用 AWS amplify 运行应用程序,并尝试通过我的后端 lambda 函数连接到 RDS 数据库。当我检查 CloudWatch 时,我发现与数据库的连接失败。我不确定问题出在哪里,因为我使用完全相同的设置通过 Python 使用 pyodbc 库进行连接。
【问题讨论】:
-
您的 RDS 实例是否公开?
-
如果您保持 RDS 和 lambda 私有(在 VPC 内),那么您应该在 RDS 安全组中为端口 1433 定义一个入口规则,以允许来自 lambda 安全组的流量。
-
我的 RDS 实例不是公开的。它位于带有 NAT 网关的 VPC 内。我为端口 1433 正确设置了 lambda 安全组和 VPC。
标签: node.js sql-server amazon-web-services express