Lambda函数不执行http.get

我有一个函数,当在本地testing工作正常,但通过AWS Lambda运行似乎并没有执行HTTP get。 代码如下:

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)); }); } 

我最初使用请求npm包写它,但是失败了,所以我退回到香草http.get,但似乎都不执行。 在来自Lambda的日志输出中,我可以看到以下输出:

 console.log("Executing makeAPIRequest to " + apiSettings.host + " and path " + path); 

正确的主机和path被传入,但是

 console.log('Status Code: ' + res.statusCode); 

从不输出到屏幕。 没有错误logging,我正在访问的API端点报告了API请求的数量,但是这并没有改变,所以我不认为这个请求甚至是被做出来的。

有没有人有Lambda进行http调用,如果是的话,有什么我不在这里做什么想法?

谢谢

编辑:validation在lambda的高级设置部分中设置了“no vpc”

我每隔几天就会在这里看到这个问题的一些变化。 在几乎所有情况下,都是因为您将Lambda函数放置在您的VPC中。 Lambda函数不会在VPC内部获得分配给它们的公共IP地址,因此它们无法访问VPC之外的任何内容。 这会导致对VPC外部的资源进行networking调用,就像您所描述的一样。

解决方法是将Lambdafunction移到VPC之外,或将NAT网关添加到VPC。