Использование Ngrok для подключения к локальному PostgreSQL из AWS Lamba - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь использовать node-postgres (PG) для подключения к моей локальной базе данных PostgreSQL, работающей на порту 5432. Для этого я настроил ngrok для туннелированиямой запрос.

./ngrok tcp 5432

Приведенный ниже код работает при локальном запуске (даже при туннелировании с использованием ngrok).Это также работает на лямбда, когда я подключаюсь к внешней базе данных - в моем случае, размещенной на 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 для подключения к моей базе данных localhost через 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-14c7b1b: getaddrinfo ENOTFOUND tcp: //0.tcp.ngrok.io tcp: //0.tcp.ngrok.io: 12829 в errnoException (dns.js: 50: 10) в GetAddrInfoReqWrap.onlookup [как oncomplete] (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 ":" Error "," stackTrace ": [" errnoException (dns.js: 50: 10) "," GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js: 92: 26) "]} КОНЕЦ RequestId: 3ac634ef-310e-41ab-b20f-14c86271b5d7 ОТЧЕТ RequestId: 3ac634ef-310e-41ab-b20f-14c86271b5d7 Продолжительность: 136,26 мсек.мс Размер памяти: 128 МБ Макс. используемая память: 23 МБ

Блокирует лямбда-нгрок?

1 Ответ

0 голосов
/ 11 мая 2019

Удалить tcp:// из имени хоста ngrok:

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