使用 AWS SAM 通过 ssh 隧道本地连接到 RDS - ER_GET_CONNECTION_TIMEOUT

问题描述 投票:0回答:0

我有一个在 AWS 中运行的 RDS 实例。我通过以下命令在本地打开一个 ssh 隧道:

ssh -N -L 33336:<rds-host>.us-east-1.rds.amazonaws.com:3306 <username>@<ip> -p <port> -i ~/.ssh/id_rsa

我还有一个使用本地运行的 SAM 的 AWS Lambda:

sam local start-api --env-vars env.json

在这个 Lambda 中,我正在尝试使用

mariadb
:

连接到这个 ssh 隧道 RDS 实例
const pool = mariadb.createPool({
  host: 'host.docker.internal',
  port: RDS_CONFIG.port || 33306,
  database: RDS_CONFIG.name || 'db_name',
  user: RDS_CONFIG.user || 'user',
  password: RDS_CONFIG.pass || 'pwd',
  timezone: 'UTC',
  dateStrings: true,
})

但是,与我的数据库的连接超时。我知道使用

host.docker.internal
,但问题仍然存在。这是错误:

"code":"ER_GET_CONNECTION_TIMEOUT","name":"SqlError","text":"retrieve connection from pool timeout after 10001ms

但是,我可以在 DBeaver 中通过 ssh 连接到这个实例并查询它。这意味着我的 ssh 隧道一定在工作。

如何在本地运行的 SAM 应用程序中避免此连接超时?有没有好的方法来测试这个问题?

我卸载并重新安装了 Docker 和 sam-cli 都无济于事。

谢谢大家,这让我发疯!

docker lambda mariadb amazon-rds
© www.soinside.com 2019 - 2024. All rights reserved.