【问题标题】:Invoke api running on localhost from aws lambda in nodejs从 nodejs 中的 aws lambda 调用在 localhost 上运行的 api
【发布时间】:2019-09-05 23:28:20
【问题描述】:

我正在http://localhost:80/api/test 上运行一个 api,我想从 lambda 函数调用这个 api,但我不确定我应该使用什么插件或任何东西来访问它。这样做的原因是,我想做在开发阶段测试 lambda 和 api

【问题讨论】:

  • 如果 API 在您的开发机器上运行,请考虑将其移至 AWS 或专用服务器,否则您需要让 Lambda 连接到您的开发机器以访问 API (不推荐,除非在非常早期的调试/开发中)
  • 在 aws lambda 中运行的函数无法访问您的本地主机。你需要把它放在可以公开访问的地方。您可以使您的机器可公开访问并将其指向您的 IP 地址,但您可能会发现仅使用 ec2 实例或具有开发管道的东西更容易。如果您正在并行开发您的 api 和 lambda,并且不想每次更新都不断推送到云端,请在本地运行您的 lambda,以及使用类似 aws sam 的东西
  • 查看 ngrok,它将来自可公开解析的域的流量代理到您的本地计算机
  • 这里有一个step-by-step guide,它解释了如何在 Node 中调用从 AWS Lambda 运行的 API

标签: node.js aws-lambda localhost aws-serverless serverless-plugins


【解决方案1】:

我使用https://ngrok.com/ 来解决它。

以下是localhost https 网址的命令。您可以将端口号3000 替换为您的端口号。

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

下面是我的 Lambda 函数:

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();
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多