最佳答案
我正在开始使用 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
但这个不见了。如果我在本地计算机上的节点中使用不带处理程序包装器的基本部分,则代码将按预期工作。
我用于 invoke-async
调用的 inputfile.txt
是这样的:
{
"url":"http://www.google.com"
}
似乎完全跳过了处理程序代码中执行请求的部分。我从 请求自由开始,然后回过头来使用简单的 http
来创建一个最小的示例。我还尝试请求我控制的一个服务的 URL 来检查日志,但是没有任何请求进来。
我完全被难住了 Node 和/或 AWS Lambda 不执行 HTTP 请求的原因是什么?