【发布时间】:2015-04-11 12:42:39
【问题描述】:
我开始使用 AWS Lambda,并尝试从我的处理程序函数请求外部服务。根据this answer 的说法,HTTP 请求应该可以正常工作,而且我还没有找到任何其他说明的文档。 (其实已经有人发了code that use the Twilio API to send SMS。)
我的处理程序代码是:
var http = require('http');
exports.handler = function(event, context) {
console.log('start request to ' + event.url)
http.get(event.url, function(res) {
console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
console.log('end request to ' + event.url)
context.done(null);
}
我在 CloudWatch 日志中看到以下 4 行:
2015-02-11 07:38:06 UTC START RequestId: eb19c89d-b1c0-11e4-bceb-d310b88d37e2
2015-02-11 07:38:06 UTC eb19c89d-b1c0-11e4-bceb-d310b88d37e2 start request to http://www.google.com
2015-02-11 07:38:06 UTC eb19c89d-b1c0-11e4-bceb-d310b88d37e2 end request to http://www.google.com
2015-02-11 07:38:06 UTC END RequestId: eb19c89d-b1c0-11e4-bceb-d310b88d37e2
我希望那里有另一行:
2015-02-11 07:38:06 UTC eb19c89d-b1c0-11e4-bceb-d310b88d37e2 Got response: 302
但那是缺失的。如果我在本地机器上的节点中使用没有处理程序包装器的基本部分,则代码将按预期工作。
我正在使用的inputfile.txt 用于invoke-async 调用是这样的:
{
"url":"http://www.google.com"
}
似乎完全跳过了执行请求的处理程序代码部分。我从request lib 开始,然后回退到使用普通的http 来创建一个最小的示例。我还尝试请求我控制的服务的 URL 以检查日志并且没有请求进入。
我完全被难住了。 Node 和/或 AWS Lambda 是否有任何原因不执行 HTTP 请求?
【问题讨论】:
-
我认为这可能是由于您的 HTTP 请求中缺少用户代理造成的。
-
在撰写本文时,这是目前 AWS 论坛的 Lambda 论坛中的热门问题。这让我和其他一群人都快疯了。
-
@Nostradamus 感谢任何额外的反馈、更正和支持。将它们发送到这里 ;-)
-
我尝试了从 Twillo 示例到 Alexa 节点示例包附带的几个默认示例以及您的 context.done() 方法的所有内容。 http POST 不工作。是否可以发布您的 POST 请求代码的完整示例?
标签: node.js amazon-web-services httprequest aws-lambda