web-dev-qa-db-ja.com

AWS LambdaでのHTTPリクエスト

私はLambdasを初めて使用するので、まだ理解していないことがあるかもしれませんが、外部サイトへのHTTPリクエストを行う簡単なLambda関数を作成しました。何らかの理由で、Nodeのhttpまたはhttpsモジュールのどちらを使用しても、ECONNREFUSEDが返されます。

これが私のラムダです。

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リクエストさえ許可しますか?設定する必要がある特別なヘッダーはありますか?

任意のガイダンスをいただければ幸いです。

23
kevin628

私は自分の問題を解決しました。

どうやら、.get()の最初のパラメーターとしてURLをフィードすることにした場合、http:// URLの前に、たとえば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");
  });
};

または、最初のパラメーターを オプションのハッシュ として指定できます。ここで、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");
  });
};
19
kevin628