Вызвать API, работающий на локальном хосте, из aws lambda в nodejs

#node.js #aws-lambda #localhost #aws-serverless #serverless-plugins

#node.js #aws-lambda #localhost #aws-бессерверный #бессерверные плагины

Вопрос:

Я запускаю api на http://localhost:80/api/test , я хочу вызвать этот api из лямбда-функции, но я не уверен, какой плагин или что-либо еще я должен использовать для доступа к нему.Причина этого в том, что я хочу провести тестирование lambda и api на этапе разработки

Комментарии:

1. Если API запущен на вашей машине разработки, рассмотрите возможность переноса его также на AWS или выделенный сервер, иначе вам потребуется подключить Lambda к вашей машине разработки для доступа к API (не рекомендуется, если только на очень ранней стадии отладки / разработки)

2. функция, запущенная в aws lambda, не может получить доступ к вашему локальному хосту. Вам нужно поместить его в общедоступное место. Вы можете сделать свой компьютер общедоступным и указать его на свой IP-адрес, но вам, вероятно, будет проще просто использовать экземпляр ec2 или что-то с конвейером разработки. Если вы разрабатываете свой api и lambda параллельно и не хотите постоянно загружать каждое обновление в облако, запустите свой lambda локально с помощью чего-то вроде aws sam

3. проверьте ngrok, который будет передавать трафик из общедоступного разрешаемого домена на ваш локальный компьютер

4. Вот пошаговое руководство , в котором объясняется, как вызвать API, работающий из AWS Lambda в Node

Ответ №1:

Я использовал https://ngrok.com / чтобы решить эту проблему.

Ниже приведена команда для localhost URL-адресов https. Вы можете заменить номер порта 3000 на свой номер порта.

 ngrok http https://localhost:3000 -host-header="localhost:3000"
  

Ниже приведена моя лямбда-функция:

 var https = require('https');

exports.testJob = (event, context, callback) => {
var params = {
    host: "90abcdef.ngrok.io",
    path: "/api/test"

};

var req = https.request(params, function(res) {
    let data = '';
    console.log('STATUS: '   res.statusCode);
    res.setEncoding('utf8');
    res.on('data', function(chunk) {
        data  = chunk;
    });
    res.on('end', function() {
        console.log("DONE");
        console.log(JSON.parse(data));
        });
    });
    req.end();
};
  

Комментарии:

1. опечатка, это должно быть —host-header