我对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');
});
});
};
在浏览互联网后,我尝试了以下解决方案:
有人可以帮我吗?
参考:
答案 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内部的内容。