远程连接到 Aurora Serverless
Posted
技术标签:
【中文标题】远程连接到 Aurora Serverless【英文标题】:Connecting to Aurora Serverless remotely 【发布时间】:2019-04-05 00:21:08 【问题描述】:我有一个运行 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 的情况下真正与它交谈。我应该寻找不同的数据库主机吗?
【问题讨论】:
您可以从 MySQL 工作台上的本地计算机进行连接吗?我认为这意味着它可用于外部连接,至少使用 SSL 密钥设置。你读过connection limitations吗?我个人在 RDS 上使用 Aurora(不是像你这样的无服务器配置,我相信这只是一组用于自动缩放等的配置参数?不是 100% 确定...) 我能够使用 ssh 在工作台中连接,我的 ec2 公共 dns 是 ssh 主机名。 Aurora 无服务器不支持 SSL 连接。 TBH,我不完全了解您的设置(或您的问题)。你已经创建了一个 EC2 实例,然后你打开了一个从你的盒子到 EC2 实例的 SSH 隧道,对吗?而且您可以通过工作台(在您的盒子上)连接到数据库,但不能通过您编写的代码。我是否正确理解了这个问题?如果是,您能否为 ssh 启用调试日志并分享详细信息? 将第二个127.0.0.1
更改为您的数据库端点,然后它们将host: 'my db endpoint'
更改为host: '127.0.0.1'
。
您确实需要通过 EC2,但实际上您可以通过 VPC 中的任何内容。例如,您可以创建一个虚拟专用网关,然后通过 *** 直接访问数据库,而不涉及 EC2 实例。
【参考方案1】:
在创建 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。
【讨论】:
所以对于我正在尝试制作的桌面应用程序,我不应该关注无服务器? 无服务器非常适合这种类型的应用程序。您只需要允许您的办公室如何出口到互联网并进入 AWS 的 IP 范围。【参考方案2】:Aurora Serverless 托管在 Amazon VPC 中。根据AWS documentation,它只能从 VPC 内部访问(即从与 Aurora 集群位于同一 VPC 中的 EC2/Lambda 访问)。这就是您能够从 EC2 访问它的原因。
你有三个选择:
-
使用 EC2 或 Lambda 从 VPC 内部访问无服务器集群。
使用托管的 Aurora,而不是可以公开访问的无服务器。
使用新推出的Data API 从 VPC 外部建立到无服务器集群的安全 HTTP 连接!
【讨论】:
以上是关于远程连接到 Aurora Serverless的主要内容,如果未能解决你的问题,请参考以下文章
使用 HikariCP 和 AWS Aurora Serverless 的连接池配置