我开始使用AWS Lambda,并且尝试从处理程序功能请求外部服务。根据这个答案,HTTP请求应该可以正常工作,而且我还没有找到其他说明的文档。(实际上,人们已经发布了使用Twilio API发送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"
}
似乎处理程序代码中执行请求的部分被完全跳过。我从请求库开始,然后回到使用Plainhttp
创建一个最小示例。我还尝试请求我控制的服务的URL以检查日志,并且没有任何请求进入。
我完全迷住了。节点和/或AWS Lambda不会执行HTTP请求有什么原因吗?