使用 Ngrok 从 AWS Lambda 连接到本地 PostgreSQL
Posted
技术标签:
【中文标题】使用 Ngrok 从 AWS Lambda 连接到本地 PostgreSQL【英文标题】:Using Ngrok to connect to local PostgreSQL from AWS Lamba 【发布时间】:2019-06-15 01:50:25 【问题描述】:我正在尝试使用 node-postgres (PG) 连接到在端口 5432 上运行的本地 PostgreSQL 数据库。为此,我设置了 ngrok 来隧道我的请求。
./ngrok tcp 5432
以下代码在本地运行时有效(即使在使用 ngrok 进行隧道时)。当我连接到外部数据库时,它也适用于 lambda - 在我的情况下由 Heroku 托管。
'use strict';
const PG = require('pg');
// These credentials work locally
var credentials =
user: 'MyUsername',
host: 'tcp://0.tcp.ngrok.io',
database: 'MyDatabase',
password: 'MyPassword',
port: '12829',
ssl: true
;
const pool = new PG.Pool(credentials);
const connectionPromise = function()
return new Promise(function (resolve, reject)
pool.connect(function (err, client, done)
if(err) console.log(err);
err ? reject(err) : resolve(
client: client,
done: done
)
)
);
;
exports.handler = Handler;
function Handler(event, context, callback)
context.callbackWaitsForEmptyEventLoop = false;
console.log("Calling handler in Lambda");
return connectionPromise().then(function (conn)
console.log("Success");
callback(null);
).catch(function (err)
console.log("Error");
callback(err);
);
;
// Uncomment this code to run locally.
// Handler(null, , function()
// console.log("Exiting");
// process.exit();
// );
但是,当我尝试使用 node-postgres + Ngrok 通过 Lambda 连接到我的本地主机数据库时...
错误:getaddrinfo ENOTFOUND tcp://0.tcp.ngrok.io tcp://0.tcp.ngrok.io:12829
完整的错误信息
开始请求 ID:3ac634ef-310e-41ab-b20f-14c86271b5d7 版本:$LATEST 2019-01-21T16:14:27.020Z 3ac634ef-310e-41ab-b20f-14c86271b5d7 来电 Lambda 中的处理程序 2019-01-21T16:14:27.117Z 3ac634ef-310e-41ab-b20f-14c86271b5d7 错误: getaddrinfo ENOTFOUND tcp://0.tcp.ngrok.io tcp://0.tcp.ngrok.io:12829 在 errnoException (dns.js:50:10) 在 GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26) 代码:'ENOTFOUND',errno:'ENOTFOUND',系统调用:'getaddrinfo', 主机名:'tcp://0.tcp.ngrok.io',主机:'tcp://0.tcp.ngrok.io', 端口:12829 2019-01-21T16:14:27.118Z 3ac634ef-310e-41ab-b20f-14c86271b5d7 错误 2019-01-21T16:14:27.155Z 3ac634ef-310e-41ab-b20f-14c86271b5d7 "errorMessage":"getaddrinfo ENOTFOUND tcp://0.tcp.ngrok.io tcp://0.tcp.ngrok.io:12829","errorType":"Error","stackTrace":["errnoException (dns.js:50:10)","GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)"] END RequestId: 3ac634ef-310e-41ab-b20f-14c86271b5d7 报告请求 ID:3ac634ef-310e-41ab-b20f-14c86271b5d7 持续时间: 136.26 毫秒计费持续时间:200 毫秒内存大小:128 MB 使用的最大内存:23 MB
lambda 会阻塞 ngrok 吗?
【问题讨论】:
【参考方案1】:从 ngrok 主机名中删除 tcp://
:
var credentials =
user: 'MyUsername',
host: '0.tcp.ngrok.io',
database: 'MyDatabase',
password: 'MyPassword',
port: '12829',
ssl: true
;
【讨论】:
以上是关于使用 Ngrok 从 AWS Lambda 连接到本地 PostgreSQL的主要内容,如果未能解决你的问题,请参考以下文章
我应该如何从 AWS Lambda 函数连接到 Redis 实例?
如何从 AWS Lambda Python 连接到 Informix DB
使用 Node.js 从 AWS Lambda 函数连接到 MySql 数据库,没有连接回调
无法从 AWS Lambda 连接到 AWS RDS MySql DB。 ClassNotFoundException:com.mysql.jdbc