私は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リクエストさえ許可しますか?設定する必要がある特別なヘッダーはありますか?
任意のガイダンスをいただければ幸いです。
私は自分の問題を解決しました。
どうやら、.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");
});
};