使用node.js使用AWS-Lamda函数上的第三方Api

时间:2019-12-04 10:33:19

标签: node.js amazon-web-services aws-lambda

我对node.js以及AWS lambda都不陌生。最初,我已经安装了node.js并在其中运行一些基本脚本。我正在尝试使用Google,Youtube和IMDb等第三方API。我已经在本地计算机上编写了我的逻辑脚本,它在本地计算机上运行良好,就像我在{{1 }}该方法不起作用并引发错误。

以下是处理程序函数的逻辑:

exports.handler

基本上,在触发特定事件时,Lamda将使用API​​并返回JSON响应。 最初,当我使用Test触发此功能时,它将引发以下错误:

var https = require('https');

exports.handler = async(event) => {
    return sendRes(200, 'Hello');
};

const sendRes = (status, body) => {
    const options = {
        hostname: 'api.themoviedb.org',
        path: '3/search/movie?query=avengers&page=1&api_key=MY-API-KEY',
        method: 'GET',
        agent: false
    };
    console.log(options);
    const req = https.request(options, (res) => {
        console.log("statusCode: ", res.statusCode);
        res.on('data', (d) => {
            console.log('here in request');
        });
    });
};

在浏览互联网后,我尝试了以下解决方案:

  • 增加的内存
  • 增加执行时间

有人可以帮我吗?

参考:

  1. AWS Lambda “Process exited before completing request
  2. AWS Lambda: Task timed out

2 个答案:

答案 0 :(得分:0)

AWS使用特定的网络权限来使用来自外部世界的APIS。尽管您可以使用自己的aws端点,因为它在同一VPC上。我最终在互联网上搜索此问题时得到以下发现:

  

AWS Lambda使用您提供的VPC信息来设置ENI,   允许您的Lambda函数访问VPC资源。每个ENI是   从IP地址范围内的IP地址中分配了专用IP地址   您指定但未分配任何公共IP地址的子网。   因此,如果您的Lambda函数需要Internet访问(   例如,访问没有VPC终端节点的AWS服务,例如   Amazon Kinesis),您可以在VPC或   您可以使用Amazon VPC NAT网关。有关更多信息,请参见NAT。   Amazon VPC用户指南中的网关。您不能使用互联网   网关连接到您的VPC,因为这需要ENI具有   公用IP地址。

您可以查看下面提到的链接,以获取详细信息和配置。

参考文献:

解决方案: 我对VPC和NAT网关不满意,起初我删除了所有VPC规则,将其应用到我的Lamda上,并选择了暂无VPC。不建议这样做,因为我们必须附加VPC和NAT规则。

答案 1 :(得分:0)

您基本上需要一个可以访问Internet的公共子网,以便可以与外界对话。默认情况下,您只能访问vpc内部的内容。