Я уже некоторое время использую Node.js LTS с базами данных RDS MySQL.Я недавно развернул RDS серверный кластер Aurora MySQL 5.6.В отличие от других моих баз данных RDS, я не могу подключить Node.js к новому безсерверному кластеру с помощью SSL с помощью адаптеров Node mysql или mysql2.
Из одного экземпляра Ubuntu с одним приложением Node.js:
Я могу успешно подключить приложение Node к любой из моих старых баз данных RDS (MySQL 5.6.40), используя SSL:
// works with other RDS databases:
const fs = require('fs');
const mysql = require('mysql2');
const config = require('../config');
var connectionArgs = {
host: config.old_rds_host,
database: config.old_rds_database,
user: config.old_rds_user,
password: config.old_rds_password,
port: config.rds.port,
ssl: {
ca: fs.readFileSync(__dirname + '/../rds-combined-ca-bundle.pem')
}
}
var connection = mysql.createConnection(connectionArgs);
С того же компьютера я могу подключиться с помощью SSL кновый кластер RDS с использованием клиента MySQL без проблем:
// Works with new RDS serverless cluster:
mysql -u rds_serverless_user -p -h new-rds-serverless-cluster.us-west-2.rds.amazonaws.com -P 3306 --ssl --ssl-ca=./rds-combined-ca-bundle.pem
Я могу успешно подключить приложение Node к новому безсерверному кластеру без SSL:
// Works with new RDS serverless cluster:
const fs = require('fs');
const mysql = require('mysql2');
const config = require('../config');
var connectionArgs = {
host: config.rds_host,
database: config.rds_serverless_database,
user: config.rds_serverless_user,
password: config.rds_serverless_password,
port: config.rds.port
}
var connection = mysql.createConnection(connectionArgs);
Нокогда я пытаюсь подключиться к новому безсерверному кластеру с сертификатом SSL, я получаю сообщение об ошибке, что сервер не поддерживает безопасное соединение:
// Fails with new RDS serverless cluster:
const fs = require('fs');
const mysql = require('mysql2');
const config = require('../config');
var connectionArgs = {
host: config.rds_host,
database: config.rds_serverless_database,
user: config.rds_serverless_user,
password: config.rds_serverless_password,
port: config.rds.port,
ssl: {
ca: fs.readFileSync(__dirname + '/../rds-combined-ca-bundle.pem')
}
}
var connection = mysql.createConnection(connectionArgs);
Debug: internal, implementation, error
Error: Server does not support secure connnection
at ClientHandshake.handshakeInit (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/commands/client_handshake.js:120:17)
at ClientHandshake.Command.execute (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/commands/command.js:40:20)
at Connection.handlePacket (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/connection.js:513:28)
at PacketParser.onPacket (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/connection.js:81:16)
at PacketParser.executeStart (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/packet_parser.js:76:14)
at Socket.<anonymous> (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/connection.js:89:29)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at Socket.Readable.push (_stream_readable.js:208:10)
at TCP.onread (net.js:601:20)
Так что же отличается?Единственная очевидная разница между старыми базами данных RDS и новым безсерверным кластером заключается в том, что старыми экземплярами являются MySQL 5.6.40, а новым кластером RDS - Aurora MySQL 5.6.10a.Кроме того, более ранние имена хостов экземпляра RDS разрешаются в один частный IP, а новое имя хоста кластера разрешается в несколько частных IP.
Я получаю те же результаты, используя адаптер mysql.Я также попробовал профиль SSL "Amazon RDS" в адаптере mysql и получил те же результаты.
Я не могу использовать аутентификацию базы данных IAM, поскольку эта служба должна обрабатывать более 20 новых соединений в секунду.
Буду признателен за любой совет.