Sto iniziando con AWS Lambda e sto cercando di richiedere un servizio esterno dalla mia funzione gestore. Secondo questa risposta , le richieste HTTP dovrebbero funzionare bene e non ho trovato alcuna documentazione che dica il contrario. (In effetti, le persone hanno pubblicato codice che utilizza l'API Twilio per inviare SMS .)
Il mio codice gestore è:
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);
}
e vedo le seguenti 4 righe nei miei log di 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
Mi aspetto un'altra riga lì dentro:
2015-02-11 07:38:06 UTC eb19c89d-b1c0-11e4-bceb-d310b88d37e2 Got response: 302
ma questo manca. Se sto usando la parte essenziale senza il wrapper del gestore nel nodo sulla mia macchina locale, il codice funziona come previsto.
Quello inputfile.txt
che sto usando è per la invoke-async
chiamata è questo:
{
"url":"http://www.google.com"
}
Sembra che la parte del codice del gestore che esegue la richiesta venga saltata completamente. Ho iniziato con la richiesta lib e sono tornato a usare plain http
per creare un esempio minimo. Ho anche provato a richiedere un URL di un servizio che controllo per controllare i log e non ci sono richieste in arrivo.
Sono totalmente perplesso. C'è qualche motivo per cui Node e / o AWS Lambda non eseguono la richiesta HTTP?