使用Ngrok从AWS Lamba连接到本地PostgreSQL

时间:2019-01-21 16:18:41

标签: lambda ngrok node-postgres

我正在尝试使用node-postgres (PG)连接到在端口5432上运行的localhost PostgreSQL数据库。为此,我设置了ngrok来传送请求。

./ngrok tcp 5432

以下代码在本地运行时有效(即使使用ngrok进行隧道传输时)。当我连接到外部数据库(在我的情况下由Heroku托管)时,它也适用于lambda。

'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

完整错误消息

  

START RequestId: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 [未完成](dns.js:92:26)处,代码:“ ENOTFOUND”,错误号:“ 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“:”错误“,” stackTrace“:[” errnoException   (dns.js:50:10)“,” GetAddrInfoReqWrap.onlookup [as oncomplete]   (dns.js:92:26)“]} END RequestId:3ac634ef-310e-41ab-b20f-14c86271b5d7   报告RequestId:3ac634ef-310e-41ab-b20f-14c86271b5d7持续时间:   136.26 ms计费时间:200 ms内存大小:128 MB使用的最大内存:23 MB

lambda是否阻止ngrok?

1 个答案:

答案 0 :(得分:0)

从ngrok主机名中删除 tcp://

var credentials = {
    user: 'MyUsername',
    host: '0.tcp.ngrok.io',
    database: 'MyDatabase',
    password: 'MyPassword',
    port: '12829',
    ssl: true
};