web-dev-qa-db-fra.com

Demandes HTTP dans un AWS Lambda

Je suis nouveau sur Lambdas, donc il y a peut-être quelque chose que je n'ai pas encore saisi, mais j'ai écrit une simple fonction Lambda pour faire une requête HTTP vers un site externe. Pour une raison quelconque, que j'utilise les modules http ou https de Node, j'obtiens un ECONNREFUSED.

Voici ma 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");
    });
};

Voici la sortie du journal:

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

Existe-t-il une autorisation de rôle dont j'ai besoin pour effectuer des requêtes HTTP? Lambda autorise-t-il même les anciennes requêtes HTTP simples? Y a-t-il des en-têtes spéciaux que je dois définir?

Tout conseil est apprécié.

23
kevin628

J'ai résolu mon propre problème.

Apparemment, si vous décidez de fournir l'URL comme premier paramètre à .get(), vous devez inclure le http:// en amont de l'URL, par exemple, 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");
  });
};

Alternativement, vous pouvez spécifier le premier paramètre sous la forme hachage d'options , où hostname peut être la forme simple de l'URL. Exemple:

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