我有一个运行MySQL的Aurora Serverless数据库集群。我正在尝试编写一个从脚本中获取字符串并将其放入数据库的应用程序。
我已经能够使用PuTTY中的ec2,ec2上的节点程序和MySQL Workbench成功连接到集群,但是我无法使用自己的代码。我正在尝试使用节点模块ssh2和mysql2。
var mysql = require('mysql2');
var Client = require('ssh2').Client;
var ssh = new Client();
ssh.on('ready', function() {
ssh.forwardOut(
'127.0.0.1',
12345,
'127.0.0.1',
3306,
function (err, stream) {
if (err) throw err;
var sql = mysql.createConnection({
host: 'my db endpoint',
user: 'root',
password: 'pass',
database: 'testdb',
stream: stream
//sql stuff
});
}).connect({
host: 'ec2-publicdns',
port: '22',
username: 'ec2-user',
privateKey: require('fs').readFileSync('pkeyssh') //pem key converted to openssh using PuTTYgen
});
运行此命令时,我得到:Error: (SSH) Channel open failure: Connection refused
此外,Aurora无服务器对我来说是正确的解决方案吗?似乎没有通过ec2就无法与之真正交谈的方法。我应该寻找其他数据库主机吗?
答案 0 :(得分:1)
Aurora Serverless 托管在 Amazon VPC 内。根据 AWS documentation ,它只能从 VPC 内部访问(即从与 Aurora 集群位于同一 VPC 中的 EC2/Lambda)。这就是您可以从 EC2 访问它的原因。
您有三个选择:
答案 1 :(得分:0)
创建Aurora Serverless数据库时,需要配置VPC安全组,该组规定了从何处可以打开连接的规则(CIDR块和端口)。然后,您可以按名称将这个安全组的访问权限授予其他人,或者只是从同一安全组内启动您的应用程序服务器,这将为其提供访问权限。即使在测试环境中,也不需要SSH端口转发即可连接到数据库。
这里有一个不错的教程:https://aws.amazon.com/getting-started/tutorials/configure-connect-serverless-mysql-database-aurora,有关数据库安全组的更多信息,请咨询https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html。