6

我有一个运行 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 serverless 对我来说是正确的解决方案吗?似乎没有办法在不通过 ec2 的情况下真正与它交谈。我应该寻找不同的数据库主机吗?

4

2 回答 2

4

创建 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

于 2018-11-06T10:15:08.887 回答
1

Aurora Serverless 托管在 Amazon VPC 中。根据AWS 文档,它只能从 VPC 内部访问(即从与 Aurora 集群位于同一 VPC 中的 EC2/Lambda)。这就是您能够从 EC2 访问它的原因。

你有三个选择:

  1. 使用 EC2 或 Lambda 从 VPC 内部访问无服务器集群。
  2. 使用托管 Aurora 而不是可以公开访问的无服务器。
  3. 使用新推出的数据 API从 VPC 外部建立到无服务器集群的安全 HTTP 连接!
于 2021-07-10T07:25:08.097 回答