Saya memulai dengan AWS Lambda dan saya mencoba meminta layanan eksternal dari fungsi penangan saya. Menurut jawaban ini , permintaan HTTP seharusnya berfungsi dengan baik, dan saya belum menemukan dokumentasi yang mengatakan sebaliknya. (Faktanya, orang telah memposting kode yang menggunakan Twilio API untuk mengirim SMS .)
Kode penangan saya adalah:
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);
}
dan saya melihat 4 baris berikut di log CloudWatch saya:
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
Saya mengharapkan baris lain di sana:
2015-02-11 07:38:06 UTC eb19c89d-b1c0-11e4-bceb-d310b88d37e2 Got response: 302
tapi itu hilang. Jika saya menggunakan bagian penting tanpa pembungkus penangan di node di mesin lokal saya, kode berfungsi seperti yang diharapkan.
Yang inputfile.txt
saya gunakan untuk invoke-async
panggilan adalah ini:
{
"url":"http://www.google.com"
}
Sepertinya bagian dari kode penangan yang melakukan permintaan dilewati seluruhnya. Saya mulai dengan permintaan lib dan kembali menggunakan plainhttp
untuk membuat contoh minimal. Saya juga mencoba meminta URL dari layanan yang saya kontrol untuk memeriksa log dan tidak ada permintaan yang masuk.
Saya benar-benar bingung. Apakah ada alasan Node dan / atau AWS Lambda tidak akan menjalankan permintaan HTTP?