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.txtche sto usando è per la invoke-asyncchiamata è 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 httpper 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?
