Lambda / nodejs http在未设置VPC的情况下超时

时间:2019-01-11 10:52:56

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

我正在尝试通过AWS lambda中的节点js执行HTTP PUT,但我一直在超时。根据{{​​3}},“具有VPC访问权限的Lambda函数将无法访问Internet,除非您添加NAT”,但就我而言,我没有使用VPC。

exports.handler = (event, context) => {
      const options = {
          host: 'xxx',
          path: 'xxx',
          port: 443,
          method: 'PUT'
      };
    req = http.request(options, (res) => {
      console.log(res);
    });
};

2 个答案:

答案 0 :(得分:0)

问题出在Lambdanode.js。
如果您想使用node.js版本8,则应编写类似example

的代码
exports.handler = async (event, context) => {
  const options = {
      host: 'xxx',
      path: 'xxx',
      port: 443,
      method: 'PUT'
  };
  const response = await http.request(options);
  console.log(response);
};

如果您不想使用node.js版本8,则应添加第三个参数callback并在函数执行后调用它。

exports.handler = (event, context, callback) => {
  const options = {
      host: 'xxx',
      path: 'xxx',
      port: 443,
      method: 'PUT'
  };
  req = http.request(options, (res) => {
    console.log(res);
    callback();
  });
};

答案 1 :(得分:0)

编写代码的方式,它不会返回任何响应。

您可以通过这种方式(在callback 4、6或8中使用node)...

exports.handler = (event, context, callback) => {
    const options = {
        host: 'xxx',
        path: 'xxx',
        port: 443,
        method: 'PUT'
    };

    return http.request(options, (result) => {
        console.log(result);

        // Calling callback sends "result" to API Gateway.
        return callback(null, result);
    });
};

或者,如果您想使用node 8对诺言的支持...

// You can use `async` if you use `await` inside the function.
// Otherwise, `async` is not needed. Just return the promise.
exports.handler = (event, context) => {
    const options = {
        host: 'xxx',
        path: 'xxx',
        port: 443,
        method: 'PUT'
    };

    return new Promise((resolve, reject) => {
        return http.request(options, result => {
            return resolve(result)
        })
    })
};