Rozpoczynam pracę z AWS Lambda i próbuję zażądać usługi zewnętrznej z mojej funkcji obsługi. Zgodnie z tą odpowiedzią żądania HTTP powinny działać dobrze, a nie znalazłem żadnej dokumentacji, która mówi inaczej. (W rzeczywistości ludzie opublikowali kod, który używa interfejsu API Twilio do wysyłania wiadomości SMS ).
Mój kod obsługi to:
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);
}
i widzę następujące 4 wiersze w moich dziennikach 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
Spodziewałbym się tam kolejnej linii:
2015-02-11 07:38:06 UTC eb19c89d-b1c0-11e4-bceb-d310b88d37e2 Got response: 302
ale tego brakuje. Jeśli używam podstawowej części bez opakowania programu obsługi w węźle na moim komputerze lokalnym, kod działa zgodnie z oczekiwaniami.
inputfile.txt
Używam jest dla invoke-async
połączenia jest następujący:
{
"url":"http://www.google.com"
}
Wygląda na to, że część kodu obsługi, która wykonuje żądanie, jest całkowicie pomijana. Zacząłem od żądania lib i wróciłem do używania zwykłego http
do tworzenia minimalnego przykładu. Próbowałem również zażądać adresu URL usługi, którą kontroluję, aby sprawdzić dzienniki, ale nie przychodzą żadne żądania.
Jestem totalnie zaskoczony. Czy jest jakiś powód, dla którego Node i / lub AWS Lambda nie wykonałyby żądania HTTP?