我在AWS Lambda上启动并运行了NodeJS / Serverless Framework API。它连接到AWS RDS,它工作正常,但突然之间,它无法仅在我的办公室互联网上连接到RDS实例。 API和数据库连接在我的家庭互联网甚至移动数据上都能正常工作。
SequelizeConnectionError: connect ETIMEDOUT
在AWS Lambda和EC2实例(成功的数据库连接)上部署时,API工作正常。安全组为PORT 3306开放入站流量访问
const Sequelize = require('sequelize')
const sequelize = new Sequelize(
process.env.DB_NAME,
process.env.DB_USERNAME,
process.env.DB_PASSWORD,
{
ssl: true,
host: process.env.DB_HOST,
port: process.env.DB_PORT,
dialect: process.env.DB_DIALECT,
dialectOptions: {
ssl: 'Amazon RDS'
}
}
)
// Models
const User = require('./models/User')(sequelize, Sequelize)
const Post = require('./models/Post')(sequelize, Sequelize)
const Comment = require('./models/Comment')(sequelize, Sequelize)
let connection= {}
let Models = {
User,
Post,
Comment
}
/**
* Creating Associations
*/
Object.keys(Models).forEach(function(modelName) {
if (Models[modelName].associate) {
Models[modelName].associate(Models);
}
})
module.exports = async () => {
if(connection.isConnected){
console.log("use existing connection")
return Models
}
try {
// await sequelize.sync()
await sequelize.authenticate()
connection.isConnected = true
console.log("use new connection")
return Models
} catch (error) {
console.log(`Connection Error: ${error}`)
}
}
你可以找到repo here。
要让Lambda工作检查几件事:
dialectOptions: {
ssl: {
ca: 'certPathDownloadedFromAWS'
}
}