LDJ*_*LDJ 1 amazon-web-services node.js aws-lambda
我有一个函数,在本地测试时运行良好,但通过 AWS Lambda 运行时似乎不执行 HTTP get。代码如下:
function makeAPIRequest(path, responseControl, callback) {
var responseString = '';
console.log("Executing makeAPIRequest to " + apiSettings.host + " and path " + path);
var options = {
host: apiSettings.host,
path: path,
method: 'GET',
headers: {
'X-Auth-Token': apiSettings.token
}
};
http.get(options, function (res) {
console.log('Status Code: ' + res.statusCode);
if (res.statusCode != 200) {
callback(new Error("Non 200 Response"));
}
res.on('data', function (data) {
responseString += data;
});
res.on('end', function () {
console.log('http end function hit...');
callback(null, responseString);
});
}).on('error', function (e) {
console.log("Communications error: " + e.message);
callback(new Error(e.message));
});
}
Run Code Online (Sandbox Code Playgroud)
我最初使用 request npm 包编写它,但失败了,所以我回到了普通的 http.get,但似乎都没有执行。在 Lambda 的日志输出中,我可以看到以下输出:
console.log("Executing makeAPIRequest to " + apiSettings.host + " and path " + path);
Run Code Online (Sandbox Code Playgroud)
传入正确的主机和路径,但是
console.log('Status Code: ' + res.statusCode);
Run Code Online (Sandbox Code Playgroud)
从不输出到屏幕。没有记录任何错误,我正在访问的 API 端点报告了 API 请求的数量,但这并没有改变,所以我认为甚至没有发出请求。
有没有人让 Lambda 进行 http 调用,如果是的话,对我在这里不做的事情有什么想法吗?
谢谢
编辑:验证 lambda 的高级设置部分中设置了“无 vpc”
每隔几天我就会在这里看到这个问题的一些变化。几乎在所有情况下,都是因为您将 Lambda 函数放置在 VPC 中。Lambda 函数不会在 VPC 内获得分配给它们的公共 IP 地址,因此它们无权访问 VPC 外部的任何内容。这会导致对 VPC 外部资源的网络调用挂起,就像您所描述的那样。
解决方案是将 Lambda 函数移至 VPC 之外,或将 NAT 网关添加到您的 VPC。
| 归档时间: |
|
| 查看次数: |
1342 次 |
| 最近记录: |