我有一个在 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 都无济于事。
谢谢大家,这让我发疯!