我开始使用 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"
}
似乎完全跳过了执行请求的处理程序代码部分。我从request lib开始,然后回到使用 plainhttp
来创建一个最小的例子。我还尝试请求我控制的服务的 URL 以检查日志并且没有请求进入。
我完全被难住了。Node 和/或 AWS Lambda 是否有任何理由不执行 HTTP 请求?