AWS Lambda 中的 HTTP 请求

HTTP Requests in an AWS Lambda

我是 Lambdas 的新手,所以也许有些东西我还没有理解,但我已经编写了一个简单的 Lambda 函数来向外部站点发出 HTTP 请求。出于某种原因,无论我使用 Node 的 http 还是 https 模块,我都会得到一个 ECONNREFUSED

这是我的 Lambda:

var http = require('http');

exports.handler = function (event, context) {
    http.get('www.google.com', function (result) {
        console.log('Success, with: ' + result.statusCode);
        context.done(null);
    }).on('error', function (err) {
        console.log('Error, with: ' + err.message);
        context.done("Failed");
    });
};

这是日志输出:

START RequestId: request hash
2015-08-04T14:57:56.744Z    request hash                Error, with: connect ECONNREFUSED
2015-08-04T14:57:56.744Z    request hash                {"errorMessage":"Failed"}
END RequestId: request hash

我需要角色权限才能执行 HTTP 请求吗? Lambda 甚至允许普通的旧 HTTP 请求吗?有什么特别的headers需要设置吗?

感谢任何指导。

我解决了我自己的问题。

显然,如果您决定将 URL 作为第一个参数提供给 .get(),则必须在 URL 之前包含 http://,例如, http://www.google.com

var http = require('http');

exports.handler = function (event, context) {
  http.get('http://www.google.com', function (result) {
    console.log('Success, with: ' + result.statusCode);
    context.done(null);
  }).on('error', function (err) {
    console.log('Error, with: ' + err.message);
    context.done("Failed");
  });
};

或者,您可以将第一个参数指定为 hash of options,其中 hostname 可以是 URL 的简单形式。示例:

var http = require('http');

exports.handler = function (event, context) {
  var getConfig = {
    hostname: 'www.google.com'
  };
  http.get(getConfig, function (result) {
    console.log('Success, with: ' + result.statusCode);
    context.done(null);
  }).on('error', function (err) {
    console.log('Error, with: ' + err.message);
    context.done("Failed");
  });
};