У меня есть и работает NodeJS / Serverless Framework API на AWS Lambda.Он подключен к AWS RDS, который работал нормально, однако внезапно он не может подключиться к инстансу RDS только через Интернет в моем офисе .API и соединение с базой данных отлично работают в моем домашнем интернете и даже на мобильных данных
Ошибка подключения к базе данных
SequelizeConnectionError: connect ETIMEDOUT
API работает нормально при развертывании в AWS Lambda & EC2 Instance (успешные подключения к базе данных). Группа безопасности имеет доступ к входящему трафику, открытый для ПОРТА 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}`)
}
}
Испытанные решения
- Настройка фиктивной базы данных на remotemysql.com .API подключается к базе данных в моем офисе.
- Запуск кода в виде простого скрипта NodeJS.Не работал в офисе интернет с локальной машины.Пробовал на нескольких локальных машинах.
- Развертывание простого кода NodeJS в новом экземпляре EC2.Он подключен к API базы данных, работает нормально.
- Удален Sequelize и подключен к инстансу RDS с использованием пакета npm mysql .Подключено к RDS с локального компьютера через офисный Интернет.
- Подключено к хранилищу RDS Instance from Laravel (PHP) на локальном компьютере с использованием офисного Интернета.Работало !!
- Изменены настройки конфигурации подключения к базе данных.1) Увеличено время получения до 1000000. 2) Добавлено ssl: true & dialectOptions {ssl: "Amazon RDS"}.
- Добавлено идентификаторов подсетей & Идентификаторы групп безопасности в файле serverless.yml.Таким образом, лямбда и экземпляр RDS находятся в одном и том же VPC.
- Пробовал несколько экземпляров RDS.Сбой соединения при разработке & подготовке экземпляров.
- Создан новый экземпляр RDS для тестирования.Он подключается к базе данных (иногда) с локальной машины в офисе Интернет .
Вы можете найти репо здесь .