【发布时间】:2017-02-17 14:13:12
【问题描述】:
我有一个函数,在本地测试时运行良好,但通过 AWS Lambda 运行时似乎没有执行 HTTP 获取。 代码如下:
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));
});
}
我最初使用 request npm 包编写它,但失败了,所以我退回到 vanilla http.get,但似乎都没有执行。在 Lambda 的日志输出中,我可以看到以下输出:
console.log("Executing makeAPIRequest to " + apiSettings.host + " and path " + path);
传入正确的主机和路径,但是
console.log('Status Code: ' + res.statusCode);
从不输出到屏幕。没有记录任何错误,并且我访问的 API 端点报告了 API 请求的数量,但这并没有改变,所以我认为甚至没有发出请求。
有没有人让 Lambda 进行 http 调用,如果有,对我不在这里做什么有什么想法吗?
谢谢
编辑:验证在 lambda 的高级设置部分中设置了“无 vpc”
【问题讨论】:
-
您的 lambda 表达式是否以超时结束?它的超时设置是什么?
-
我刚刚检查了您的代码的稍微简化的版本是否适合我。您还有哪些其他回调可能会阻止
http.get()的处理程序启动? -
感谢 Leon,你带领我走上了正确的道路。原来是 JavaScript 的意大利面条代码在处理我的回调时存在问题,因此 Lambda 函数没有“等待”响应。
标签: node.js amazon-web-services aws-lambda