Je commence avec AWS Lambda et j'essaie de demander un service externe à ma fonction de gestionnaire. Selon cette réponse , les requêtes HTTP devraient fonctionner correctement, et je n'ai trouvé aucune documentation indiquant le contraire. (En fait, des gens ont publié du code qui utilise l'API Twilio pour envoyer des SMS .)
Mon code de gestionnaire est:
var http = require('http');
exports.handler = function(event, context) {
console.log('start request to ' + event.url)
http.get(event.url, function(res) {
console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
console.log('end request to ' + event.url)
context.done(null);
}
et je vois les 4 lignes suivantes dans mes journaux CloudWatch:
2015-02-11 07:38:06 UTC START RequestId: eb19c89d-b1c0-11e4-bceb-d310b88d37e2
2015-02-11 07:38:06 UTC eb19c89d-b1c0-11e4-bceb-d310b88d37e2 start request to http://www.google.com
2015-02-11 07:38:06 UTC eb19c89d-b1c0-11e4-bceb-d310b88d37e2 end request to http://www.google.com
2015-02-11 07:38:06 UTC END RequestId: eb19c89d-b1c0-11e4-bceb-d310b88d37e2
Je m'attendrais à une autre ligne là-dedans:
2015-02-11 07:38:06 UTC eb19c89d-b1c0-11e4-bceb-d310b88d37e2 Got response: 302
mais cela manque. Si j'utilise la partie essentielle sans le wrapper de gestionnaire dans le nœud sur ma machine locale, le code fonctionne comme prévu.
Le que inputfile.txt
j'utilise pour l' invoke-async
appel est le suivant:
{
"url":"http://www.google.com"
}
Il semble que la partie du code du gestionnaire qui exécute la requête soit entièrement ignorée. J'ai commencé avec la librairie de requête et je suis revenu à l'utilisation de plain http
pour créer un exemple minimal. J'ai également essayé de demander une URL d'un service que je contrôle pour vérifier les journaux et il n'y a aucune demande entrant.
Je suis totalement perplexe. Y a-t-il une raison pour laquelle Node et / ou AWS Lambda n'exécuteraient pas la requête HTTP?