Lambda函数不执行http.get

时间:2016-10-08 19:33:40

标签: node.js amazon-web-services aws-lambda

我有一个功能,当在本地测试工作正常,但通过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包写的,但是失败了,所以我回到了vanilla http.get,但似乎都没有执行。在Lambda的日志输出中,我可以看到以下输出:

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

传入正确的主机和路径,但

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

从不输出到屏幕。没有记录任何错误,我点击的API端点会报告API请求的数量,但这不会发生变化,因此我认为请求甚至没有。

有没有人让Lambda打过http电话,如果是的话,有什么想法我不在这里做什么?

由于

修改:验证了没有vpc'在lambda的高级设置部分设置

1 个答案:

答案 0 :(得分:4)

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

解决方案是将Lambda函数移到VPC之外,或者将NAT网关添加到您的VPC。